تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة مع برنامج حجز مواعيد
#1
Lightbulb 
هذه هى الواجهة الرئيسية فى برنامجى:



عند كتابة 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 يقرأ نتيجة واحدة فقط ولا أعرف الخطأ الذى لا يجعله يبحث فى الكود كله
البرنامج فى المرفقات


الملفات المرفقة
.rar   Search All Rows.rar (الحجم : 80.87 ك ب / التحميلات : 28)
الرد }}}
تم الشكر بواسطة: asemshahen5
#2
لا يتغيّر اللون لأنّه من المفروض تكون عبارة YES مكتوبة للمقعد الأوّل بقاعدة البيانات
قناتنا على اليوتوب
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , asemshahen5 , asemshahen5
#3
كلمة yes مكتوبة أخى العزيز ولكن التاريخ مسجل مرتين فى قاعدة البيانات كما فى الصورة:



ولكن الكود ينفذ فقط التاريخ المقابل لل ID رقم 5
وهذا ضد وظيفة البرنامج فالمربع الأول محجوز أيضاً ويجب أن يتغير لونه
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , asemshahen5 , asemshahen5
#4
السلام عليكم 
اخي الكريم بما انك تبحث برقم الاي دي فحتما السجل سيكون واحد فقط 
يجب عمل استعلام  أخر في نفس الكود وظيفته جلب كل الحجوزات بنفس التاريخ
ثم عمل حلقة دوران على السجلات المجلوبة وتغيير لون اللايبل الموافق للحجز 
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







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


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

السبب هو شرط if 

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


الملفات المرفقة
.rar   Search All Rows.rar (الحجم : 99.18 ك ب / التحميلات : 46)
الرد }}}
تم الشكر بواسطة: asemshahen5 , Doctor GME , ابراهيم ايبو
#6
شكراً أخى WaeLx
بعد بعض التعديلات يعمل جيداً
والشكر أيضاً للأخ ابراهيم ايبو لمحاولته المساعدة
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو



التنقل السريع :


يقوم بقرائة الموضوع: