الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

يا جماعة حلوا لنا هالمشكلة

مغلق
بدأه Hussin_za في 20 أكتوبر 2004 · 9 رد · 605 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أنشأت جدول الموظفين tblEmployees وجدول الحضور tblAttendance

جدول الموظفين وحقوله كالتالي:

1- رقم الموظف ( المفتاح الأساسي)

2-إسم الموظف

3-القسم

جدول الحضور وحقوله كالتالي :

1- مسلسل ( مفتاح أساسي )

2-رقم الموظف

3- التاريخ

4- تأخير الصباح

5-تأخير المساء

6-مجموع التأخير اليومي (3+4)

أود صناعة نموذج يحتوي DBGrid يقوم بعرض التالي :

1- رقم الموظف

2-إسم الموظف

3-إجمالي التأخير الشهري ( مجموع عمودي للحقل 5 في جدول الحضور لكل موظف)

باختصار الجدول في اليمين يعرض أسماء الموظفين من جدول الموظفين وأمام كل موظف خانة تعرض إجمالي وقت التأخير اليومي بالنسبة له من جدول الحضور ضمن فترة معينة

يعني كالتالي : هو يتأخر كل يوم 10 دقائق فإذا عرضت تقرير بعد 12 يوم يكون كالتالي

1 ----- محمد ------- 120

الـ 120 هي إجمالي أوقات تأخيره في جميع الأيام من جدول الحضور

#2

السلام عليكم

نتفرض اسماء الحقول التالية

رقم الموظف في جدول الموظفين : ID1

رقم الموظف في جدول الحضور : id2

تأخير الصباح : t1

تأخير المساء : t2

اسم الموظف : name

القسم : section

سنقوم بعمل استفسار سنسميه q1

q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select id1,id2,name,section,t1+t2 from tblEmployees ,tblAttendance where id1 = id2 ');
q1.Open;

ثم نقوم بربط q1 بـ dbgrid

هذه الطريقة الأفضل لمثل هذه الحالات وتستطيع أن تعدل فيها بما يناسبك

#3

اخوي أبو محمد

لاحظ إنه أنا في جدول الحضور رقم الموظف يتكرر مع تغير التاريخ وأنا أبي البرنامج يحسب مجموع تأخيره مثلا في شهر ويضع المجموع أمام رقمه في جدول الموظفين

وبعدين أكتب الكود داخل بناء الاستفسار أو في صفحة الكود العامة للفورم

وعموما حجرب واشوف

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

#4

السلام عليكم

جرب إضافة حقل Month الى جدول الحضور يتم تسجيل شهر التأخير به ثم نفذ الاستفسار التالي ( الكود التالي يكتب داخل البرنامج )

q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select sum(t1+t2),month,name from  tblAttendance INNER JOIN tblEmployees ON (tblEmployees.id1 = tblAttendance.id2) GROUP BY month,name ORDER BY name');
q1.Open;

سيقوم الاستفسار بتجميع التأخير الصباحي والمسائي حسب الاسم والشهر .

#5

أولا يبو محمد هل الحقل month في جدول الحضور يكون حقل وهمي أو يشترط وجوده في قاعدة البيانات وما هي خصائصة calculated ولا data ولا lookup

ثانياً في DBGRid اضيفه وأدخل فيه الشهر ولا في Edit خارج الجدول

ثالثاً هل سيقوم بتجميع التأخير لكل الموظفين معا في DBGrid بحيث كل موظف يظهر أمامه إجمالي تأخيره

رابعا إجمالي التأخير في Dbgrid هو sum اللي يعرض مجموع التأخير اليومي أو أضيف حقل جديد احسب فيه المجموعأو هو حقل month نفسه

خامساً كتبت الكود بس يعطيني رسالة خطأ في Clear

بس على فكرة عشان تراجع الكود لو سمحت

q1 = query1

إيش قصدك بSUM اللي عندي هي طبيعي t1+t2 أو ماذا

id1=No

id2=EmpNo

ياليت تحاول معي شوي يمكن ننجح

#6

السلام عليكم

الحقل موجود بقاعدة البيانات ونوعه رقمي ويجب عليك إدخال بياناته عند إدخالك لبيانات التأخير ، يعني لما تدخل بيان التاريخ تقوم بعمل كود يقوم تلقائيا بوضع قيمة للشهر .

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

سأرسلك لك برنامج صغير به التجميع الذي قمت به وستوضح لك الصورة إن شاءالله

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

#7

السلام عليكم

نفترض لدينا البيانات التالية في جدول الموظفين :

رقم الموظف اسم الموظف التخصص

1 أبو محمـد فيزياء

2 أبو أحمـد كيميـاء

ولهم التأخيرات التالية في جدول الحضور :

رقم الموظف التاريخ مدة تأخير الصباح مدة تأخير المساء شهر التأخير

1 2/2/2004 10 5 2

2 25/2/2004 7 6 2

2 29/2/2004 12 13 2

1 5/3/2004 7 6 3

1 12/3/2004 0 16 3

لتجميع أسطر جدول نقوم بإضافة الامر Group By إلى عبارة Select حيث نتبعها باسماء الأعمدة التي تستخدم القيم المخزنة فيها لتجميع الأسطر . حيث يتم في هذه الحالة تجميع الأسطر المشتركة في القيم المخزنة في هذه الأعمدة .يأخذ التجميع الشكل العام التالي :

SELECT column1, column1, SUM(column) FROM table GROUP BY column1, column2

لاحظ الأعمدة الداخلة في الاختيار لا بد ان تكون نفس الاعمدة الداخلة في التجميع .

فإذا أردنا التجميع باستخدام الاسم : فإننا نستخدم الكود التالي :

q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select sum(t1+t2),name from  tblAttendance INNER JOIN tblEmployees ON (tblEmployees.id1 = tblAttendance.id2) GROUP BY name ORDER BY name');
q1.Open;

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

وسيكون الناتج كالتالي :

الاسم                          مدة التأخير

أبو محمد                        44

أبو أحمد                         38

أما إذا أردنا التجميع  بإستخدام الشهر Month  والاسم فإنا نستخدم الكود التالي :

q1.Close;
q1.SQL.Clear;
q1.SQL.Add('select sum(t1+t2),month,name from  tblAttendance INNER JOIN tblEmployees ON (tblEmployees.id1 = tblAttendance.id2) GROUP BY month,name ORDER BY name');
q1.Open;

يقوم هذا الاستفسار بربط جدول الموظفين بجدول الحضور ثم تجميع الأسطر المشتركة بالاسم والشهر ، فيكون الناتج كالتالي :

الاسم شهر التأخير مدة التأخير

أبو محمد 2 15

أبو محمد 3 29

أبو أحمـد 2 38

في المرفقات مثال يوضح التجميع ، آمل أن يكون هذا ما تريده ... وعذرا على التأخير .

تم تعديل هذه المشاركة بواسطة أبو محمـد في 24 أكتوبر 2004 في 20:06

#9

أولا طفشناك بس تحملنا

ثانيا

جزاك الله ألف خير وحجرب وإن شاء الله أوصل لحل

#10

سلام يبو محمد

أولا جداولي من نوع Paradox وامتدادها كالتالي

الحضور C:/Sappco/Attendance

الموظفين C:/Sappco/Employees

وعلى فكرة أسامي الجداول مافيها tbl

ثانيا كتبت الكود ونفذت المطلوب بس يعطيني رسالة خطأ Could not find Attendance

ثالثاً في q1 تحت خاصية code string لقيت كود انت حاطه برضه نفذته وما في فايده

السؤال هل هذه الأدوات انت جبتها من AOD أقصد q1وAOD

ثانيا هل فيه خصائص الأدوات أي إشاره إلى الجدوال أو امتدادها غير الكود طبعاً

لأنه الظاهر ما هو عارف يحدد موقع الجداول

وشكراً

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…