تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
خطأ في كود الجمع عند الحفظ
#2
تفضل الكودين بعد الترتيب الكامل، وتم تضمين منطق جمع الدرجات (ON + TO = TR) بطريقة صحيحة وآمنة.

أولاً: فورم رصد درجات الأعمال (ON)

PHP كود :
Private Sub Save_Grade()
 
   Try
        If DataGridView1
.Rows.Count 0 OrElse (DataGridView1.Rows.Count 1 AndAlso DataGridView1.Rows(0).IsNewRowThen
            MessageBox
.Show(" عفواً ، لا توجـد بيانــات للحفظ""تنبيــه"MessageBoxButtons.OKMessageBoxIcon.ErrorMessageBoxDefaultButton.Button1MessageBoxOptions.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(querycon)
 
           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(querycon)
 
               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(querycon)
 
               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.MessageMsgBoxStyle.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).IsNewRowThen
            MessageBox
.Show(" عفواً ، لا توجـد بيانــات للحفظ""تنبيــه"MessageBoxButtons.OKMessageBoxIcon.ErrorMessageBoxDefaultButton.Button1MessageBoxOptions.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(querycon)
 
           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(querycon)
 
               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(querycon)
 
               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.MessageMsgBoxStyle.Critical)
 
   End Try
End Sub 

ملاحظات إضافية:
تأكد من وجود الحقول ON1, TO1, TR1 ... في جدول TBL_Final1.
في كلا الفورمين، الحقل رقم 5 يمثل الدرجة التي تُدخلها.
الحقل رقم 7 يظهر فيها الدرجة النهائية لكل طالب.
التحقق من القيم يتم بالاعتماد على SelectedIndex + 1 لضمان الربط الصحيح بين المادة والمصفوفة المناسبة.
الرد }}}
تم الشكر بواسطة: مصمم هاوي , مصمم هاوي , Zuhare


الردود في هذا الموضوع
RE: خطأ في كود الجمع عند الحفظ - بواسطة Kamil - 19-04-25, 11:07 PM


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


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