السلام عليكم ورحمة الله وبركاته وبعد
إذا رغبت في عدم تكرار الاسم لكن بنفس التاريخ ..
بحيث يقبل الاسم إذا كان التاريخ مختلف ..
علماً بأن الاسم قائمة منسدلة ..
شكراً للجميع .
السلام عليكم ورحمة الله وبركاته وبعد
إذا رغبت في عدم تكرار الاسم لكن بنفس التاريخ ..
بحيث يقبل الاسم إذا كان التاريخ مختلف ..
علماً بأن الاسم قائمة منسدلة ..
شكراً للجميع .
الأخ /فتى الوادي
تعاندني التسميات بالعربي أثناء كتابة الأكواد فأقوم بإستعمال التسميات الإنجليزية :
التوضيح:
1- اسم الجدول = Tbl1
2_حقل الاسم في الجدول= Name
3_ اسم النموذج = Frmt
4_ مربع الاسم على النموذج =TxtName
5_ تاريخ إدخال البيانات= Date
أكتب الكود التالي على مربع النص الخاص بالتاريخ Date
في حدث بعد التحديث:
Dim r As Variant
r = DLookup("[Name]", "[tbl1]", "[Name ]=[forms]![frmt]![txtName]And[date]=[forms]![frmt]![date]")
If Not IsNull® Then
MsgBox "السيد" & [txtName] & " تم إدخال بيانات له هذا اليوم ", vbMsgBoxRight, "تنبيه"
End Ifإذا لم يعمل الكود أخبرني
تحياتي إلك
الأخ ( 5060 ) السلام عليكم ورحمة الله وبركاته وبعد
الكود الذي ذكرته لا يعمل .. فهو يقبل كل شيء تكرر أو لم يتكرر في نفس اليوم أو غيره .. الرسالة طالعة طالعة ...
ولعلي أزيد توضيح في السؤال :
الجدول اسمه ( المكلفين ) فيه الحقول التالية
مسلسل - اسم_المكلف - المدة - بداية التكليف - نهاية التكليف- البرنامج - ملاحظات .
النموذج اسمه ( المكلفين ) فيه الحقول السابقة مع ملاحظة أن اسم المكلف في النموذج قائمة منسدلة بناء على جدول الأسماء .
فالمطلوب ( )
عدم قبول الاسم إذا تكرر الاسم وكان التكليف يقع بين بداية التكليف ونهاية التكليف -- وإذا أختلف بداية التاريخ ونهاية التاريخ يقبل الاسم ..
أنظر إلى النموذج .. مع ملاحظة أن بداية التكليف ونهاية التكليف ( تاريخ )

الأخ فتى الوادي
أنشئ استعلام جديد وأدرج فيه حقول :
اسم_المكلف
بداية التكليف
نهاية التكليف
وتحت بداية التكليف ضع :
Forms![نموذج المكلفين]![بداية التكليف]
وتحت نهاية التكليف ضع :
Forms![نموذج المكلفين]![نهاية التكليف]
وتحت اسم_المكلف :
Forms![نموذج المكلفين]![اسم القائمة المنسدلة التي فيها الأسماء]
وعند الخروج من آخر حقل تضع فيه البيانات إما بداية التكليف أو نهايته أو اسم المكلف ضع :
If Dcount("[بداية التكليف]","اسم الاستعلام الجديد")>0 Then
Msgbox "لقد سبق تسجيل هذا الاسم "
end if
هناك طريقة أخرى لكن لايسعني الوقت للتأكد منها تماما وهي لاتحتاج إلى إنشاء استعلامات ولكن باستخدام دالة Dlookup .
ولك تحياتي
الأخ/ فتى الوادي
لقد قمت ببعض التعديل على الكود ولبرنامج يعمل بالشكل الصيحيح ويمكنك إستبدال اسم مربع النص الموجود في الكود باسم مربع القائمة المنسدلة عدل ما يلزم وسوف تكون النتيجة طيبة بإذن الله0
البرنامج تجده على الرابط التالي:
http://mypage.ayna.com/mrsalnet
والبرنامج باسم " Datar.zip "
جرب اكتب اسم شخص مرتين بنفس التاريخ وأنضر هل يقبل ذلك
ولكم تحياتي0
الأخ الفاضل ( أبو حمود ) بالنسبة للكود فلم يعمل لدي ..
الأخ ( 5060 ) مثالكم الثاني يعمل .. وجميل جداً ..
والله يعطيكم العافية .. ويبارك فيكم وفي علمكم ..
الأخ ابو حمود .. ذكرت أن هناك طريقة أخرى فلعك تتكرم وتتحفنا بها ..
والله يوفقكم .
السلام عليكم ..
المثال جيد ... لكنه يقبل التكرار بعد ظهور الرسالة ..
لو رجعت للجدول لوجدت أن البيانات متكرر ...
فأرى أنه لا بد من إضافة أمر في الكود نفسه يلغي البيانات أو يقوم بفتح سجل جديد ...
الأخ ( 5060 ) .. السلام عليكم ..
لاحظ أن عند تكليف شخص ( أحمد ) من تاريخ 1/1/ 1422 لمدة ( 5 ) أيام يعني إلى نهاية 6/1/1422 ..
فلو أردنا تسجيله كمكلف من تاريخ 3/1/1422هـ أن البرنامج يقبل ..!!
والمطلوب عدم قبول نفس الموظف خلال المدة من تاريخ إلى تاريخ ..
فما هو الحل !!؟؟
أعانك الله .
الأخ/فتى الوادي
تراك ؟؟؟؟؟ غالي علينا0
أفتح الجدول وأحذف جميع البيانات ثم أفتح النموذج وأكتب الرقم وليكن 100 ولاسم " فتى الوادي" والتاريخ 20/10/1422 ثم كرر نفس الرقم والاسم والتاريخ وعند ظهور الرسالة أنقر عاى موافق وأغلق النموذج وأفتح الجدول وأنظر هل اسمك مكرر مرتين وأمانه عليك اخبرنا بالنتيجة0
تم استخدام أمر التراجع عن إظافة السجل إذا كان هناك شخص مسجل بنفس التاريخ والاسم0
تحياتي لك0
السلام عليكم ورحمة الله وبعد .. لقد جربت وما زال الأسم مكرراً .. قمت بأضافته هذا الأمر ..
DoCmd.GoToRecord , , acNewRec
قبل الأمر الأخير .. وصار النموذج في حالة التكرار يعود بك إلى نموذج جديد ...
وما زلت أريد أن يقوم البرنامج بعدم تكرار الاسم خلال مدة التكليف ..
يعطيك العافية والله يوفقك .
الأخ/ فتى الوادي
بعد أن قرأة توضيحك الأخير والذي أوردت فيه مثال على شخص اسمه احمد بدأت أفهم الموضوع بوضوح وقمت بتعديل الكود حتى لا يقبل أي شخص حتى ينتهي تكليفه أي من تاريخ بداية التكليف حتى نهايته وقمت بتجربة الكود أكثر من مرة ثم وضعت لك نسخ من القاعدة بعد هذا التعديل تجدها على الرابط التالي بنفس اسمها الأول 0
http://mypage.ayna.com/mrsalnet
وإليك الكود مع الشرح لمن أراد الإطلاع دون تحميل القاعدة وللمناقشة
1 Dim s As Variant
2 Dim w As Variant
3 Dim r As Variant
4 Dim d2 As Variant
5 s = DLast(" [Date1] ", "tbl1", "[Name]=[forms]![frmt]![txtName]")
6 w = DLast(" [Date2] ", "tbl1", "[Name]=[forms]![frmt]![txtName]")
7 r = DLookup("[Name]", "[tbl1]", "[Name ]=[forms]![frmt]![txtName]")
8 d2 = DLast(" [Date2] ", "tbl1", "[Name]=[forms]![frmt]![txtName]")
9 If Not IsNull® And [Forms]![frmt]![txtDate1] <= (d2) Then
10 MsgBox " ÇáÓíÏ/ " & [txtName] & " Êã ÊßáíÝå Ýí ãåãÉ Úãá æáã ÊäÊåí ÈÚÏ ", vbMsgBoxRight + vbInformation, "ÊäÈíå "
11 DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
12 DoCmd.GoToControl ("[txt1]")
13 End Ifشرح الكود:
أرقام الأسطر للشرح فقط وليست ضمن الكود0
1_4 : إعلان عن متغير ات تخزن قيم
5- متغير إعلن عنه مسبقاً يقوم بالبحث في الجدول عن بداية أخر تكليف موظف معين وتم ربط التاريخ بالاسم الذي يتم تسجيله على النموذج
6_متغير إعلن عنه مسبقاً يقوم بالبحث في الجدول عن نهاية أخر تكليف موظف معين وتم ربط التاريخ بالاسم الذي يتم تسجيله على النموذج
وهذين المتغيرين تم الإعلان عنهما لكي يعض بداية ونهاية التكليف في مربع الرسائل " Msgbox " بواسطتهما حتى يعرف مدخل البيانات بأن ذلك الموظف لا زال في التكليف0
7_متغير يخزن قيمة تعود بها الدالة " dlookup " بعد البحث في الجدول عن الاسم المسجل في النموذج وتعود بقيمة من إثنتين إما " Null " أو " Not IsNull وتخزن تلك القيم في المتغير للمقارنة 0
8_ متغير يخزن القيمة التي تعود بها الدالة " Dlast "وهي البحث عن أخر تاريخ تكليف للموظف في الجدول 0
9_10 : شرط وفيه إذا كان المتغير يحتوي على قيم أي عثر على شخص في الجول مطابق للأسم المسجل على النموذج وتاريخ بداية تكليف هذا الموظف المسجل على النموذج ولم يخزن بعد أصغر أو تساوي تاريخ نهاية تكليفة المخزنه مسبقاً في الجدول عند ذلك تظهر رسالة تخبر مدخل البيانات بأن هذا الموظف الذي ورد اسمه في مربع الرسائل لازال مكلف ولم ينتهي تكليفه بعد ويظهر أيظاً تاريخ بداية التكليف ونهايته في مربع الرسائل والذان سبق تخزينهما في المتغيرين " S " , " W " _
11_ أمر تراجع عن حفظ السجل إذا كان الموظف لا زال مكلف 0
12_ نقل التركيز من حقل تاريخ بداية التكليف على النموذج إلى حقل رقم الموظف0
13_ إنها الكود0
في الكود توجد رسالة مكتوبة بالعربي ولكن لللأسف الدي مشلة في الخطوط حيث أن العبارات المكتوبة بالعربي تكون بشكل غير مقروء0
هذا شرح الكود يا أخ فتى الوادي وقد أوردته هنا للمناقشة والفائدة للأخوان بالنسبة للتاريخين فلم أقم بإظهارهما في مربع الرسائل فعلى الأخ فتى الوادي أن يقوم بتضمين المتغيرين S_W فقط ضمن صندوق الرسائل0
هذا والحمد لله رب العالمين
ألحين تمام ... لكن ...:D
أضفت على الكود هذه الزيادة ...
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
DoCmd.GoToRecord , , acNewRec
حتى لا يبقى على ما أدخلنا من بيانات للموظف المكرر ..
ويعطيك ألف عافية .. وبارك الله فيك ونفع بك وبعلمك وزادك علماً ..
الخ فتى الوادي
اعتذر للتأخر لظروف السفر .
وحيث أن الأخ 5060 قد أجاب وأفاد جزاه الله خيراً ، إلا أنني لوعدي احببت المشاركة .
ضع الكود التالي في حدث قبل التحديث للنموذج :
Dim تاريخ_نهاية_التكليف_الأخير
Dim رقم_المسلسل_للتكليف_الأخير
' لم يسجل له تكليف نهائياً
If IsNull(DLookup("[اسم_المكلف]", "المكلفين")) Then Exit Sub
' مسجل له تكليف
' هل انتهى التكليف الأخير
تاريخ_نهاية_التكليف_الأخير = DLast("[نهاية التكليف]", "المكلفين", "[اسم_المكلف]='" & Me![اسم_المكلف] & "'")
رقم_المسلسل_للتكليف_الأخير = DLast("[مسلسل]", "المكلفين", "[اسم_المكلف]='" & Me![اسم_المكلف] & "'")
If Me![بداية التكليف] <= تاريخ_نهاية_التكليف_الأخير Then
If MsgBox("هذا التكليف داخل في التكليف السابق ." & vbCrLf & _
"والمنتهي بتاريخ " & Format(تاريخ_نهاية_التكليف_الأخير, "dd MMMM, yyyy") & _
vbCrLf & vbCrLf & "هل ترغب في حذف الحالي والرجوع للتكليف السابق ؟", vbQuestion _
+ vbMsgBoxRtlReading + vbMsgBoxRight + vbYesNo) = vbYes Then
Me.Undo
Me![مسلسل].SetFocus
DoCmd.FindRecord رقم_المسلسل_للتكليف_الأخير, acEntire, , acSearchAll, , acCurrent, True
Else
Cancel = -1
End If
End If
مع ملاحظة أن فهمي للسؤال أنه يوجد على النموذج مربعات نص مسلسل واسم_المكلف وبداية التكليف ونهاية التكليف وأما البقية فلا يهم وجودها .
وعند اختيار اسم من القائمة ثم تسجيل تاريخ بداية التكليف ثم نهايته وعند الانتقال للسجل التالي أو السابق يعمل الكود .
وللجميع التحية
هذا الموضوع مغلق.