اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

عملية جمع معقدة نحتاج إلى خبير استعلامات


الردود الموصى بها

السلام عليكم ورحمة الله وبركاته

أسأل الله أن يديم عليكم نعمه ظاهرة وباطنة ........ آمين

لدي استعلام خاص بلجنة تحكيم على النحو التالي :ـ

اسم الطالب ==درجة المحكم 1=درجة المحكم 2=درجة المحكم 3=درجة المحكم 4=أعلى درجة حصل عليه=أدنى درجة حصل عليها الطالب=المستحق

محمد------40------------------35--------------------30-----------------25-------------------40--------------------------25-------------35+30/2=23.5

علي--------20-----------------45--------------------32-----------------35------------------45---------------------------20-----------35+32/23=33.5

فهد----------50------------------45--------------------فارغ-------------40--------------------50----------------------------40--------------45/1=45

وفقكم الله أجمعين

أيها الأحبة : لدي هذا اللاستعلام المطلوب أن يكون في خانة أعلى درجة : أعلى درجة حصل عليها الطالب في الاختبار

وفي الأدنى أيضا أدنى درجة حصل عليها الطالب

والمستحق وهو المهم جدا جدا أن يقوم بحذف أعلى درجة وأدنى درجة حصل عليها الطالب يتبقى بعدها دجة اثنين من المحكمين يقوم بجمعهما ثم قسمتهما على عدد المحكمين المتبقين (2) وفي حالة كون أحد الخانتين فارغة فإنه يقسم على 1 وليس على اثنين أي كأن عدد المحمين ثلاثة وليس أربعة

فهل يمكن للاستعلام صنع ذلك

_____.rar

تم تعديل بواسطه حامل المسك
رابط هذا التعليق
شارك

مع كل الشكر والتقدير لمحب العلم

تم عمل الحل بالإستعلامات .

فميزة الإستعلام سوف تغني عن تخزين النتائج ، يعني مساحة أقل .

وعيبها أنك لا يمكن إضافة البيانات من نفس النموذج ، يعني ستحتاج إلى عمل نموذج آخر لإدخال البيانات .

يمكن اختصار الإستعلامات من 3 إلى 2 ولكني أحببت أن تكون مفهومة أكثر مع جعلها 3 .

judge_Queries.rar

رابط هذا التعليق
شارك

والله يا إخواني إنه عمل أروع من رائع ، وأسأل الله أن يكتب لكما الأجر في هذا البرنامج الذي يخدم بالدرجة الأولى حفظة كتاب الله الكريم

وأنا كنت أتوقع أن أجد الإجابة بأنه لا يمكن عمل مثل ذلك

فأسأل الله لكما التوفيق والسداد وأن يبارك في علمكما وعملكما.

(للفائدة )

أخي محب العلم هل من الممكن أن تشرح الكود الذي قمت بعمله

-----------------------------------------------------------------------------------------------

لوكنت أعرف فوق الشُّكر منزلةً ... أعلى من الشكر عند الله في الثَّمن

إذا منحتكها منِّي مهنَّدةً ... شكراً على صنع ما أوليت من حسن

----------------------------------------------------------------------------------------------

رابط هذا التعليق
شارك

حامل المسك،

شرح الحلول :

أولا: الحل البرمجي الذي قدمه محب العلم

المقدمة :

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

الإجراءات :

إجراء حدث عند النقر على زر احتساب النتائج

Private Sub Command17_Click()
 Dim Rst As Recordset
 Set DBs = CurrentDb
 Set Rst = DBs.OpenRecordset("Judges", dbOpenDynaset)
 Rst.MoveLast
 Rst.MoveFirst
 Do While Not Rst.EOF
   Rst.Edit
   Rst!maxg = whatmax(Rst!g1, Rst!g2, Rst!g3, Rst!g4)
   Rst!ming = whatmin(Rst!g1, Rst!g2, Rst!g3, Rst!g4)
   Rst!grade = whatgrade(Rst!g1, Rst!g2, Rst!g3, Rst!g4)
   Rst.Update
   Rst.MoveNext
 Loop
 Rst.Close
 Me.Refresh
End Sub
هذا الإجراء يقوم بالدوران داخل سجلات الجدول Judges (الحكام) من بدايته وحتى النهاية ولكل سجل (سطر) موجود في الجدول يتم استدعاء ثلاثة اقترانات هي whatmax الذي سيرجع لنا القيمة العظمى من حكم الحكام و whatmin الذي سيرجع لنا القيمى الصغرى من حكم الحكام و whatgrade الذي سيرجع لنا النتيجة بعد خصم القيمة الصغرى والعظمى وفحص كم نتيجة يوجد للقسمة على 2 أو 1 وتخزن هذه النتائج في الجدول في الحقول maxg و ming و grade والتي تمثل الأكبر والأصغر والمستحق على الترتيب الإقتران الأول whatmax
Function whatmax(a, b, c, d As Double)
 max = 0
 If a > max Then max = a
 If b > max Then max = b
 If c > max Then max = c
 If d > max Then max = d
 whatmax = max
End Function
لاحظ أننا افترضنا أن القيمة العظمى max هي 0 ثم قارنا ذلك مع الدرجة الأولى فإذا كانت أكبر من صفر أصبحت هي الأكبر ثم نقارن مع الدرجة الثانية وهكذا... الإقتران الثاني whatmin
Function whatmin(a, b, c, d As Double)
 min = 100
 If a < min Then min = a
 If b < min Then min = b
 If c < min Then min = c
 If d < min Then min = d
 whatmin = min
End Function
لاحظ هنا أن العملية عكسية للإقتران السابق حيث أننا نبحث عن اقيمة الصغرى لذلك افترضنا أن القيمة الصغرى min هي 100 ثم قارنا ذلك مع الدرجة الأولى فإذا كانت أصغر من 100 أصبحت هي الأصغر ثم نقارن مع الدرجة الثانية وهكذا... الإقتران الثالث whatgrade
Function whatgrade(a, b, c, d As Double)
h = 4
If a = 0 Or IsNull(a) Then h = h - 1
If b = 0 Or IsNull(b) Then h = h - 1
If c = 0 Or IsNull(c) Then h = h - 1
If d = 0 Or IsNull(d) Then h = h - 1
g = Nz(a, 0) + Nz(b, 0) + Nz(c, 0) + Nz(d, 0) - whatmax(a, b, c, d) - whatmin(a, b, c, d)
If h = 4 Then
 whatgrade = g / 2
Else
 whatgrade = g
End If
End Function
وهذا الاقتران الذي سيحسب لنا الدرجة لكل طالب حسب القاعدة المطلوبة ثانيا: الحل البرمجي الذي قدمه Accessna المقدمة : في بعض الاحيان لا نستطيع كتابة استعلام واحد مباشرة يحقق لنا ما هو مطلوب من المسألة وفي هذه الحالة (الأصعب) يلجأ إلى بناء استعلامات مركبة تكون نتيجة استعلام هي مصدر استعلام أخر وهذا هو المنهج الذي اتبعة Accessna في التوصل للحل. الخطوات : 1. بناء استعلام توحيد QryJudgesAll
SELECT [no],  g1 as grade FROM Judges Union all
SELECT [no],  g2 FROM Judges Union all
SELECT [no],  g3 FROM Judges UNION ALL SELECT [no],  g4 FROM Judges
ORDER BY [no];

وهذا الاستعلام يقوم باختيار رقم الطالب no والحكم الأول g1 ويتم تسمية الحكم grade لكل الطلاب وثم يضيف اليها (يوحدها) الحكم الثاني والثالث والرابع ونتيجة هذا التوحيد ستكون عمودين عمود يظهر فيه رقم الطالب no وعمود تظهر فيه النتيجة التي تم تسميتها grade

post-27241-1198145744_thumb.jpg

بمعنى أخر نتيجة استعلام التوحيد هي استعلام فيه حقلين no و grade حسب الصورة السابقة واسم هذا الاستعلام QryJudgesAll وسوف يستخدم في الخطوة التالية

2. بناء استعلام اختيار QryJudgesSum

post-27241-1198146159_thumb.jpg

لاحظ أن مصدر هذا الاستعلام هو الاستعلام التوحدي الذي تم إنشاءه بالخطوة الأولى وأن الاقترانات الثلاثة التي تم شرحها في طريقة البرمجة يتم معالجتها هنا وهي MaxG و MinG و Grade

3. بناء استعلام اختيار QryGrades

post-27241-1198146483_thumb.jpg

وهذا الاستعلام سيعتبر مصدرا للنموذج حيث يوفر جميع الحقول من جدول البيانات الأساسي judges ويوفر النتائج التي هي في الاستعلام QryJudgesSum

ذكر Accessna

يمكن اختصار الإستعلامات من 3 إلى 2 ولكني أحببت أن تكون مفهومة أكثر مع جعلها 3

وهذا كلام دقيق وذلك بتعديل QryJudgesSum ليضم أيضا جميع الحقول من Judges كما يآتي :

post-27241-1198147232_thumb.jpg

وهذا الملف بعد اختصار الاستعلامات الثلاث إلى إثنين لمن يحب : judge_Queries_update.rar

تحياتي

تم تعديل بواسطه محب العلم
  • Like 1
رابط هذا التعليق
شارك

وبمزيد من العمل في نفس المسألة :

توصلت إلى طريقة ثالثة تستخدم استعلام تحديد واحد ويطلب هذا الاستعلام الاقترانات التي تم شرحها سابقا من وحدة نمطية تعرف فيها الاقترنات بشكل Public وهذه الطريقة تمكننا من التعديل على النموذج ومشاهدة النتائج مباشرة وعدم تخزين النتائج في الجدول بل الحصول عليها من خلال الاستعلام.

اعتقد أن هذه الطريقة هي الأمثل لهذه المسألة

الملف : JudgeOneQuery.rar

تحياتي

رابط هذا التعليق
شارك

جزاكم الله خير الجزاء على هذا الشرح الوافي الكافي

يارب يسر لهم من أمرهم رشدا ، وانفع بهم ، وبارك لهم في مالهم وولدهم وعلمهم وعملهم.

وفقكم الله أجمعين

رابط هذا التعليق
شارك

وفقك الله أخي

لقد استخدمت آخر طريقة (( الوحدة النمطية ))

مع أن خلفيتي في الوحدة النمطية = صفر

ولكن لن أنسى ما قدمتموه .

وأسأل الله أن يجمعنا بكم في الدنيا على الخير ، وفي الآخرة في جنة الفردوس

رابط هذا التعليق
شارك

وفقكم الله

واجهتني مشكلة

هي أن درجات كل محكم تشمل 1) تطبيق التجويد 2) الحفظ 3) التلاوة 4) التفسير

هل بالإمكان أن يقوم البرنامج بجمع هذه الدرجات للمحكم الأول ويضعها في خانة g1 وكذا الثاني والثالث والرابع.

وفقكم الله لكل خير

Judg.rar

رابط هذا التعليق
شارك

حياك الله أخي حامل المسك ،

التعديل يشمل إضافة جدول للمحكمين وربط الجداول معا بعلاقات وعمل استعلامات تحديث للعللامات وطلبها في حدث عند الفتح لنموذج الطلاب الذي سيعرض النتائج وعمل نموذج إدخال للعلامات والله الموفق

التعديل : StudentsMarks.rar

تحياتي

رابط هذا التعليق
شارك

إنَّني أثني بما أوليتني ... لم يضع حسن بلاءٍ من شكر

إنَّني والله لا أكفركم ... أبداً ما صاح ديكٌ في السَّحر

جزاك الله خير الجزاء

وجعل ذلك في ميزان حسناتك

جاري العمل

رابط هذا التعليق
شارك

حياك الله أخي حامل المسك،

بكل تأكيد يجب الاحتياط أنها ليست Null وذلك يتم عن طريق nz

مثال (nz(marks.m1,0 فإذا كان الحقل null يعطينا 0 وهكذا تحل المشكلة

ولئلا اتعبك قمت بالتعديل في الملف في الاستعلامات الإجرائية لجميع العلامات

الملف المعدل :StudentsMarksv1.rar

تحياتي

رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information