(14-04-25, 03:00 AM)princelovelorn كتب : [ -> ]إقتباس :بارك الله فيك أخي العزيز على المساعدة ولكن الكود يحتاج إلى تعديل:
1- عند الاختيار من listClas الصفوف الدراسية يتم استدعاء طلبة الصف في الداتا قريدفيو ... هذا تمام
2- كذلك عند الضغط على listClas يمتلي CombCourses المواد الدراسية الخاصة بالصف الدراسي .... وهذا تمام
3- المشكلة تتمثل في الآتي:
- المفروض عند اختيار مادة لا يتم عرض درجاتها في الداتا قريدفيو إلا بناء على رقم الامتحان من CombSemester
- ولو لم يتم رصد درجات المادة المختارة من CombCourses فلا يتم إفراغ الداتا قريدفيو من أسماء الطلبة
فلو لاحظت أنه عندما يتم إختيار امتحان من CombSemester لم يتم تسجيل درجاته يتم إفراغ الداتا قريدفيو من أسماء الطلبة وهذا خطأ
فكيف سيتم تسجيل الدرجات لهذه المادة ورقم الامتحان إذا تم إفراغ الداتا قريدفيو؟؟؟
هذا هو المطلوب
السلام عليكم ورحمة الله وبركاته
أولا انا فاهم انت تقصد ايه بالظبط
ثانيا ممكن اعرف حضرتك رابط اسم المادة او كودها في جدول TBL_Final1 فين بالظبط ؟
اقصد اشرح لي ماذا يعني ON1 و ON2 وماذا يعني TO1 ,TO2 ؟
حتى استطيع مساعدتك
بارك الله فيك وجزاك كل كل خير على تجاوبك السريع واهتمامك المفيد
أولاً: جدول حفظ الدرجات -
اسم الجدول: TBL_Final1
الحقول
1- IDStudent - رقم الطالب - نوع الحقل رقمي
2- IDClas – رقم الصف - نوع الحقل نصي
3- IDSemester – رقم الامتحان - نوع الحقل رقمي
4- on1 – أعمال المادة 1 - نوع الحقل رقمي
5- on2 – أعمال المادة 2 - نوع الحقل رقمي
6- on3 – أعمال المادة 3 - نوع الحقل رقمي
7- on4 – أعمال المادة 4 - نوع الحقل رقمي
8- on5 – أعمال المادة 5 - نوع الحقل رقمي
9- on6 – أعمال المادة 6 - نوع الحقل رقمي
10- on7 – مشروع ميداني المادة 7 - نوع الحقل رقمي (هذا الحقل لدرجة المشروع الميداني للفصل السادس فقط )
11- on8 – مشروع التخرج 8 - نوع الحقل رقمي (هذا الحقل لدرجة مشروع التخرج للفصل السادس فقط)
12- to1 – امتحان المادة 1 - نوع الحقل رقمي
13- to2 – امتحان المادة 2 - نوع الحقل رقمي
14- to3 – امتحان المادة 3 - نوع الحقل رقمي
15- to4 – امتحان المادة 4 - نوع الحقل رقمي
16- to5 – امتحان المادة 5 - نوع الحقل رقمي
17- to6 – امتحان المادة 6 - نوع الحقل رقمي
18- on7 – مشروع ميداني 7 - نوع الحقل رقمي (هذا الحقل لدرجة المشروع الميداني للفصل السادس فقط )
19- on8 – مشروع التخرج 8 - نوع الحقل رقمي (هذا الحقل لدرجة مشروع التخرج للفصل السادس فقط)
20- tr1 – مجموع أعمال + امتحان المادة 1 - نوع الحقل رقمي
21- tr2 – مجموع أعمال + امتحان المادة 2 - نوع الحقل رقمي
22- tr3 – مجموع أعمال + امتحان المادة 3 - نوع الحقل رقمي
23- tr4 – مجموع أعمال + امتحان المادة 4 - نوع الحقل رقمي
24- tr5 – مجموع أعمال + امتحان المادة 5 - نوع الحقل رقمي
25- tr6 – مجموع أعمال + امتحان المادة 6 - نوع الحقل رقمي
26- on7 – مجموع المشروع 7 - نوع الحقل رقمي (هذا الحقل لدرجة المشروع الميداني للفصل السادس فقط )
27- on8 – مجموع المشروع 8 - نوع الحقل رقمي (هذا الحقل لدرجة مشروع التخرج للفصل السادس فقط)
28- total– مجموع درجات المواد الدراسية لكل طالب - نوع الحقل رقمي
29- FINAL– المعدل العام لكل طالب - نوع الحقل نصي
30- takdeer– التقدير العام لكل طالب - نوع الحقل نصي (ممتاز – جيد جداً – جيد – مقبول - //)
31- mcount – عدد مواد الرسوب لكل طالب - نوع الحقل رقمي
32- result – النتيجة النهائيـة لكل طالب - نوع الحقل نصي (ناجح – دور ثان)
لكل مادة درجات أعمال - ودرجات امتحان - وجموع درجات الأعمال والامتحان
هذا هو كود الحفظ يعمل بكل ممتاز
كود :
Private Sub Save_Grade()
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 IDSemester = ?"
Dim command As New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value))
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value))
command.Parameters.AddWithValue("?", CombSemester.SelectedItem.ToString())
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 IDSemester = ?"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(5).Value))
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value))
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value))
command.Parameters.AddWithValue("?", CombSemester.SelectedItem.ToString())
command.ExecuteNonQuery()
Else
reader.Close()
query = "INSERT INTO TBL_Final1 (IDStudent, IDClas, IDSemester, ON" & CombCourses.SelectedIndex + 1 & ") VALUES (?, ?, ?, ?)"
command = New OleDbCommand(query, con)
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(0).Value))
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(3).Value))
command.Parameters.AddWithValue("?", CombSemester.SelectedItem.ToString())
command.Parameters.AddWithValue("?", Val(DataGridView1.Rows(i).Cells(5).Value))
command.ExecuteNonQuery()
End If
Next
con.Close()
MsgBox("تم رصد درجــات الصــف : " & " " & listClas.Text & Chr(13) & " لمــادة : " & CombCourses.Text & " * بنجــاح " & "", MsgBoxStyle.Information, "الإجـــراء")
' إفراغ عمود درجات الأعمال
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
******************************************************
في حدث CombCourses_SelectedIndexChanged
لو قمت بإلغاء صب FillCCourses - وفعلت صب Courses_Semester فإن درجات المواد الدراسية لا يتم استدعاءها
ولو قعلت صب FillCCourses فالمشكلة تكمن في عدم استدعاء درجات المواد حسب رقم الامتحان
المطلـوب:
أولاً: اختيار رقم الامتحان من CombSemester
ثانياً: عند الضغط على عlistClas يتم أسماء الطلبـة في الداتاقريد فيو - كذلك استدعاء المواد الدراسية في CombCourses (وهذا تمام)
ثالثاً: عند اخيار مادة من CombCourses - المفروض يتم استدعاء درجات المواد حسب رقم الامتحان
انظر للمثال المحدث تظهر لك المشكلة جيداً
المشكلة فقط كيف يتم استدعاء درجات المواد الدراسية حسب رقم الامتحان
عند استدعاء أسماء الطلبـة في الداتا قريدفيو
المثال المحدث
[
attachment=30060]
قبل قليل قمتُ بتعديل كود استدعاء درجات المواد الدراسية حسب رقم الامتحان المختار CombSemester وهــو شغال 101%
ولكن إذا لم توجد درجات امتحان في الجدول حسب رقم الامتحان المختار من الكومبوكس CombSemester فإنه يتم إفراغ الداتا قريدفيو
ولا ادري أين الخلل ؟!!!
كود :
Private Sub Courses_Semester()
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.alqayd, TBL_Student.NameStudent, TBL_Student.IDClas " & _
", TBL_Final1.IDSemester " & _
", TBL_Final1.ON" & CombCourses.SelectedIndex + 1 & " as أعمــال " & _
"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.IDSemester=" & Val(CombSemester.Text))
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")
'تحديد بيانات الداتا قريد التي ستعبأ
FillDataGridView()
'Destroy object.
'arrListQuery = Nothing
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub