خطأ في كود الجمع عند الحفظ - مصمم هاوي - 19-04-25
هذين كودين يشتغلان 100٪ عند حذف الجزئية الخاصة
بتجميع الدرجات.
الكود الأول للفورم 1: لحفظ درجات المصفوفة (on)
مع جمعها مع المصفوفة (to) التي قيمتها (0)
ثم اظهار الناتج في مصفوفة (tr)
الكود الثاني للفورم 2: لحفظ درجات المصفوفة (to) مع تحديث الجمع المصفوفة (tr)
كود :
*أولا: فورم رصد درجات الأعمال*
`
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")
If DataGridView1.Rows.Count = 0 Then Exit Sub
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 = CInt(listClas.SelectedIndices(0) + 1)
Dim ClassroomID As Integer = CInt(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 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" & CombCourses.SelectedIndex + 1 & " = ? 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" & CombCourses.SelectedIndex + 1 & ") 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
Next
con.Close()
MsgBox("تم رصد درجــات الصــف : " & " " & listClas.Text & Chr(13) & " لمــادة : " & CombCourses.Text & " * بنجــاح " & "", MsgBoxStyle.Information, "الإجـــراء")
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Information)
Finally
End Try
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")
If DataGridView1.Rows.Count = 0 Then Exit Sub
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 = CInt(listClas.SelectedIndices(0) + 1)
```
RE: خطأ في كود الجمع عند الحفظ - Kamil - 19-04-25
تفضل الكودين بعد الترتيب الكامل، وتم تضمين منطق جمع الدرجات (ON + TO = TR) بطريقة صحيحة وآمنة.
أولاً: فورم رصد درجات الأعمال (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 لضمان الربط الصحيح بين المادة والمصفوفة المناسبة.
RE: خطأ في كود الجمع عند الحفظ - مصمم هاوي - 20-04-25
أجرب الكود وأخبركــــــــــــ بما يكون
وباركــــــــــ اللهُ فيكـــــــ أخــي الحبيب
RE: خطأ في كود الجمع عند الحفظ - مصمم هاوي - 20-04-25
تم تجربة الكود وتبين الآتي:
1- الكود الأول شغال 100% ولا إشكال فيه (100 نجمـة وزيـادة)
2- الكود الثاني شغال فيه خطأ بسيط هو:
درجات المصفوفة (on) يتم حفظها في حقول المصفوفة (to)
RE: خطأ في كود الجمع عند الحفظ - مصمم هاوي - 20-04-25
تم بفضل الله تعالى تعديل الكود وهو شغال 100٪
كود :
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 courseIndex As Integer = CombCourses.SelectedIndex + 1
' قراءة TOValue من العمود الصحيح
Dim TOValue As Integer = Val(DataGridView1.Rows(i).Cells(6).Value) ' تعديل الفهرس حسب الحاجة
' تحديث TO
Dim query As String = "UPDATE TBL_Final1 SET TO" & courseIndex & "=? WHERE IDStudent=? AND IDClas=? AND ClassroomID=? AND IDSemester=?"
Dim command As 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()
' قراءة 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)
End If
' تحديث 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
```
|