منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] مشكلة مع برنامج حجز مواعيد - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] مشكلة مع برنامج حجز مواعيد (/showthread.php?tid=34562)



مشكلة مع برنامج حجز مواعيد - Doctor GME - 02-05-20

هذه هى الواجهة الرئيسية فى برنامجى:



عند كتابة ID والضغط على زر View يبحث البرنامج فى قاعدة البيانات التالية:



بواسطة هذا الكود:

كود :
Imports System.Data.OleDb
Public Class Form1

   Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Reservation.accdb")
   Dim cmd As OleDbCommand
   Dim dr As OleDbDataReader

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

       Try
           cnn.Open()
           Dim sql As String = "SELECT * FROM Appointments WHERE PersonID=@id"
           cmd = New OleDbCommand(sql, cnn)
           cmd.Parameters.AddWithValue("@id", TextBox1.Text)
           dr = cmd.ExecuteReader()
           If dr.Read = False Then
               User_ID.DateTimePicker1.Value = Date.Now
           Else
               User_ID.DateTimePicker1.Value = dr.Item(0).ToString
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       Finally
           If (cnn.State = ConnectionState.Open) Then cnn.Close()
       End Try

       User_ID.Show()

   End Sub
End Class

ثم يفتح Form التالية:



وعندما يجد رقم ID مسجل فى قاعدة البيانات يتحول تلقائياً لليوم المسجل به
ويغير label backcolor للمكان الذى تم به الحجز للون البنفسجى
عن طريق هذا الكود:

كود :
Imports System.Data.OleDb
Public Class User_ID

   Dim cnn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Reservation.accdb")
   Dim cmd As OleDbCommand
   Dim da As OleDbDataAdapter
   Dim cm As OleDbCommandBuilder
   Dim dr As OleDbDataReader
   Dim dt As DataTable

   Private Sub User_ID_Load(sender As Object, e As EventArgs) Handles MyBase.Load

       DateTimePicker1.Format = DateTimePickerFormat.Custom
       DateTimePicker1.CustomFormat = "dd-MMMM-yyyy"

       Try
           cnn.Open()
           Dim sql As String = "SELECT * FROM Appointments WHERE AppDate=@date"
           Dim cmd As New OleDbCommand(sql, cnn)
           cmd.Parameters.AddWithValue("@date", DateTimePicker1.Value.ToShortDateString)
           Using dr As OleDbDataReader = cmd.ExecuteReader()
               If dr.HasRows Then
                   Do While dr.Read()

                       If dr.Item(2).ToString = "Yes" Then
                           Label1.BackColor = Color.Violet
                       Else
                           Label1.BackColor = SystemColors.Control
                       End If

                       If dr.Item(3).ToString = "Yes" Then
                           Label2.BackColor = Color.Violet
                       Else
                           Label2.BackColor = SystemColors.Control
                       End If

                       If dr.Item(4).ToString = "Yes" Then
                           Label3.BackColor = Color.Violet
                       Else
                           Label3.BackColor = SystemColors.Control
                       End If

                       If dr.Item(5).ToString = "Yes" Then
                           Label4.BackColor = Color.Violet
                       Else
                           Label4.BackColor = SystemColors.Control
                       End If

                   Loop
               End If
               dr.Close()
           End Using
       Catch ex As Exception
           MsgBox(ex.Message)
       Finally
           If (cnn.State = ConnectionState.Open) Then cnn.Close()
       End Try

   End Sub

   Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged

       Try
           cnn.Open()
           Dim sql As String = "SELECT * FROM Appointments WHERE AppDate=@date"
           Dim cmd As New OleDbCommand(sql, cnn)
           cmd.Parameters.AddWithValue("@date", DateTimePicker1.Value.ToShortDateString)
           Dim dr As OleDbDataReader = cmd.ExecuteReader()
           If dr.HasRows Then
               Do While dr.Read()

                   If dr.Item(2).ToString = "Yes" Then
                       Label1.BackColor = Color.Violet
                   Else
                       Label1.BackColor = SystemColors.Control
                   End If

                   If dr.Item(3).ToString = "Yes" Then
                       Label2.BackColor = Color.Violet
                   Else
                       Label2.BackColor = SystemColors.Control
                   End If

                   If dr.Item(4).ToString = "Yes" Then
                       Label3.BackColor = Color.Violet
                   Else
                       Label3.BackColor = SystemColors.Control
                   End If

                   If dr.Item(5).ToString = "Yes" Then
                       Label4.BackColor = Color.Violet
                   Else
                       Label4.BackColor = SystemColors.Control
                   End If

               Loop
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       Finally
           If (cnn.State = ConnectionState.Open) Then cnn.Close()
       End Try

   End Sub
End Class

حتى الآن كل شىء على ما يرام ولكن إذا لاحظتم بالأعلى فى صورة قاعدة البيانات
إذا كتبت ID رقم 5 مثلاً سيتحول لتاريخ 9 ابريل ويغير لون ال label الثالث
ولكن هناك حجز آخر بتاريخ 9 ابريل وذلك للمكان الأول ولكنه لا يغير لونه
أى أن reader يقرأ نتيجة واحدة فقط ولا أعرف الخطأ الذى لا يجعله يبحث فى الكود كله
البرنامج فى المرفقات


RE: مشكلة مع برنامج حجز مواعيد - عبد العزيز البسكري - 02-05-20

لا يتغيّر اللون لأنّه من المفروض تكون عبارة YES مكتوبة للمقعد الأوّل بقاعدة البيانات



RE: مشكلة مع برنامج حجز مواعيد - Doctor GME - 02-05-20

كلمة yes مكتوبة أخى العزيز ولكن التاريخ مسجل مرتين فى قاعدة البيانات كما فى الصورة:



ولكن الكود ينفذ فقط التاريخ المقابل لل ID رقم 5
وهذا ضد وظيفة البرنامج فالمربع الأول محجوز أيضاً ويجب أن يتغير لونه


RE: مشكلة مع برنامج حجز مواعيد - ابراهيم ايبو - 02-05-20

السلام عليكم 
اخي الكريم بما انك تبحث برقم الاي دي فحتما السجل سيكون واحد فقط 
يجب عمل استعلام  أخر في نفس الكود وظيفته جلب كل الحجوزات بنفس التاريخ
ثم عمل حلقة دوران على السجلات المجلوبة وتغيير لون اللايبل الموافق للحجز 



RE: مشكلة مع برنامج حجز مواعيد - WaeLx - 02-05-20

(02-05-20, 05:43 AM)Doctor GME كتب : حتى الآن كل شىء على ما يرام ولكن إذا لاحظتم بالأعلى فى صورة قاعدة البيانات
إذا كتبت ID رقم 5 مثلاً سيتحول لتاريخ 9 ابريل ويغير لون ال label الثالث
ولكن هناك حجز آخر بتاريخ 9 ابريل وذلك للمكان الأول ولكنه لا يغير لونه
أى أن reader يقرأ نتيجة واحدة فقط ولا أعرف الخطأ الذى لا يجعله يبحث فى الكود كله
البرنامج فى المرفقات


السلام عليكم و رحمة الله و بركاته

السبب هو شرط if 

 عدلت لك المثال ليعمل كما تريد


RE: مشكلة مع برنامج حجز مواعيد - Doctor GME - 03-05-20

شكراً أخى WaeLx
بعد بعض التعديلات يعمل جيداً
والشكر أيضاً للأخ ابراهيم ايبو لمحاولته المساعدة