منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : سؤال بخصوص الجمع في جدول الداتا قريد
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
سؤال بخصوص جدول الداتا قريد
أريد جمع درجات الأعمال والامتحان دفعة واحدة ووإظهار المجموع الكلي والنسبة والتقدير والنتيجة
وذلك عند تسجيل درجات الطلبة في مادة معينة.
أعذروني على طلبي، ولكن للأسف المشروع توقف عند هذه النقطة التي لم استطع إيجاد حلاً لها.

المثال من تعديل الأستاذ الفاضل أحمد منصور

[attachment=22941]
انتظر الإجابة من الأساتذة الكرام
كود :
Call ConnectionDatabase


Dim zTotalall As String
Dim znisba As String

Dim fro As Date
Dim Too As Date
fro = Format(DTPicker1, "mm/dd/yyyy")
Too = Format(DTPicker2, "mm/dd/yyyy")

zTotal = "(Select sum(marks) From DrjatTB where DrjatTB.stuID=studentTB.stuID And DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "#)"

znisba = "(Select   marks *100/zTotal From DrjatTB where falowTB.ECase= 2  And DrjatTB.stuID=studentTB.stuID AND DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "#)"


                                                                                                                                                                                     ' ÌÏæá ÇáÏÑÌÇÊ
RS.Open "Select studentTB.stuID,studentTB.StuN ," & zTotal & " as Total ," & znisba & " as Totansba FROM studentTB INNER JOIN DrjatTB On DrjatTB.DstuID=studentTB.stuID Where DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "# Group by studentTB.stuID,studentTB.stuN"
Set DataGrid1.DataSource = RS


اضن ان الكود بيكون بهذا الشكل بخصوص النسبة  
او خذ الفكرة منه  - 
تعليمات اخوانا الغالي احمد منصور
(17-09-19, 01:03 PM)awidan76 كتب : [ -> ]
كود :
Call ConnectionDatabase


Dim zTotalall As String
Dim znisba As String

Dim fro As Date
Dim Too As Date
fro = Format(DTPicker1, "mm/dd/yyyy")
Too = Format(DTPicker2, "mm/dd/yyyy")

zTotal = "(Select sum(marks) From DrjatTB where DrjatTB.stuID=studentTB.stuID And DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "#)"

znisba = "(Select   marks *100/zTotal From DrjatTB where falowTB.ECase= 2  And DrjatTB.stuID=studentTB.stuID AND DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "#)"


                                                                                                                                                                                     ' ÌÏæá ÇáÏÑÌÇÊ
RS.Open "Select studentTB.stuID,studentTB.StuN ," & zTotal & " as Total ," & znisba & " as Totansba FROM studentTB INNER JOIN DrjatTB On DrjatTB.DstuID=studentTB.stuID Where DrjatTB.FileDate BETWEEN #" & CDate(fro) & "# AND #" & CDate(Too) & "# Group by studentTB.stuID,studentTB.stuN"
Set DataGrid1.DataSource = RS


اضن ان الكود بيكون بهذا الشكل بخصوص النسبة  
او خذ الفكرة منه  - 
تعليمات اخوانا الغالي احمد منصور

سامحني أخي الكريم لم أفهم الكود جيداً، أرفقت المثال؛ ليتم التعديل عليه، وربما يتجشم الأستاذ الكبير أحمد منصور أو الأستاذ الفاضل أمير لهذا المثال.
وهذا كود الجمع بالتكست يشتغل تمام ولكن في الداتا قريد لم أنجح
كود :
On Error Resume Next: Err.Clear

With Co
.ActiveConnection = DB
.CommandType = adCmdTable
.CommandText = "Q_omran"
End With
Set Rs1 = New Recordset
Rs1.Open Co, , adOpenStatic, adLockOptimistic
For I = 0 To Rs1.RecordCount - 1
Set rs = New Recordset: total = 0: PP = False
   rs.Open "select * from TBL_FSl where id =" & Rs1.Fields(0) & " and tag = 2", DB, adOpenStatic, adLockOptimistic
   If rs.RecordCount = 0 Then
   rs.AddNew
          rs.Fields(0) = Rs1.Fields(0)
          rs.Fields(1) = Rs1.Fields(1)
          rs.Fields(2) = Rs1.Fields(2)
          rs.Fields(3) = Rs1.Fields(3)
          rs.Fields(4) = 3

   For j = 5 To 40
       rs.Fields(j) = Rs1.Fields(j)
       Select Case Ks
       Case 1
           If j >= 29 Then
           If Rs1.Fields(j).Value >= 40 Then rs.Fields(j) = Rs1.Fields(j): total = total + Rs1.Fields(j) Else rs.Fields(j) = 0: PP = True
           End If
       Case 2
           If j >= 29 And j <= 40 Then
               If Rs1.Fields(j).Value >= 40 Then rs.Fields(j) = Rs1.Fields(j): total = total + Rs1.Fields(j) Else rs.Fields(j) = 0: total = 0: PP = True
           End If
       Case 3
           If j >= 29 And j <= 40 Then
               If Rs1.Fields(j).Value >= 40 Then rs.Fields(j) = Rs1.Fields(j): total = total + Rs1.Fields(j) Else rs.Fields(j) = 0: total = 0: PP = True
           End If
       End Select
   Next j
   If PP = False Then
          rs.Fields(41) = total
          rs.Fields(42) = Format(total / 1040 * 100, "00.00")
          If rs.Fields(42) < 50 Then rs.Fields(43) = "/": rs.Fields(44) = "راسب"
          If rs.Fields(42) >= 50 And rs.Fields(42) <= 64.99 Then rs.Fields(43) = "مقبول": rs.Fields(44) = "ناجح"
          If rs.Fields(42) >= 65 And rs.Fields(42) <= 74.99 Then rs.Fields(43) = "جيد": rs.Fields(44) = "ناجح"
          If rs.Fields(42) >= 75 And rs.Fields(42) <= 84.99 Then rs.Fields(43) = "جيد جداً": rs.Fields(44) = "ناجح"
          If rs.Fields(42) >= 85 And rs.Fields(42) <= 100 Then rs.Fields(43) = "ممتاز": rs.Fields(44) = "ناجح"
          rs.Fields(45) = 2
   Else: rs.Fields(41) = total: rs.Fields(42) = 0: rs.Fields(43) = "/": rs.Fields(44) = "راسب": rs.Fields(45) = 2: End If
   rs.Update ': MsgBox "تم جمع درجات الفصلين بنجاح", vbInformation + vbOKOnly + vbMsgBoxRight, "مجموع درجات الفصلين"
   Else: MsgBox "عفواً ... الرجاء التأكد من رصد درجات الفصلين", , "": Exit Sub: End If
   Rs1.MoveNext
Next
MsgBox "تم جمع درجات الفصلين بنجاح", vbInformation + vbOKOnly + vbMsgBoxRight, "مجموع درجات الفصلين"
End Sub
الحمد لله نجحتُ في جمع الدرجات داخل جدول الداتا قريد بهذا الكود، وأي تطوير لهذا الكود فمرحباً به

كود :
Dim X As Integer
For X = 0 To DataGrid1.ApproxCount - 1

DataGrid1.Col = 1
DataGrid1.Row = X
DataGrid1.Columns(10) = Val(DataGrid1.Columns(9)) + Val(DataGrid1.Columns(8))
Next