26-04-25, 03:33 AM
في الفـــورم FormSemester4 يتم إدخال درجـــات الدور التكميلي من (100) فــي المصفوفـة (tr1 - tr2 - tr3 - tr4 - tr5 - tr6 )
ولكن عند حفظ الدرجــات المرقمة بــ (3) فـي الحقل (IDSemester) يتم تكــرار الصفوف
جربت كثير من الأكواد ولكن دون جدوى (وفي المثال كودين للحفظ)
وكذلك عند الحفظ يظهر خطأ تكرار القيم حتى يتم إلغـاء المفتاح الرئيسي والثانوي؛ ولا يمكن جمع الدرجــات النهائيــة بدونهما
للعلم أن هذه المشكلة في هذا الفورم FormSemester4 فقط
أرجـــــــــــــــــــــو معالجـــــــــــــــــة المشكلــة
حاولتُ إرفاق مثال ولكن لم يقبل
هذا هو الكود الأول
وهذا هو الكود الثاني
ولكن عند حفظ الدرجــات المرقمة بــ (3) فـي الحقل (IDSemester) يتم تكــرار الصفوف
جربت كثير من الأكواد ولكن دون جدوى (وفي المثال كودين للحفظ)
وكذلك عند الحفظ يظهر خطأ تكرار القيم حتى يتم إلغـاء المفتاح الرئيسي والثانوي؛ ولا يمكن جمع الدرجــات النهائيــة بدونهما
للعلم أن هذه المشكلة في هذا الفورم FormSemester4 فقط
أرجـــــــــــــــــــــو معالجـــــــــــــــــة المشكلــة
حاولتُ إرفاق مثال ولكن لم يقبل
هذا هو الكود الأول
كود :
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " & "Data Source=" & Application.StartupPath & "\DataBase\Data_Base.accdb")
If DataGridView1.Rows.Count = 0 Then Exit Sub
con.Open()
For i As Integer = 0 To DataGridView1.Rows.Count - 2
Dim query As String = "SELECT * FROM TBL_Final1 WHERE IDStudent = ? AND IDClas = ? AND ClassroomID = ? AND IDSemester = ?"
Dim command As New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value)) ' IDStudent
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value)) ' IDClas
command.Parameters.AddWithValue("?", Combroom.SelectedIndex + 1) ' ClassroomID
command.Parameters.AddWithValue("?", Val(CombSemester.SelectedItem.ToString)) ' IDSemester
Dim reader As OleDbDataReader = command.ExecuteReader()
If reader.Read() Then
reader.Close()
query = "UPDATE TBL_Final1 SET tr" & CombCourses.SelectedIndex + 1 & " = ? WHERE IDStudent = ? AND IDClas = ? AND ClassroomID = ? AND IDSemester = ?"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(5).Value)) ' TRValue
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value)) ' IDStudent
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value)) ' IDClas
command.Parameters.AddWithValue("?", Combroom.SelectedIndex + 1) ' ClassroomID
command.Parameters.AddWithValue("?", Val(CombSemester.SelectedItem.ToString)) ' IDSemester
command.ExecuteNonQuery()
Else
reader.Close()
query = "INSERT INTO TBL_Final1 (IDStudent, IDClas, ClassroomID, IDSemester, tr" & CombCourses.SelectedIndex + 1 & ") VALUES (?, ?, ?, ?, ?)"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value)) ' IDStudent
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value)) ' IDClas
command.Parameters.AddWithValue("?", Combroom.SelectedIndex + 1) ' ClassroomID
command.Parameters.AddWithValue("?", Val(CombSemester.SelectedItem.ToString)) ' IDSemester
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(5).Value)) ' TRValue
command.ExecuteNonQuery()
End If
Next
con.Close()
MessageBox.Show("تم رصد درجــات : " & " " & FormMin.ListBoxClas.Text & vbCrLf & " لمــادة : " & Me.CombCourses.Text & " * بنجــاح ", "الإجـــراء", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
' إفراغ عمود درجات الأعمال
For Each row As DataGridViewRow In DataGridView1.Rows
row.Cells(5).Value = DBNull.Value
Next
' عدم إضافة عمود بعد الوصول لآخر طالب
For Each row As DataGridViewRow In DataGridView1.Rows
If Not row.IsNewRow Then
row.Cells(5).Value = DBNull.Value
End If
Next
End Subوهذا هو الكود الثاني
كود :
Private Sub ButSave_Click(sender As Object, e As EventArgs) Handles ButSave.Click
' صب حفظ الدرجـات
Save_Grade()
End Sub
Private Sub Save_Grade()
Try
If DataGridView1.Rows.Count = 0 OrElse (DataGridView1.Rows.Count = 1 AndAlso DataGridView1.Rows(0).IsNewRow) Then
MessageBox.Show(" عفواً ، لا توجـد بيانــات للحفظ", "تنبيــه", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\DataBase\Data_Base.accdb")
con.Open()
For i As Integer = 0 To DataGridView1.Rows.Count - 2
Dim IDStudent As Integer = Val(DataGridView1.Rows(i).Cells(0).Value)
Dim IDClas As Integer = FormMin.ListBoxClas.SelectedIndices(0) + 1
Dim ClassroomID As Integer = Combroom.SelectedIndex + 1
'Dim IDSemester As Integer = 1
Dim IDSemester As Integer = Val(CombSemester.Text)
Dim ONValue As Integer = Val(DataGridView1.Rows(i).Cells(5).Value)
DataGridView1.Rows(i).Cells(7).Value = ONValue
Dim courseIndex As Integer = CombCourses.SelectedIndex + 1
Dim query As String = "SELECT * FROM TBL_Final1 WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?"
Dim command As New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", IDStudent)
command.Parameters.AddWithValue("?", IDClas)
command.Parameters.AddWithValue("?", ClassroomID)
command.Parameters.AddWithValue("?", IDSemester)
Dim reader As OleDbDataReader = command.ExecuteReader()
If reader.HasRows Then
reader.Close()
query = "UPDATE TBL_Final1 SET ON" & courseIndex & "=? WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", ONValue)
command.Parameters.AddWithValue("?", IDStudent)
command.Parameters.AddWithValue("?", IDClas)
command.Parameters.AddWithValue("?", ClassroomID)
command.Parameters.AddWithValue("?", IDSemester)
command.ExecuteNonQuery()
Else
reader.Close()
query = "INSERT INTO TBL_Final1 (IDStudent, IDClas, ClassroomID, IDSemester, ON" & courseIndex & ") VALUES (?, ?, ?, ?, ?)"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", IDStudent)
command.Parameters.AddWithValue("?", IDClas)
command.Parameters.AddWithValue("?", ClassroomID)
command.Parameters.AddWithValue("?", IDSemester)
command.Parameters.AddWithValue("?", ONValue)
command.ExecuteNonQuery()
End If
' قراءة TO
Dim TOValue As Integer = 0
Dim cmdTO As New OleDbCommand("SELECT TO" & courseIndex & " FROM TBL_Final1 WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?", con)
cmdTO.Parameters.AddWithValue("?", IDStudent)
cmdTO.Parameters.AddWithValue("?", IDClas)
cmdTO.Parameters.AddWithValue("?", ClassroomID)
cmdTO.Parameters.AddWithValue("?", IDSemester)
Dim resultTO = cmdTO.ExecuteScalar()
If Not IsDBNull(resultTO) Then TOValue = CInt(resultTO)
' تحديث TR
'Dim TRValue As Integer = ONValue + 0
Dim cmdTR As New OleDbCommand("UPDATE TBL_Final1 SET TR" & courseIndex & "=? WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?", con)
'cmdTR.Parameters.AddWithValue("?", TRValue)
cmdTR.Parameters.AddWithValue("?", IDStudent)
cmdTR.Parameters.AddWithValue("?", IDClas)
cmdTR.Parameters.AddWithValue("?", ClassroomID)
cmdTR.Parameters.AddWithValue("?", IDSemester)
cmdTR.ExecuteNonQuery()
Next
con.Close()
MessageBox.Show("تم رصد درجــات أعمـال : " & " " & FormMin.ListBoxClas.Text & vbCrLf & " لمــادة : " & Me.CombCourses.Text & " * بنجــاح ", "الإجـــراء", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
' إفراغ عمود درجات الأعمال
For Each row As DataGridViewRow In DataGridView1.Rows
row.Cells(5).Value = DBNull.Value
Next
' منع إضافة صف جديد عند الوصول لآخر طالب
For Each row As DataGridViewRow In DataGridView1.Rows
If Not row.IsNewRow Then
row.Cells(5).Value = DBNull.Value
End If
Next
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Information)
Finally
End Try
End Sub