19-04-25, 11:07 PM
تفضل الكودين بعد الترتيب الكامل، وتم تضمين منطق جمع الدرجات (ON + TO = TR) بطريقة صحيحة وآمنة.
أولاً: فورم رصد درجات الأعمال (ON)
ثانياً: فورم رصد درجات الامتحان (TO)
ملاحظات إضافية:
تأكد من وجود الحقول ON1, TO1, TR1 ... في جدول TBL_Final1.
في كلا الفورمين، الحقل رقم 5 يمثل الدرجة التي تُدخلها.
الحقل رقم 7 يظهر فيها الدرجة النهائية لكل طالب.
التحقق من القيم يتم بالاعتماد على SelectedIndex + 1 لضمان الربط الصحيح بين المادة والمصفوفة المناسبة.
أولاً: فورم رصد درجات الأعمال (ON)
PHP كود :
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 = listClas.SelectedIndices(0) + 1
Dim ClassroomID As Integer = Combroom.SelectedIndex + 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 + TOValue
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()
MsgBox("تم رصد درجــات الصــف: " & listClas.Text & vbCrLf & "لمــادة: " & CombCourses.Text & " بنجــاح", MsgBoxStyle.Information, "الإجـــراء")
Catch ex As Exception
MsgBox("خطأ: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
ثانياً: فورم رصد درجات الامتحان (TO)
PHP كود :
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 = listClas.SelectedIndices(0) + 1
Dim ClassroomID As Integer = Combroom.SelectedIndex + 1
Dim IDSemester As Integer = Val(CombSemester.Text)
Dim TOValue As Integer = Val(DataGridView1.Rows(i).Cells(5).Value)
DataGridView1.Rows(i).Cells(7).Value = TOValue
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 TO" & courseIndex & "=? WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", TOValue)
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, TO" & 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("?", TOValue)
command.ExecuteNonQuery()
End If
' قراءة ON
Dim ONValue As Integer = 0
Dim cmdON As New OleDbCommand("SELECT ON" & courseIndex & " FROM TBL_Final1 WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?", con)
cmdON.Parameters.AddWithValue("?", IDStudent)
cmdON.Parameters.AddWithValue("?", IDClas)
cmdON.Parameters.AddWithValue("?", ClassroomID)
cmdON.Parameters.AddWithValue("?", IDSemester)
Dim resultON = cmdON.ExecuteScalar()
If Not IsDBNull(resultON) Then ONValue = CInt(resultON)
' تحديث TR
Dim TRValue As Integer = ONValue + TOValue
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()
MsgBox("تم رصد درجات الامتحــان للصف: " & listClas.Text & vbCrLf & "لمادة: " & CombCourses.Text & " بنجاح", MsgBoxStyle.Information, "الإجــراء")
Catch ex As Exception
MsgBox("خطأ: " & ex.Message, MsgBoxStyle.Critical)
End Try
End Sub
ملاحظات إضافية:
تأكد من وجود الحقول ON1, TO1, TR1 ... في جدول TBL_Final1.
في كلا الفورمين، الحقل رقم 5 يمثل الدرجة التي تُدخلها.
الحقل رقم 7 يظهر فيها الدرجة النهائية لكل طالب.
التحقق من القيم يتم بالاعتماد على SelectedIndex + 1 لضمان الربط الصحيح بين المادة والمصفوفة المناسبة.
