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

مساعدة في تعديل استعلام

مغلقمُجابرائج
بدأه SANDANET في 7 مايو 2014 · 69 رد · 2,582 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
لهذا السؤال إجابة معتمدة — اضغط للانتقال إليها
#1 صاحب الموضوع

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

 

أخواني لدي قاعدة بيانات مرفقة كانت الأستاذة زهرة قد ساعدتني في عمل كود لإلحاق البيانات من جدول A الى جدول B بشرط وهو ان يتم الحاق البيانات فقط في وقت مابين 6.00 AM و 2.00PM  

 

الآن احتاج الى تعديل الاستعلام الموجود بتلك القاعدة بحيث يقوم بالحاق الاسماء فقط من جدول A الى جدول B بشرط ان يتم تسجيل هذا الإلحاق بالتاريخ المفقود من الجدول B .. يعني لو كان آخر تاريخ مسجل بالجدول B هو 29/4/2014 فالإلحاق سوف يضيف الاسماء ويعطيها تاريخ 30/4/2014 ومن ثم يلحق الاسماء مرة اخرى لكن بتاريخ 1/5/2014 ويلحقها مرة اخرى ولكن بتاريخ 2/5/2014 وهكذا يستمر الإلحاق الى تاريخ اليوم 

 

ارجو ان اكون وفقت في شرح المطلوب

 

وشكراً   

za-Example-UP.zip

تم تعديل هذه المشاركة بواسطة SANDANET في 7 مايو 2014 في 14:10

#2

ألا يوجد حل يا اخواني؟؟

#3

إن شاء الله يوجد حل

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

فإن كان هذا يناسبك فيمكن أن نبدأ بالمحاولة

وإن لم يكن فربما أحد الزملاء يعدل لك الاستعلام

#4

أهلا أخي أمير شكرأ لك على الإهتمام .. لامشكلة سواء بالكود او بالاستعلام اهم شيء يؤدي الغرض  

#5

طيب جرب طريقة الكود

لكن أرى استمرار الحاق البيانات مرارا وتكرارا بسبب التايمر

فهل هذا ما تريد أم تريد الالحاق مرة واحدة فقط ؟

za-Example-UP 2.rar

#6

أخي أمير تحية طيبة لك وبارك الله فيك .. لكن الإلحاق يحتاج الى تعديل لكي يؤدي الغرض المطلوب

الجدول A يحتوي على اسماء ( عدنان، محمد، حسام، بسام) .........جدول B مسجل فيه (عدنان ...1\5\2014 ...حضور) 

                                                                                                                           (محمد ...1\5\2014 ...حضور)

المطلوب هو استعلام يقوم بالحاق الاسماء جميعها من جدول A الى جدول B على النحو التالي (عدنان .. 2\5\2014 ...غياب)

                                                                                                       (محمد ... 2\5\2014 ...غياب)

                                                                                                        (حسام ... 2\5\2014 ... غياب)

                                                                                                        (بسام ... 2\5\2014 ... غياب)

                                                                                                        (عدنان .. 3\5\2014 ...غياب)

                                                                                                       (محمد ... 3\5\2014 ...غياب)

                                                                                                        (حسام ... 3\5\2014 ... غياب)

                                                                                                        (بسام ... 3\5\2014 ... غياب)

                                                                                                        (عدنان .. 4\5\2014 ...غياب)

                                                                                                       (محمد ... 4\5\2014 ...غياب)

                                                                                                        (حسام ... 4\5\2014 ... غياب)

                                                                                                        (بسام ... 4\5\2014 ... غياب)

                                                                                                                         .

                                                                                                                         .

                                                                                                                         .

                                                              الإلحاق يستمر الى حد تاريخ يوم امس لان تاريخ اليوم الحالي سوف يتم تسجيله بواسطة الموظفين عندما يقوموا بتسجيل حضورهم  

                                                                                                        (عدنان ...7\5\2014 ...غياب)

                                                                                                       (محمد ... 7\5\2014 ...غياب)

                                                                                                        (حسام ... 7\5\2014 ... غياب)

                                                                                                        (بسام ... 7\5\2014 ... غياب) 

تم تعديل هذه المشاركة بواسطة SANDANET في 8 مايو 2014 في 15:31

#7

امممممم

هكذا إذن !

قم بتجربة المرفق

ولا تخبرني عن النتيجة

أقصد أخبرني لكن انا رأسي تاهت في الكود  لذلك ربما هذا آخر ما أستطيع

 

za-Example-UP 3.rar

#8

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

 

أخي الكريم لو أردت ان اغير اسماء الجداول A,B الى اسماء أخرى فأين يتم التغيير؟؟؟ أنا قمت بتغيير الحروف A و B المستقلة (اي تلك التي بدون الارقام)  وكذلك الحروف a , b الصغيرة واشتغل الكود لكن الالحاق لايتم كما عملته انت .. (بصراحة الكود معقد ومافمت منه شيء :D )   

 

 

نقطة أخرى مهمة اتمنى ان تعطيني ولو فكرة بسيطة عنها من بعد أمرك وهي كيف يمكنني استثناء أيام العطل الرسمية كالجمعة أو أيام الأعياد عند عمل الإحاق ؟؟ يعني عند الحاق البيانات كما في مثالنا فانه سوف يتم تسجيل الموظفين غياب حتى في أيام العطل وهذا غير صحيح وكذلك بالنسبة للموظفين المجازين فيجب ان يستثنوا ايضاً بطريقة ما.

تم تعديل هذه المشاركة بواسطة SANDANET في 9 مايو 2014 في 05:58

#9
Private Sub AppendA()
Dim i, k, LWeekday
i = 0
k = DCount("date", "A")
Dim BDate, Adate
Dim B1, B2, A1, A2 As Recordset
Set A2 = CurrentDb.OpenRecordset("SELECT * FROM A;")
Set A1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max(a.Date) as dat FROM  A ;")
Set B1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max(b.Date) as dat FROM B;")
Set B2 = CurrentDb.OpenRecordset("SELECT * FROM B;")
Adate = IIf(Nz(A1!Dat, 0) <> 0, A1!Dat, Date)
BDate = IIf(Nz(B1!Dat, 0) <> 0, DateAdd("d", 1, B1!Dat), A2!Date)
If Adate <  Date Then
If BDate >= Date Then
Exit Sub
End If
A2.MoveFirst
starty:
For i = 1 To k
Set B1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max(b.Date) as dat FROM B;")
Set B2 = CurrentDb.OpenRecordset("SELECT * FROM B;")
B2.AddNew
B2!Name = A2!emp_name
B2!Date = IIf(Nz(B1!Dat, 0) <> 0, BDate, A2!Date)
B2.Update
A2.MoveNext
Next i
A2.MoveFirst
BDate = IIf(Nz(B1!Dat, 0) <> 0, DateAdd("d", 1, B1!Dat), A2!Date)
If Weekday(BDate) = 6 Then BDate = DateAdd("d", 2, B1!Dat)
If BDate >= Date Then
Exit Sub
Else
GoTo starty
End If
Else
Exit Sub
End If
End Sub

ههههههه

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

لكن

أيام الشباب كنت شغال على لغة اسمها Turbo C++ وكان في البرنامج 1300 سطر برمجي وكنت أستخدم بكثرة  أمر GOTO

وبالرغم من ذلك كنت أحفظهم عن ظهر قلب

أما اليوم فلا يوجد في كود برنامجك إلا GOTO واحدة فقط  وأسطر قليلة لكن الواحد دماغه تاهت

 

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

 

وبالنسبة ليوم الجمعة :

كل يوم له كود عبارة عن رقم

تقريبا الجمعة هو رقم 6 لو كانت بداية الأسبوع الأحد

جرب تغير يوم بداية الأسبوع في اعدادات اقليمية بلوحة التحكم من نظام ويندوز وشوف رقم  الجمعة هيتغير أم لا ؟

 

وكما ترى في الكود أعلاه أضفنا سطر

If Weekday(BDate) = 6 Then BDate = DateAdd("d", 2, B1!Dat)

ليزداد التاريخ يومين بدلا من يوم ليتخطي يوم 6

وممكن تغير الرقم 6 أو تضيف يوم آخر

ولو عارف تواريخ الأجازات الرسمية ممكن تضيفها على الكود

 

وبالنسبة للموظفين الذين في أجازة :

الكود ده :

A2.MoveNext

بينتقل لسجل الموظف في الجدول الأول وممكن نعمل متغير يساوي اسم أو كود الموظف في الجدول A

وتروح على جدول الأجازات ونعمل متغير بستخرج تاريخ بداية ونهاية الأجازة لنفس الموظف

وتضع شرط : اذا كان اليوم الحالي ( يوم التسجيل في جدول B ) يقع في الفترة بين تاريخ بداية ونهاية الأجازة فنقوم بتخطي هذا اليوم بالكود

BDate = DateAdd("d", 2, B1!Dat)a

 

 

وبالنسبة لتغيير مسميات الجداول:

فعندك في هذا الجزء من الكود لون الجدول احمر ولون الحقل أزرق

k = DCount("date", "A")

Dim BDate, Adate

Dim B1, B2, A1, A2 As Recordset

Set A2 = CurrentDb.OpenRecordset("SELECT * FROM A;")

Set A1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max(a.Date) as dat FROM  A ;")

Set B1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max(b.Date) as dat FROM B;")

Set B2 = CurrentDb.OpenRecordset("SELECT * FROM B;")

Adate = IIf(Nz(A1!Dat, 0) <> 0, A1!Dat, Date)

BDate = IIf(Nz(B1!Dat, 0) <> 0, DateAdd("d", 1, B1!Dat), A2!Date)

If Adate <  Date Then

If BDate >= Date Then

Exit Sub

End If

A2.MoveFirst

starty:

For i = 1 To k

Set B1 = CurrentDb.OpenRecordset("SELECT DISTINCT Max( b .Date) as dat FROM B;" )

Set B2 = CurrentDb.OpenRecordset("SELECT * FROM B;")

 

أما باقي المتغيرات المرتبطة بهما فممكن تبقي عليهم بشرط أن A1 بداخلها تتعامل مع الجدول A وهكذا

جرب وشوف

za-Example-UP 4.rar

تم تعديل هذه المشاركة بواسطة أمير2008 في 9 مايو 2014 في 11:18

#10

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

أخي العزيز صحيح انه (لا يوجد في كود برنامجي إلا GOTO واحدة فقط )  لكن انا قعدت نص ساعة ادور عليها لعند مالقيتها  :D  والسبب طبعاً لأني جوعان ولسى ما أكلت شي والعقل خارج الخدمة مؤقتاً هههه

 

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

1-  هل يمكن الاستغناء عن زر الامر Command6 واستعمال كود ال AppendA() فقط 

2-  بالنسبة لكود يوم الجمعة فقد جربت تغيير يوم بداية الاسبوع من الإعدادات الإقليمية لكن لم يتغير رقم الجمعة ولم يحدث شيء ( انا لدي ايام الجمعة والسبت هما العطلتان الرسميتان في البلاد) فهل بهذه الحالة يمكن ان نكتب الكود كالتالي DateAdd("d", 3, B1!Dat)  بدل اضافة كود خاص بيوم السبت ؟؟

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

4- انا قمت بتغيير اسماء الجداول فقط وكما اشرت انت في الكود قمت بتغيير تلك التي باللون الأحمر لكن إلحاق البيانات في الجدول اصبح بشكل غير منظم (بصراحة شيء غريب) ارجو منك تجربة ذلك لكي تتضح الصورة ...وبارك الله فيك على كل ماتفعله  

#11

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

 

اقتباس

 

وإن شاء الله سوف اهديك نسخة كاملة من برنامجي حالما انتهي منه

 

- بالطبع أسعد بهديتك كثيراً


 

 

اقتباس

 

انا قعدت نص ساعة ادور عليها لعند مالقيتها

 

أنا قعدت أيام لغاية ما اكتشفت خطأ في برنامج سببه  السيمي كولون ;

 

 

 

اقتباس

 

هل يمكن الاستغناء عن زر الامر Command6 واستعمال كود ال AppendA() فقط

 

نعم نعم هو كان مؤقت لتجربة جزء من الكود وليس له دور الان

 

 

اقتباس

فهل بهذه الحالة يمكن ان نكتب الكود كالتالي DateAdd("d", 3, B1!Dat)  بدل اضافة كود خاص بيوم السبت ؟؟

 

صحيح ، يمكن ذلك ، تفكيرك في الكود ممتاز

 

 

 

اقتباس

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

تمام ومصدر النموذج بيانات لجدول العطل

حاول تنفذها وأنا أيضا سوف أفكر في ذلك

 

 

اقتباس

لكن إلحاق البيانات في الجدول اصبح بشكل غير منظم

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

za-Example-UP 5.rar

تم تعديل هذه المشاركة بواسطة أمير2008 في 9 مايو 2014 في 19:36

#12

أستاذي الكريم أمير اشكرك كثيراً على كود استثناء يوم الجمعة والسبت فعلاً اعطى مفعوله على مثالك الأخير فبارك الله فيك ..

 

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

za-Example-UP 7.zip

#13

أنا شايفه شغال تمام

لكن لو تقصد الترتيب من A إلى Z

 فجرب المرفق

za-Example-UP 8.rar

#14

بارك الله فيك أخي أمير الآن اصبح الكود تمام التمام ..ان شاء الله سوف اقوم بعمل باقي التعديلات واتواصل معك هنا حتى ارفع لك البرنامج كاملاً بإذن الله ..لك مني جزيل الشكر واسأل الله ان يوفقك وان يجعل اعمالك كلها في ميزان حسناتك يارب

#15

أخي أمير اطلع على المرفق من بعد أمرك .. فقد عملت نموذج يمكن من خلاله اختيار اسم الموظف وتحديد تاريخ لاجازته وعملت استعلام يقوم بعملية الفلترة لكني لم اعمل الاستثناء بعد  

za-Example-UP 8.zip

تم تعديل هذه المشاركة بواسطة SANDANET في 10 مايو 2014 في 14:59

#16

تمام

لكن ايه فكرتك بالنسبة للأجازة ؟

بمعنى :

لو الموظف يريد الحصول على أجازة من  يوم 12/5/2014 حتى يوم  15/5/2014 فأين يتم تسجيلها ؟

#17

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

#18

- جدول record وجدول employers ؟ هل هما جدولي غياب وحضور ؟ أم جدول record يتم به تسجيل الحضور والغياب معاً ؟

- وكيف يتم تسجيل حالة ( حضور) في الجدول record ؟

- وهل تريد منع تسجيل غياب موظف في أجازة في جدول record  ؟

#19

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

 

بالنسبة للنقطة الأخيرة فالأفضل ان يتم تسجيل الموظف لكن توضع له كلمة مجاز في خانة الملاحظات مثلاً (أي نضيف عمود خاص بالملاحظات في جدول ال record ) أما العطل الرسمية كالأعياد فيجب منع البرنامج من تسجيل غياب جميع الموظفين طبعاً (فترة الأعياد يتم ايضاً تحديدها من خلال نموذج off حيث يتم اختيار مدة العطلة فقط من النموذج بينما تترك خانة اسم الموظف فارغة)

 

أما لو فرضنا ان المسؤول عن إدارة البرنامج لم يقم بتحديد فترة العطلة الرسمية قبل قدومها وأراد ان يسجل فترة العطلة بعد انقضائها فيجب جعله قادراً على حذف التسجيل الذي تم في جدول record بالفترة المحددة.. وهذا ينطبق على الموظف المجاز أيضاً اذا لم يتم تسجيل اجازته مسبقاً .

 

إن شاء الله بعد تلك التعديلات يمكن ان نعتبر ان البرنامج قد اكتمل

 

تحياتي    

تم تعديل هذه المشاركة بواسطة SANDANET في 11 مايو 2014 في 02:25

#20

تمام

طيب أنا أقترح تسجل الحالة في جدول record  (حضور / غياب / مجاز ) وفي الملاحظات ممكن تكتب نوع الأجازة : (رسمية / عارضة / اعتيادية / مرضية / وضع ..... وهكذا)

 

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

 

وفي حالة ادخال اعطال رسمية في تاريخ معين قبل بدايتها أقترح عمل جدول للأجازات الرسمية مستقل به تاريخ الأجازة ( من و إلى)

وفي كل مرة تسجل موظف نقوم بفحص تاريخ يوم التسجيل في جدول الاجازات

 

هذا مجرد تفكير متدئي وليس حل أمثل

لا أعلم ، هل عندك اقتراحات أفضل وأنسب لك  بخصوص ما ذكرت لك ؟

#21

أخي أمير بارك الله فيك على أفكارك الجميلة وانا معك في كل ماتفضلت به إلا انه لدي نقطة اضيفها هنا وهي جعل جدول الاجازات يخزن الاجازة القادمة وعند انقضائها نجعل النموذج off يحذف الاجازة المنقضية من الجدول (نضع الامر في حدث عند فتح النموذج مثلاً) قبل تسجيل الاجازة الجديدة ..بذلك اعتقد ان جميع الاحتمالات ستكون مستوفية   

 

وهذا الكود يمننا ان نستعمله في حدث عند الفتح في نموذج off 

 

Private Sub Form_Open(Cancel As Integer)
On Error Resume Next
Dim c, i
c = DCount("[Name]", "TABLE")
DoCmd.GoToRecord , , acFirst
For i = 1 To c
Me!NAME = ""
DoCmd.GoToRecord , , acNext
Next i
Me.Requery
End Sub
طبعا بالنسبة للأخوة المتابعين فإن NAME = اسم الحقل و TABLE = اسم الجدول 

تم تعديل هذه المشاركة بواسطة SANDANET في 11 مايو 2014 في 17:59

#22

بصورة عامة فالمفروض رسميا أن الموظف يحصل على موافقة بالأجازة

يعني تسجل الأجازة في جدول الأجازات ثم يأتي موضوع تسجيل الموظف حاضر أم غائب أم مجاز

 

لكن ما العمل لو قام الموظف بقطع أجازته ؟

فكر وأخبرني

 

ابدأ بالتنفيذ وأنا متابع معك إن شاء الله

وياريت الزملاء والأساتذة لو يشاركوا بلمحاتهم الفنية أو آرائهم في الموضوع

فأمتع الموضوعات هي الغنية بالمقترحات من هنا وهناك

#23

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

#24

يا باشا من غير ما تطلب

مدام العملية فيها أكواد أنا مش محتاج عزومة

أعطيني فقط نموذج Form وأنا أعمل قاعدة بيانات بدون جداول وبدون استعلامات

#25

أخي أمير الفورم هو نفسه حيكون فورم off من خلاله نسجل الإجازات العامة ويمكن اختيار اسم موظف ايضاً ليتم تسجيل اجازته ايضاً .. فما التعديل الذي تراه في هذا الفورم؟

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

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