منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : تعديل في جزئية من الكود
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
أريد التعديل على الجزئية الأخيرة من الكود الخاص بشروط الاستعلام حسب الصف والمادة
فعند حذف شرط المـادة يشتغل الاستعلام 100%
لكن عند إضافة شرط استدعاء درجات المـادة هل تم رصد درجاتها أم لا فإنه يظهر خطأ في الاستعلام

مع العلم أريد أن يتم استدعاء أسماء الطلبـة حسب الصف الدراسي المحدد حتى لو لم يتم رصد درجة المادة؛ ليتم رصد الدرجات

وهذا هو الكود المستخدم في الاستعلام

كود :
arrListQuery.Add( _
                    "SELECT TBL_Student.IDStudent " & _
                    ", TBL_Student.NameStudent " & _
                    ", TBL_Student.IDClas " & _
                    ", TBL_Student.SETNO1 " & _
                    ", TBL_Student.SETNO2 " & _
                    ", TBL_Final1.IDSemester " & _
                    ", TBL_Final1.NameSClas " & _
                    ", TBL_Final1.on, TBL_Final1.to, TBL_Final1.tr " & _
                    "FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent " & _
                    "Where TBL_Student.IDClas=" & CInt(i + 1).ToString & "' and  TBL_Final1.ISDClas=" & CInt(i + 1).ToString)


والخطأ في الجزء التالي

كود :
"Where TBL_Student.IDClas=" & CInt(i + 1).ToString & "' and  TBL_Final1.ISDClas=" & CInt(i + 1).ToString)

قمتُ بتعديل هذا الجزء ولكن عند التنفيذ يظهر الخطأ أيضا
السلام عليكم ورحمة الله وبركاته

شيك على علمة التنصيص المفردة ( ' ) 
قبل وبعد العبارة التي تبحث بواسطتها أو تشترط بها
إذا كان الحقل نصي عليك أن تضعها قبل وبعد 
وإذا كان الحقل في قاعدة البيانات رقمي يجب ألا تضعها
(22-02-23, 07:14 PM)Taha Okla كتب : [ -> ]السلام عليكم ورحمة الله وبركاته

شيك على علمة التنصيص المفردة ( ' ) 
قبل وبعد العبارة التي تبحث بواسطتها أو تشترط بها
إذا كان الحقل نصي عليك أن تضعها قبل وبعد 
وإذا كان الحقل في قاعدة البيانات رقمي يجب ألا تضعها

بارك الله فيك أستاذ طه الحقلين رقميين ولكن لا يزال الخطا

اخي الكريم علامة التنصيص المفردة هذه لا بد لها من اخت اما قبلها او بعدها او احذفها
للأسف يوجد خطأ  ولم يتبين لي هذا الخطأ، والرجاء منكم التعديل حتى يتم استدعاء الدرجات حسب المادة
بحيث إذا لم يتم إدخال درجات لإحدى المواد الدراسية فإنه يتم إدخال درجتها

[attachment=28698]
(22-02-23, 10:15 PM)مصمم هاوي كتب : [ -> ]للأسف يوجد خطأ  ولم يتبين لي هذا الخطأ، والرجاء منكم التعديل حتى يتم استدعاء الدرجات حسب المادة
بحيث إذا لم يتم إدخال درجات لإحدى المواد الدراسية فإنه يتم إدخال درجتها


ذا :

كود :
Private Sub FillStudent()
       Try

           'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
           Dim arrListQuery As New ArrayList

           'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس
           'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة
           'Value ... SelectedIndices(i)

           For i As Integer = 0 To Me.listClas.Items.Count - 1

               If Me.listClas.GetSelected(i) Then
                   'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
                   'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
                   arrListQuery.Add(
                       "SELECT TBL_Student.IDStudent " &
                       ", TBL_Student.NameStudent " &
                       ", TBL_Student.IDClas " &
                       ", TBL_Student.SETNO1 " &
                       ", TBL_Student.SETNO2 " &
                       ", TBL_Final1.IDSemester " &
                       ",TBL_Final1.NameCourses " &
                       ",TBL_Final1.on " &
                       ",TBL_Final1.to " &
                       ",TBL_Final1.tr " &
                       " FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent " &
                       " Where TBL_Student.IDClas=" & CInt(i + 1).ToString() & " and TBL_Final1.IDClas=" & CInt(i + 1).ToString)

               End If

           Next

           '==========================

           'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
           Dim da As OleDb.OleDbDataAdapter

           da = New OleDbDataAdapter(Nothing, Con)
           'هنا تحديد متغير داتا سيت لتخزين البيانات
           Dim ds As New DataSet


           For i As Integer = 0 To arrListQuery.Count - 1

               If Not IsNothing(arrListQuery(i)) Then

                   'Assign the query string.
                   da.SelectCommand.CommandText = arrListQuery(i).ToString

                   'تعبئة مخزن البيانات من الاستعلام المحدد
                   da.Fill(ds, "Student")

               End If
           Next

           DataGridView1.DataSource = ds.Tables("Student")

           'تحديد بيانات الداتا قريد التي ستعبأ

           FillStudent_Load()
           'Destroy object.
           'arrListQuery = Nothing

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

   End Sub
(23-02-23, 07:44 AM)Taha Okla كتب : [ -> ]
(22-02-23, 10:15 PM)مصمم هاوي كتب : [ -> ]للأسف يوجد خطأ  ولم يتبين لي هذا الخطأ، والرجاء منكم التعديل حتى يتم استدعاء الدرجات حسب المادة
بحيث إذا لم يتم إدخال درجات لإحدى المواد الدراسية فإنه يتم إدخال درجتها


ذا :

كود :
Private Sub FillStudent()
       Try

           'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
           Dim arrListQuery As New ArrayList

           'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس
           'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة
           'Value ... SelectedIndices(i)

           For i As Integer = 0 To Me.listClas.Items.Count - 1

               If Me.listClas.GetSelected(i) Then
                   'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
                   'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
                   arrListQuery.Add(
                       "SELECT TBL_Student.IDStudent " &
                       ", TBL_Student.NameStudent " &
                       ", TBL_Student.IDClas " &
                       ", TBL_Student.SETNO1 " &
                       ", TBL_Student.SETNO2 " &
                       ", TBL_Final1.IDSemester " &
                       ",TBL_Final1.NameCourses " &
                       ",TBL_Final1.on " &
                       ",TBL_Final1.to " &
                       ",TBL_Final1.tr " &
                       " FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent " &
                       " Where TBL_Student.IDClas=" & CInt(i + 1).ToString() & " and TBL_Final1.IDClas=" & CInt(i + 1).ToString)

               End If

           Next

           '==========================

           'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
           Dim da As OleDb.OleDbDataAdapter

           da = New OleDbDataAdapter(Nothing, Con)
           'هنا تحديد متغير داتا سيت لتخزين البيانات
           Dim ds As New DataSet


           For i As Integer = 0 To arrListQuery.Count - 1

               If Not IsNothing(arrListQuery(i)) Then

                   'Assign the query string.
                   da.SelectCommand.CommandText = arrListQuery(i).ToString

                   'تعبئة مخزن البيانات من الاستعلام المحدد
                   da.Fill(ds, "Student")

               End If
           Next

           DataGridView1.DataSource = ds.Tables("Student")

           'تحديد بيانات الداتا قريد التي ستعبأ

           FillStudent_Load()
           'Destroy object.
           'arrListQuery = Nothing

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

   End Sub

ليس هذا هو المقصود فهذه الطريقة أعرفها جيداً ولكن ما أريده أن يتم استدعاء جميع طلبة الصف
حتى الطلبة الذين لم تسجل لهم درجات في المادة.
وتسجيل الدرجات يتم في الداتا قريدفيو مباشرةً؛ وبهذه الطريقة لن أستطيع أن أسجل درجات الطلبة الآخرين.
أسف على الإطالة ولكن هذا هو المطلوب.
مع العلم أن هذا الأمر نجح عندي في الفيجوال 6
اذن ذا:
كود :
Try

           'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
           Dim arrListQuery As New ArrayList

           'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس
           'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة
           'Value ... SelectedIndices(i)

           For i As Integer = 0 To Me.listClas.Items.Count - 1

               If Me.listClas.GetSelected(i) Then
                   'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
                   'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
                   arrListQuery.Add(
                       "SELECT TBL_Student.IDStudent " &
                       ", TBL_Student.NameStudent " &
                       ", TBL_Student.IDClas " &
                       ", TBL_Student.SETNO1 " &
                       ", TBL_Student.SETNO2 " &
                       ", TBL_Final1.IDSemester " &
                       ",TBL_Final1.NameCourses " &
                       ",TBL_Final1.on " &
                       ",TBL_Final1.to " &
                       ",TBL_Final1.tr " &
                       " FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent ") ' &
                   '" Where TBL_Student.IDClas=" & CInt(i + 1).ToString() & " and TBL_Final1.IDClas=" & CInt(i + 1).ToString)

               End If

           Next

           '==========================

           'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
           Dim da As OleDb.OleDbDataAdapter

           da = New OleDbDataAdapter(Nothing, Con)
           'هنا تحديد متغير داتا سيت لتخزين البيانات
           Dim ds As New DataSet


           For i As Integer = 0 To arrListQuery.Count - 1

               If Not IsNothing(arrListQuery(i)) Then

                   'Assign the query string.
                   da.SelectCommand.CommandText = arrListQuery(i).ToString

                   'تعبئة مخزن البيانات من الاستعلام المحدد
                   da.Fill(ds, "Student")

               End If
           Next

           DataGridView1.DataSource = ds.Tables("Student")

           'تحديد بيانات الداتا قريد التي ستعبأ

           FillStudent_Load()
           'Destroy object.
           'arrListQuery = Nothing

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try
(23-02-23, 02:07 PM)Taha Okla كتب : [ -> ]اذن ذا:
كود :
Try

           'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
           Dim arrListQuery As New ArrayList

           'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس
           'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة
           'Value ... SelectedIndices(i)

           For i As Integer = 0 To Me.listClas.Items.Count - 1

               If Me.listClas.GetSelected(i) Then
                   'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
                   'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
                   arrListQuery.Add(
                       "SELECT TBL_Student.IDStudent " &
                       ", TBL_Student.NameStudent " &
                       ", TBL_Student.IDClas " &
                       ", TBL_Student.SETNO1 " &
                       ", TBL_Student.SETNO2 " &
                       ", TBL_Final1.IDSemester " &
                       ",TBL_Final1.NameCourses " &
                       ",TBL_Final1.on " &
                       ",TBL_Final1.to " &
                       ",TBL_Final1.tr " &
                       " FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent ") ' &
                   '" Where TBL_Student.IDClas=" & CInt(i + 1).ToString() & " and TBL_Final1.IDClas=" & CInt(i + 1).ToString)

               End If

           Next

           '==========================

           'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
           Dim da As OleDb.OleDbDataAdapter

           da = New OleDbDataAdapter(Nothing, Con)
           'هنا تحديد متغير داتا سيت لتخزين البيانات
           Dim ds As New DataSet


           For i As Integer = 0 To arrListQuery.Count - 1

               If Not IsNothing(arrListQuery(i)) Then

                   'Assign the query string.
                   da.SelectCommand.CommandText = arrListQuery(i).ToString

                   'تعبئة مخزن البيانات من الاستعلام المحدد
                   da.Fill(ds, "Student")

               End If
           Next

           DataGridView1.DataSource = ds.Tables("Student")

           'تحديد بيانات الداتا قريد التي ستعبأ

           FillStudent_Load()
           'Destroy object.
           'arrListQuery = Nothing

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

على كلِّ حال هذا الكود لم يحقق المطلوب؛ ولهذا رجعتُ للمثال الأول وقمتٌ ببعض التعديلات وثم المطلوب بفضل الله تعالى
والذي أرجـوه هو التعديل على كود الحفظ حيث أريد أن يتم حفظ الدرجات في الحقول حسب  Index المـــــادة

للأسف مازلتُ في طـور التدرب على الدوت نت فتحملوني أساتذتي الكرام

[attachment=28712]
(27-02-23, 01:42 AM)مصمم هاوي كتب : [ -> ]
(23-02-23, 02:07 PM)Taha Okla كتب : [ -> ]اذن ذا:
كود :
Try

           'هنا متغير لحمل القيمة التي ستحدد أثناء النقر على البيان المختار من اللست بوكس
           Dim arrListQuery As New ArrayList

           'هنا حلقة فور نكست لتحدد القيم المختارة من اللست بوكس
           'لا ينبغي عليك استخدام فهرس القائمة عند اختيار القيمة
           'Value ... SelectedIndices(i)

           For i As Integer = 0 To Me.listClas.Items.Count - 1

               If Me.listClas.GetSelected(i) Then
                   'هنا متغير لتعبئة القيمة أثناء النقر على أحد قيم اللست بوكس
                   'لتحديد قيمة الصف المختار من قاعدة البيانات والمعبأ في اللست بوكس
                   arrListQuery.Add(
                       "SELECT TBL_Student.IDStudent " &
                       ", TBL_Student.NameStudent " &
                       ", TBL_Student.IDClas " &
                       ", TBL_Student.SETNO1 " &
                       ", TBL_Student.SETNO2 " &
                       ", TBL_Final1.IDSemester " &
                       ",TBL_Final1.NameCourses " &
                       ",TBL_Final1.on " &
                       ",TBL_Final1.to " &
                       ",TBL_Final1.tr " &
                       " FROM TBL_Final1 RIGHT JOIN TBL_Student ON TBL_Final1.IDStudent = TBL_Student.IDStudent ") ' &
                   '" Where TBL_Student.IDClas=" & CInt(i + 1).ToString() & " and TBL_Final1.IDClas=" & CInt(i + 1).ToString)

               End If

           Next

           '==========================

           'تحديد متغير لتعبئة مجموعة البيانات من الاستعلام
           Dim da As OleDb.OleDbDataAdapter

           da = New OleDbDataAdapter(Nothing, Con)
           'هنا تحديد متغير داتا سيت لتخزين البيانات
           Dim ds As New DataSet


           For i As Integer = 0 To arrListQuery.Count - 1

               If Not IsNothing(arrListQuery(i)) Then

                   'Assign the query string.
                   da.SelectCommand.CommandText = arrListQuery(i).ToString

                   'تعبئة مخزن البيانات من الاستعلام المحدد
                   da.Fill(ds, "Student")

               End If
           Next

           DataGridView1.DataSource = ds.Tables("Student")

           'تحديد بيانات الداتا قريد التي ستعبأ

           FillStudent_Load()
           'Destroy object.
           'arrListQuery = Nothing

       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try

على كلِّ حال هذا الكود لم يحقق المطلوب؛ ولهذا رجعتُ للمثال الأول وقمتٌ ببعض التعديلات وثم المطلوب بفضل الله تعالى
والذي أرجـوه هو التعديل على كود الحفظ حيث أريد أن يتم حفظ الدرجات في الحقول حسب  Index المـــــادة

ألا يوجد حلاً لمشكلة الحفظ