The best قام بنشر بالامس في 09:28 قام بنشر بالامس في 09:28 السلام عليكم ورحمة الله وبركاته فى نموذج (Query_dataDor2) بيتم رصد درجات الدور الثانى للطلاب الراسبين فى بعض المواد ذات الدرجة باللون الأحمر بالدور الأول محتاج لما أضغط على زر تحديث الدرجة النهائية يعمل الآتى : 1- درجة الدور الأول طالما أكبر من أو تساوى 50 تترحل كما هى : 2- درجة الدور الثانى إذا كانت أصغر من 50 تترحل كما هى ، أما إن كانت أكبر من أو تساوى 50 تتحول لـ 50 مثال توضيحى : الطالب الأول له دور ثان فى مواد ( الرياضيات - العلوم - اللغة الانجليزية ) فبقية المواد ناجح فيها فبالتالى هتتحول درجات هذه المواد الدور الأول كما هى فى حقل الدرجة النهائية الرياضيات مثلا 89 والعلوم 77 والانجليزى 77 إذًا أكبر من 50 تتحول لـ 50 ( ده النظام المعمول به إنه الطالب لو حصل على أكبر 50 يأخذ درجة الامتحان فقط اللى هى 50 ) طيب لو حصل فى الرياضيات مثلا 36 تتحول لـ 36 ، وهكذا أتمنى تكون الفكرة وصلت cont.accdb كما فى مثل هذه الصورة
Foksh قام بنشر بالامس في 14:37 قام بنشر بالامس في 14:37 وعليكم السلام ورحمة الله وبركاته .. بدايةً وقبل الخوض في التجارب أكثر . جرب هذا الاستعلام الجزئي ، هل يفي بالغرض ؟ SELECT data_dor2.name_student, data_dor2.National_ID, data_dor2.CLASS_CLASS, data_dor2.num_Glos, data_dor2.n_lgna_dor2, data_dor2.sery_dor2, data_dor2.Dor_Arb, data_dor2.Dor_Math, data_dor2.Dor_Drast, data_dor2.Dor_Since, data_dor2.Dor_Eng, data_dor2.Dor_comp, data_dor2.Dor_skills, data_dor2.Dor_Den, data_dor2.TDor_Arb, data_dor2.TDor_Math, data_dor2.TDor_Drast, data_dor2.TDor_Since, data_dor2.TDor_Eng, data_dor2.TDor_Comp, data_dor2.TDor_Skills, data_dor2.TDor_Den, data_dor2.N_Arb, data_dor2.N_Math, data_dor2.N_Drast, data_dor2.N_Since, data_dor2.N_Eng, data_dor2.N_Comp, data_dor2.N_Skills, data_dor2.N_Den, IIf(data_dor2.N_Arb=0, IIf(data_dor2.TDor_Arb>=50, data_dor2.TDor_Arb, data_dor2.TDor_Arb), IIf(data_dor2.TDor_Arb<50, data_dor2.TDor_Arb, 50)) AS Final_Arb, IIf(data_dor2.N_Math=0, IIf(data_dor2.TDor_Math>=50, data_dor2.TDor_Math, data_dor2.TDor_Math), IIf(data_dor2.TDor_Math<50, data_dor2.TDor_Math, 50)) AS Final_Math, IIf(data_dor2.N_Drast=0, IIf(data_dor2.TDor_Drast>=50, data_dor2.TDor_Drast, data_dor2.TDor_Drast), IIf(data_dor2.TDor_Drast<50, data_dor2.TDor_Drast, 50)) AS Final_Drast, IIf(data_dor2.N_Since=0, IIf(data_dor2.TDor_Since>=50, data_dor2.TDor_Since, data_dor2.TDor_Since), IIf(data_dor2.TDor_Since<50, data_dor2.TDor_Since, 50)) AS Final_Since, IIf(data_dor2.N_Eng=0, IIf(data_dor2.TDor_Eng>=50, data_dor2.TDor_Eng, data_dor2.TDor_Eng), IIf(data_dor2.TDor_Eng<50, data_dor2.TDor_Eng, 50)) AS Final_Eng, IIf(data_dor2.N_Comp=0, IIf(data_dor2.TDor_Comp>=50, data_dor2.TDor_Comp, data_dor2.TDor_Comp), IIf(data_dor2.TDor_Comp<50, data_dor2.TDor_Comp, 50)) AS Final_Comp, IIf(data_dor2.N_Skills=0, IIf(data_dor2.TDor_Skills>=50, data_dor2.TDor_Skills, data_dor2.TDor_Skills), IIf(data_dor2.TDor_Skills<50, data_dor2.TDor_Skills, 50)) AS Final_Skills, IIf(data_dor2.N_Den=0, IIf(data_dor2.TDor_Den>=50, data_dor2.TDor_Den, data_dor2.TDor_Den), IIf(data_dor2.TDor_Den<50, data_dor2.TDor_Den, 50)) AS Final_Den FROM data_dor2 WHERE data_dor2.name_student Is Not Null; وبناءً عليه نستكمل باقي المطلوب .. 1
Barna قام بنشر بالامس في 14:46 قام بنشر بالامس في 14:46 40 دقائق مضت, The best said: هل الموضوع غير واضح ؟ هل الصورة الموجودة في النموذج بعد التحديث هو المطلوب 1
The best قام بنشر بالامس في 14:52 الكاتب قام بنشر بالامس في 14:52 3 دقائق مضت, Barna said: هل الصورة الموجودة في النموذج بعد التحديث هو المطلوب نعم هو المطلوب مع الأخذ فى الاعتبار عند نقل درجة الدور الأول إلى الدرجة النهائية تبقى كما هى بالكسر يعنى 54.5 تبقى زى ما هى
Foksh قام بنشر بالامس في 14:52 قام بنشر بالامس في 14:52 5 دقائق مضت, Barna said: هل الصورة الموجودة في النموذج بعد التحديث هو المطلوب سبقتني في الإستكمال ، وهي لك لأني كنت على وشك ارفاق الصورة التالية أيضاً أخي @Barna 😅 2
The best قام بنشر بالامس في 14:54 الكاتب قام بنشر بالامس في 14:54 1 دقيقه مضت, Foksh said: سبقتني في الإستكمال ، وهي لك لأني كنت على وشك ارفاق الصورة التالية أيضاً أخي @Barna 😅 هو المطلوب بالضبط 1
Barna قام بنشر بالامس في 14:54 قام بنشر بالامس في 14:54 1 دقيقه مضت, Foksh said: لأني كنت على وشك ارفاق الصورة التالية أيضاً أخي بل نريد الطريقة ربما افضل من طريقتي ونتعلم منها بارك الله فيك
Foksh قام بنشر بالامس في 14:58 قام بنشر بالامس في 14:58 هذا الاستعلام الذي خرجت به كما في الصورة السابقة نتيجته :- SELECT name_student, National_ID, CLASS_CLASS, num_Glos, n_lgna_dor2, sery_dor2, Dor_Arb, Dor_Math, Dor_Drast, Dor_Since, Dor_Eng, Dor_comp, Dor_skills, Dor_Den, TDor_Arb, TDor_Math, TDor_Drast, TDor_Since, TDor_Eng, TDor_Comp, TDor_Skills, TDor_Den, IIF(IsNumeric([Dor_Arb]), IIF(Val(Nz([Dor_Arb],0))>=50, Val([Dor_Arb]), IIF(IsNull([TDor_Arb]) OR Val(Nz([TDor_Arb],-1))=-1, 0, IIF(Val([TDor_Arb])>=50, 50, Val([TDor_Arb])) ) ), 0) AS N_Arb, IIF(IsNumeric([Dor_Math]), IIF(Val(Nz([Dor_Math],0))>=50, Val([Dor_Math]), IIF(IsNull([TDor_Math]) OR Val(Nz([TDor_Math],-1))=-1, 0, IIF(Val([TDor_Math])>=50, 50, Val([TDor_Math])) ) ), 0) AS N_Math, IIF(IsNumeric([Dor_Drast]), IIF(Val(Nz([Dor_Drast],0))>=50, Val([Dor_Drast]), IIF(IsNull([TDor_Drast]) OR Val(Nz([TDor_Drast],-1))=-1, 0, IIF(Val([TDor_Drast])>=50, 50, Val([TDor_Drast])) ) ), 0) AS N_Drast, IIF(IsNumeric([Dor_Since]), IIF(Val(Nz([Dor_Since],0))>=50, Val([Dor_Since]), IIF(IsNull([TDor_Since]) OR Val(Nz([TDor_Since],-1))=-1, 0, IIF(Val([TDor_Since])>=50, 50, Val([TDor_Since])) ) ), 0) AS N_Since, IIF(IsNumeric([Dor_Eng]), IIF(Val(Nz([Dor_Eng],0))>=50, Val([Dor_Eng]), IIF(IsNull([TDor_Eng]) OR Val(Nz([TDor_Eng],-1))=-1, 0, IIF(Val([TDor_Eng])>=50, 50, Val([TDor_Eng])) ) ), 0) AS N_Eng, IIF(IsNumeric([Dor_comp]), IIF(Val(Nz([Dor_comp],0))>=50, Val([Dor_comp]), IIF(IsNull([TDor_Comp]) OR Val(Nz([TDor_Comp],-1))=-1, 0, IIF(Val([TDor_Comp])>=50, 50, Val([TDor_Comp])) ) ), 0) AS N_Comp, IIF(IsNumeric([Dor_skills]), IIF(Val(Nz([Dor_skills],0))>=50, Val([Dor_skills]), IIF(IsNull([TDor_Skills]) OR Val(Nz([TDor_Skills],-1))=-1, 0, IIF(Val([TDor_Skills])>=50, 50, Val([TDor_Skills])) ) ), 0) AS N_Skills, IIF(IsNumeric([Dor_Den]), IIF(Val(Nz([Dor_Den],0))>=50, Val([Dor_Den]), IIF(IsNull([TDor_Den]) OR Val(Nz([TDor_Den],-1))=-1, 0, IIF(Val([TDor_Den])>=50, 50, Val([TDor_Den])) ) ), 0) AS N_Den FROM data_dor2 WHERE (((data_dor2.[name_student])<>"IsNull")); 1
Barna قام بنشر بالامس في 15:01 قام بنشر بالامس في 15:01 8 دقائق مضت, The best said: نعم هو المطلوب مع الأخذ فى الاعتبار عند نقل درجة الدور الأول إلى الدرجة النهائية تبقى كما هى بالكسر يعنى 54.5 تبقى زى ما هى استخدم هذه الشيفرة في زر التحديث مع اللاحقة له ...... Private Sub أمر309_Click() Dim rst As DAO.Recordset Dim db As DAO.Database Dim ctl As Control Dim controlsList As New Collection Dim dorAwalField As String, dorThanField As String, finalField As String Dim dorAwalVal As Variant, dorThanVal As Variant, finalVal As Variant Dim i As Integer Dim excludedNames As Variant Set db = CurrentDb() Set rst = Me.RecordsetClone ' نسخة من مصدر بيانات النموذج ' أسماء الحقول التي نريد استثناؤها (اسم الطالب، رقم الجلوس) excludedNames = Array("name_student", "num_Glos") ' جمع الحقول الثلاثية فقط حسب الترتيب For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then If IsExcluded(ctl.Name, excludedNames) = False Then If ctl.ControlSource <> "" Then ' مرتبط بحقل فعلي controlsList.Add ctl.ControlSource End If End If End If Next ctl ' المرور على كل سجل في النموذج If Not rst.EOF Then rst.MoveFirst Do While Not rst.EOF rst.Edit For i = 1 To controlsList.Count Step 3 If i + 2 <= controlsList.Count Then dorAwalField = controlsList(i) dorThanField = controlsList(i + 1) finalField = controlsList(i + 2) dorAwalVal = Nz(rst(dorAwalField), 0) dorThanVal = Nz(rst(dorThanField), -1) If dorThanVal <> -1 Then If dorThanVal >= 50 Then finalVal = 50 Else finalVal = dorThanVal End If Else finalVal = dorAwalVal End If rst(finalField) = finalVal End If Next i rst.Update rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing Me.Requery ' لتحديث العرض في النموذج MsgBox "تم تحديث جميع الدرجات النهائية بنجاح.", vbInformation End Sub Private Function IsExcluded(fieldName As String, excludedList As Variant) As Boolean Dim item As Variant For Each item In excludedList If LCase(fieldName) = LCase(item) Then IsExcluded = True Exit Function End If Next item IsExcluded = False End Function وهذا ملفك بعد التعديل ............... cont.accdb 1
The best قام بنشر بالامس في 15:20 الكاتب قام بنشر بالامس في 15:20 أحسنتما وبارك الله لكما وجعله فى ميزان حسناتكما ... # عندى طلب آخر هل من الممكن جعل حقل الدور الثانى اللى سيتم رصده فقط مُمَكَّن والباقى غير مُمَكَّن
Barna قام بنشر بالامس في 15:29 قام بنشر بالامس في 15:29 6 دقائق مضت, The best said: عندى طلب آخر هل من الممكن جعل حقل الدور الثانى اللى سيتم رصده فقط مُمَكَّن والباقى غير مُمَكَّن تفضل ................. cont.accdb
The best قام بنشر بالامس في 15:48 الكاتب قام بنشر بالامس في 15:48 6 دقائق مضت, Barna said: تفضل ................. cont.accdb 756 kB · 0 downloads بعد تجريب الملف لاحظت ما يلى ومعلم عليه عند رصد (1-) للطالب وده معناه أنه غائب لاحظت بيكتب درجةالدور الاول لا انا عاوزه يكتب (1-) لان الطالب هنا معناه غائب فى الدور الثانى . والباقى تمام
Barna قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات 4 ساعات مضت, The best said: عند رصد (1-) للطالب وده معناه أنه غائب لاحظت بيكتب درجةالدور الاول لا انا عاوزه يكتب (1-) لان الطالب هنا معناه غائب فى الدور الثانى . هذه هي الصورة الناتجة ماذا تريد ؟؟؟؟ هل تريد مكان الدرجة النهائية يكتب 0 أم ماذا وضح بالشرح الكافي
The best قام بنشر منذ 23 ساعات الكاتب قام بنشر منذ 23 ساعات 14 دقائق مضت, Barna said: هذه هي الصورة الناتجة ماذا تريد ؟؟؟؟ هل تريد مكان الدرجة النهائية يكتب 0 أم ماذا وضح بالشرح الكافي لو (1- ) يكتبها (1-) وليس درجة الدور الأول لاحظ الصورة المرفقة
Barna قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات 5 دقائق مضت, The best said: لو (1- ) يكتبها (1-) وليس درجة الدور الأول لاحظ الصورة المرفقة هل هذه الحالة موجودة من ضمن السجلات في المرفق السابق ؟؟؟؟؟
The best قام بنشر منذ 23 ساعات الكاتب قام بنشر منذ 23 ساعات 5 دقائق مضت, Barna said: هل هذه الحالة موجودة من ضمن السجلات في المرفق السابق ؟؟؟؟؟ أنا نسيت أضعها فى المطلوب فى الأول لكن الباقى تمام فتصبح الدرجة النهائية : لو حصل الطالب فى درجة الدور الثانى على أكبر من 50 =50 لو أصغر من 50 =الدرجة التى حصل عليها نفسها . ودول تمام فى الكود يبقى الشرط ده وأنا نسيته لو كانت (1-) = 1- لأنه دى بتترصد للطالب الغائب . هل محتاج حضرتك توضيح ؟
Barna قام بنشر منذ 23 ساعات قام بنشر منذ 23 ساعات 1 دقيقه مضت, The best said: بقى الشرط ده وأنا نسيته لو كانت (1-) = 1- لأنه دى بتترصد للطالب الغائب . استبدل الكود الموجود تحت الزر فقط بهذه الشيفرة ........... Private Sub أمر309_Click() Dim rst As DAO.Recordset Dim db As DAO.Database Dim ctl As Control Dim controlsList As New Collection Dim dorAwalField As String, dorThanField As String, finalField As String Dim dorAwalVal As Variant, dorThanVal As Variant, finalVal As Variant Dim i As Integer Dim excludedNames As Variant Set db = CurrentDb() Set rst = Me.RecordsetClone ' نسخة من مصدر بيانات النموذج ' أسماء الحقول التي نريد استثناؤها (اسم الطالب، رقم الجلوس) excludedNames = Array("num_Glos", "name_student") ' جمع أسماء الحقول المرتبطة بالدرجات، حسب ترتيب مربعات النص في النموذج For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then If IsExcluded(ctl.Name, excludedNames) = False Then If ctl.ControlSource <> "" Then controlsList.Add ctl.ControlSource End If End If End If Next ctl ' المرور على جميع السجلات وتحديث الدرجات If Not rst.EOF Then rst.MoveFirst Do While Not rst.EOF rst.Edit For i = 1 To controlsList.Count Step 3 If i + 2 <= controlsList.Count Then dorAwalField = controlsList(i) dorThanField = controlsList(i + 1) finalField = controlsList(i + 2) dorAwalVal = Nz(rst(dorAwalField), 0) dorThanVal = Nz(rst(dorThanField), -1) If dorThanVal = -1 Then finalVal = -1 ElseIf dorThanVal >= 50 Then finalVal = 50 Else finalVal = dorThanVal End If rst(finalField) = finalVal End If Next i rst.Update rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing Me.Requery ' لتحديث النموذج بعد التعديل MsgBox "تم تحديث جميع الدرجات النهائية بنجاح.", vbInformation End Sub
Foksh قام بنشر منذ 22 ساعات قام بنشر منذ 22 ساعات مشاركة مع الأستاذ @Barna ، من خلال استعلام التحديث التالي :- UPDATE data_dor2 SET N_Arb = IIF(Val(Nz([Dor_Arb], 0)) = -1, -1, IIF(IsNumeric([Dor_Arb]), IIF(Val(Nz([Dor_Arb], 0)) >= 50, Val([Dor_Arb]), IIF(IsNull([TDor_Arb]) OR Val(Nz([TDor_Arb], -1)) = -1, 0, IIF(Val([TDor_Arb]) >= 50, 50, Val([TDor_Arb])) ) ), 0) ), N_Math = IIF(Val(Nz([Dor_Math], 0)) = -1, -1, IIF(IsNumeric([Dor_Math]), IIF(Val(Nz([Dor_Math], 0)) >= 50, Val([Dor_Math]), IIF(IsNull([TDor_Math]) OR Val(Nz([TDor_Math], -1)) = -1, 0, IIF(Val([TDor_Math]) >= 50, 50, Val([TDor_Math])) ) ), 0) ), N_Drast = IIF(Val(Nz([Dor_Drast], 0)) = -1, -1, IIF(IsNumeric([Dor_Drast]), IIF(Val(Nz([Dor_Drast], 0)) >= 50, Val([Dor_Drast]), IIF(IsNull([TDor_Drast]) OR Val(Nz([TDor_Drast], -1)) = -1, 0, IIF(Val([TDor_Drast]) >= 50, 50, Val([TDor_Drast])) ) ), 0) ), N_Since = IIF(Val(Nz([Dor_Since], 0)) = -1, -1, IIF(IsNumeric([Dor_Since]), IIF(Val(Nz([Dor_Since], 0)) >= 50, Val([Dor_Since]), IIF(IsNull([TDor_Since]) OR Val(Nz([TDor_Since], -1)) = -1, 0, IIF(Val([TDor_Since]) >= 50, 50, Val([TDor_Since])) ) ), 0) ), N_Eng = IIF(Val(Nz([Dor_Eng], 0)) = -1, -1, IIF(IsNumeric([Dor_Eng]), IIF(Val(Nz([Dor_Eng], 0)) >= 50, Val([Dor_Eng]), IIF(IsNull([TDor_Eng]) OR Val(Nz([TDor_Eng], -1)) = -1, 0, IIF(Val([TDor_Eng]) >= 50, 50, Val([TDor_Eng])) ) ), 0) ), N_Comp = IIF(Val(Nz([Dor_comp], 0)) = -1, -1, IIF(IsNumeric([Dor_comp]), IIF(Val(Nz([Dor_comp], 0)) >= 50, Val([Dor_comp]), IIF(IsNull([TDor_Comp]) OR Val(Nz([TDor_Comp], -1)) = -1, 0, IIF(Val([TDor_Comp]) >= 50, 50, Val([TDor_Comp])) ) ), 0) ), N_Skills = IIF(Val(Nz([Dor_skills], 0)) = -1, -1, IIF(IsNumeric([Dor_skills]), IIF(Val(Nz([Dor_skills], 0)) >= 50, Val([Dor_skills]), IIF(IsNull([TDor_Skills]) OR Val(Nz([TDor_Skills], -1)) = -1, 0, IIF(Val([TDor_Skills]) >= 50, 50, Val([TDor_Skills])) ) ), 0) ), N_Den = IIF(Val(Nz([Dor_Den], 0)) = -1, -1, IIF(IsNumeric([Dor_Den]), IIF(Val(Nz([Dor_Den], 0)) >= 50, Val([Dor_Den]), IIF(IsNull([TDor_Den]) OR Val(Nz([TDor_Den], -1)) = -1, 0, IIF(Val([TDor_Den]) >= 50, 50, Val([TDor_Den])) ) ), 0) ) WHERE name_student <> "IsNull"; 1
The best قام بنشر منذ 6 ساعات الكاتب قام بنشر منذ 6 ساعات 16 ساعات مضت, Barna said: استبدل الكود الموجود تحت الزر فقط بهذه الشيفرة ........... Private Sub أمر309_Click() Dim rst As DAO.Recordset Dim db As DAO.Database Dim ctl As Control Dim controlsList As New Collection Dim dorAwalField As String, dorThanField As String, finalField As String Dim dorAwalVal As Variant, dorThanVal As Variant, finalVal As Variant Dim i As Integer Dim excludedNames As Variant Set db = CurrentDb() Set rst = Me.RecordsetClone ' نسخة من مصدر بيانات النموذج ' أسماء الحقول التي نريد استثناؤها (اسم الطالب، رقم الجلوس) excludedNames = Array("num_Glos", "name_student") ' جمع أسماء الحقول المرتبطة بالدرجات، حسب ترتيب مربعات النص في النموذج For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then If IsExcluded(ctl.Name, excludedNames) = False Then If ctl.ControlSource <> "" Then controlsList.Add ctl.ControlSource End If End If End If Next ctl ' المرور على جميع السجلات وتحديث الدرجات If Not rst.EOF Then rst.MoveFirst Do While Not rst.EOF rst.Edit For i = 1 To controlsList.Count Step 3 If i + 2 <= controlsList.Count Then dorAwalField = controlsList(i) dorThanField = controlsList(i + 1) finalField = controlsList(i + 2) dorAwalVal = Nz(rst(dorAwalField), 0) dorThanVal = Nz(rst(dorThanField), -1) If dorThanVal = -1 Then finalVal = -1 ElseIf dorThanVal >= 50 Then finalVal = 50 Else finalVal = dorThanVal End If rst(finalField) = finalVal End If Next i rst.Update rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing Me.Requery ' لتحديث النموذج بعد التعديل MsgBox "تم تحديث جميع الدرجات النهائية بنجاح.", vbInformation End Sub بعد نسخ الكود هذه كانت النتيجة لكنها نسفت ما عملناه المفروض درجة الدور الثانى فقط اللى لو كانت (1- ) تبقى ( 1- ) لكن درجة الدور الاول الناجح فيها تنتقل كما هى أرجع وأقول غلطتى من الأول : فكان المفروض أقول كده : 1- درجة الدور الأول طالما أكبر من أو تساوى 50 تترحل كما هى : 2- درجة الدور الثانى إذا كانت أصغر من 50 تترحل كما هى ، أما إن كانت أكبر من أو تساوى 50 تتحول لـ 50 3- درجة الدور الثانى إذا كانت تساوى 1- تترحل كما هى الى 1-
The best قام بنشر منذ 5 ساعات الكاتب قام بنشر منذ 5 ساعات 17 ساعات مضت, Foksh said: مشاركة مع الأستاذ @Barna ، من خلال استعلام التحديث التالي :- UPDATE data_dor2 SET N_Arb = IIF(Val(Nz([Dor_Arb], 0)) = -1, -1, IIF(IsNumeric([Dor_Arb]), IIF(Val(Nz([Dor_Arb], 0)) >= 50, Val([Dor_Arb]), IIF(IsNull([TDor_Arb]) OR Val(Nz([TDor_Arb], -1)) = -1, 0, IIF(Val([TDor_Arb]) >= 50, 50, Val([TDor_Arb])) ) ), 0) ), N_Math = IIF(Val(Nz([Dor_Math], 0)) = -1, -1, IIF(IsNumeric([Dor_Math]), IIF(Val(Nz([Dor_Math], 0)) >= 50, Val([Dor_Math]), IIF(IsNull([TDor_Math]) OR Val(Nz([TDor_Math], -1)) = -1, 0, IIF(Val([TDor_Math]) >= 50, 50, Val([TDor_Math])) ) ), 0) ), N_Drast = IIF(Val(Nz([Dor_Drast], 0)) = -1, -1, IIF(IsNumeric([Dor_Drast]), IIF(Val(Nz([Dor_Drast], 0)) >= 50, Val([Dor_Drast]), IIF(IsNull([TDor_Drast]) OR Val(Nz([TDor_Drast], -1)) = -1, 0, IIF(Val([TDor_Drast]) >= 50, 50, Val([TDor_Drast])) ) ), 0) ), N_Since = IIF(Val(Nz([Dor_Since], 0)) = -1, -1, IIF(IsNumeric([Dor_Since]), IIF(Val(Nz([Dor_Since], 0)) >= 50, Val([Dor_Since]), IIF(IsNull([TDor_Since]) OR Val(Nz([TDor_Since], -1)) = -1, 0, IIF(Val([TDor_Since]) >= 50, 50, Val([TDor_Since])) ) ), 0) ), N_Eng = IIF(Val(Nz([Dor_Eng], 0)) = -1, -1, IIF(IsNumeric([Dor_Eng]), IIF(Val(Nz([Dor_Eng], 0)) >= 50, Val([Dor_Eng]), IIF(IsNull([TDor_Eng]) OR Val(Nz([TDor_Eng], -1)) = -1, 0, IIF(Val([TDor_Eng]) >= 50, 50, Val([TDor_Eng])) ) ), 0) ), N_Comp = IIF(Val(Nz([Dor_comp], 0)) = -1, -1, IIF(IsNumeric([Dor_comp]), IIF(Val(Nz([Dor_comp], 0)) >= 50, Val([Dor_comp]), IIF(IsNull([TDor_Comp]) OR Val(Nz([TDor_Comp], -1)) = -1, 0, IIF(Val([TDor_Comp]) >= 50, 50, Val([TDor_Comp])) ) ), 0) ), N_Skills = IIF(Val(Nz([Dor_skills], 0)) = -1, -1, IIF(IsNumeric([Dor_skills]), IIF(Val(Nz([Dor_skills], 0)) >= 50, Val([Dor_skills]), IIF(IsNull([TDor_Skills]) OR Val(Nz([TDor_Skills], -1)) = -1, 0, IIF(Val([TDor_Skills]) >= 50, 50, Val([TDor_Skills])) ) ), 0) ), N_Den = IIF(Val(Nz([Dor_Den], 0)) = -1, -1, IIF(IsNumeric([Dor_Den]), IIF(Val(Nz([Dor_Den], 0)) >= 50, Val([Dor_Den]), IIF(IsNull([TDor_Den]) OR Val(Nz([TDor_Den], -1)) = -1, 0, IIF(Val([TDor_Den]) >= 50, 50, Val([TDor_Den])) ) ), 0) ) WHERE name_student <> "IsNull"; أين أضعه ؟
تمت الإجابة Foksh قام بنشر منذ 5 ساعات تمت الإجابة قام بنشر منذ 5 ساعات 12 دقائق مضت, The best said: أين أضعه ؟ أخي الكريم ، اذا كنت تريد التنفيذ من خلال الزر ويكون كما في فكرة الأستاذ @Barna ، فتفضل هذا الحدث جربه ، وأخبرنا بالنتيجة :- Public Sub UpdateFinalGrades() Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String Dim fld As DAO.Field Dim subjects As Variant subjects = Array("Arb", "Math", "Drast", "Since", "Eng", "Comp", "Skills", "Den") On Error GoTo ErrorHandler Set db = CurrentDb() strSQL = "SELECT * FROM data_dor2 WHERE name_student <> 'IsNull'" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset, dbSeeChanges) If rs.RecordCount = 0 Then MsgBox "لا توجد سجلات ليتم تحديثها", vbInformation + vbMsgBoxRight, "" Exit Sub End If Do Until rs.EOF For Each subj In subjects Dim dor1 As String, dor2 As String, final As String dor1 = "Dor_" & subj dor2 = "TDor_" & subj final = "N_" & subj If Nz(rs.Fields(dor1).Value, 0) = -1 Or Nz(rs.Fields(dor2).Value, 0) = -1 Then rs.Edit rs.Fields(final).Value = -1 rs.Update Else Dim grade As Double If IsNumeric(rs.Fields(dor1).Value) Then If rs.Fields(dor1).Value >= 50 Then grade = rs.Fields(dor1).Value Else If IsNull(rs.Fields(dor2).Value) Then grade = 0 ElseIf rs.Fields(dor2).Value >= 50 Then grade = 50 Else grade = rs.Fields(dor2).Value End If End If rs.Edit rs.Fields(final).Value = grade rs.Update End If End If Next subj rs.MoveNext Loop DoCmd.Requery MsgBox "تم تحديث جميع الدرجات بنجاح", vbInformation + vbMsgBoxRight, "" Exit Sub ErrorHandler: MsgBox " : حدث خطأ" & Err.Description, vbCritical + vbMsgBoxRight, "" rs.CancelUpdate If Not rs Is Nothing Then rs.Close Set rs = Nothing Set db = Nothing End Sub تستطيع استخدامه في مديول واستدعائه من خلال الزر بإسم الدالة فقط :- Private Sub أمر309_Click() UpdateFinalGrades End Sub أما استعلام التحديث السابق فتجاهله ، وجرب الطريقة الحالية . الملف المرفق قبل لا أنسى 😅 cont0.zip
Barna قام بنشر منذ 5 ساعات قام بنشر منذ 5 ساعات هل التصور صحيح في الصورة ................. Private Sub أمر309_Click() Dim rst As DAO.Recordset Dim db As DAO.Database Dim ctl As Control Dim controlsList As New Collection Dim dorAwalField As String, dorThanField As String, finalField As String Dim dorAwalVal As Variant, dorThanVal As Variant, finalVal As Variant Dim i As Integer Dim excludedNames As Variant Set db = CurrentDb() Set rst = Me.RecordsetClone ' نسخة من مصدر بيانات النموذج ' أسماء الحقول التي نريد استثناؤها (اسم الطالب، رقم الجلوس) excludedNames = Array("num_Glos", "name_student") ' جمع أسماء الحقول المرتبطة بالدرجات، حسب ترتيب مربعات النص في النموذج For Each ctl In Me.Controls If ctl.ControlType = acTextBox Then If IsExcluded(ctl.Name, excludedNames) = False Then If ctl.ControlSource <> "" Then controlsList.Add ctl.ControlSource End If End If End If Next ctl ' المرور على جميع السجلات وتحديث الدرجات If Not rst.EOF Then rst.MoveFirst Do While Not rst.EOF rst.Edit For i = 1 To controlsList.Count Step 3 If i + 2 <= controlsList.Count Then dorAwalField = controlsList(i) dorThanField = controlsList(i + 1) finalField = controlsList(i + 2) dorAwalVal = Nz(rst(dorAwalField), 0) dorThanVal = rst(dorThanField) ' بدون Nz حتى نتحقق من Null ' تنفيذ القاعدة: If IsNull(dorThanVal) Then finalVal = dorAwalVal ElseIf dorThanVal = -1 Then finalVal = -1 ElseIf dorThanVal >= 50 Then finalVal = 50 Else finalVal = dorThanVal End If rst(finalField) = finalVal End If Next i rst.Update rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing Me.Requery ' لتحديث النموذج بعد التعديل MsgBox "تم تحديث جميع الدرجات النهائية بنجاح.", vbInformation End Sub
The best قام بنشر منذ 4 ساعات الكاتب قام بنشر منذ 4 ساعات أحسنتما وجزاكما الله خيرا وزادكما من علمه وفضله 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.