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

رسالة تفيد بتكرار رقم الموظف في نموذج فرعي

بدأه أبو شادي في 15 سبتمبر 2009 · 12 رد · 2,081 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

جميع الاخوان والاخوات

السلام عليكم وكل عام وانتم بخير

لدينا جدول (EMPLOYEES) ونموذج له (EMPLOY)

نموذج (MAIN) مبني ايضا على نفس الجدول وبه نموذج فرعي

وقد تم عمل زر أمر عند الضغط عليه يفتح النموذج (EMPLOY )

وتم عمل زر امر اخر داخل النموذج الرئيسي (MAIN) يفتح نفس النموذج (EMPLOY) ولكن علي سجل جديد اي اضافة سجل جديد

المطلوب

عند اضافة رقم الموظف(TXTCOD) في النموذج الفرعي المفتوح علي سجل خالي (جديد) وكان موجود مسبقا ( مكرر) تظهر رسالة بان الرقم موجود مسبقا ويظل التركيز على رقم الموظف لاينتقل للحقل الذي يليه حتي يتم ادخال رقم جديد غير مكرر

وان امكن عند ظهور الرسالة التي تفيد بتكرار الرقم ان يذكر اسم الموظف الذي كرر رقمه او يذكر بان الرقم مكرر فقط

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

بارك الله فيكم في هذه الأيام المباركة والعشرة الاخيرة من رمضان

EMPLOYEES.rar

#2

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

أخي الكريم (أبو شادي)...

تفضل أخي، كل ما تمت إضافته هو هذا الكود في النموذج EMPLOY:

Private Sub TXTCOD_BeforeUpdate(Cancel As Integer)
	Dim strName As String

	strName = Nz(DLookup("txtName", "EMPLOYEES", "txtCod = " & Nz(TXTCOD, 0)), "-")
	If strName <> "-" Then
		MsgBox "سبق إدخال هذا الرقم للموظف" & strName, vbExclamation, "إدخال مكرر"
		TXTCOD.SelStart = 0
		TXTCOD.SelLength = Len(TXTCOD.Text)
		Cancel = True
	End If
End Sub

والفكرة هي مجرد استخدام الدالة Lookup للتأكد من عدم وجود الرقم من قبل في جدول الموظفين في حدث (قبل التعديل) للعنصر (رقم الموظف)... تعيين المعامل Cancel للقيمة True في هذا الحدث تعني عدم القيام بالتعديل... هناك أيضاً سطران فقط لتظليل الرقم الخطأ حتى لا يضطر المستخدم لمسح القيمة المدخلة ويتمكن من كتابة المحاولة الثانية مباشرة...

والله أعلم

EMPLOYEES.rar

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 15 سبتمبر 2009 في 17:29

#3

بارك الله فيك خبيرنا الغالي

حلولك دائماً مميزة ورائعة ... جعل الله ما تقدمه في موازين حسناتك وزادك من علمه وفضله

#4

استاذنا الجميل / أحمد مبارك فعلا مبارك وبارك الله فيك - وكل عام وانت بكل خير

ماشاء الله ولا حول ولا قوة الا بالله حل فوق الممتاز مع الشرح

خبير بمعني الكلمة جعله الله في ميزان حسانتك في هذه الايام المباركة يامبارك

شوية استفسارات صغيرة لكي تتم الاستفادة اذا سمحت لي اخي / احمد

1- كيف يمكن فتح النموذج الفرعي "EMPLOY" (الخاص بالسجل الجديد) وعند الفتح يكون التركيز على حقل " TXTCOD" جربت الكود SetFocus ولم تنجح معي

2- ما معني هذه الاكواد TXTCOD.SelStart = 0

TXTCOD.SelLength

3- ادخل رقم كود جديد لموظف جديد وليكن رقم (5) مثلا ولم تكمل باقي البيانات مثل TXTNAME - TXTJOB- TXTNA

ثم اغلق وافتح تاني وضع نفس رقم الكود (5) تلاحظ لم تظهر الرسالة اي ان لاتظهر الرسالة الا اذا كانت البيانات مكتملة خصوصا TXTNAME

اسف للاطالة لا اترك استاذ مثلك إلا واستفيد منه جعلكم الله خير عون لنا

اتوقع لك الاشراف قريبا وهذا ليس بكثير لك

معلش انتهز هذه الفرصة لأقول لاستاذي والذي استفد منه الكثير الاستاذ / يوسف احمد واقول له حياك الله وكل عام وانت بخير واشكرك على مداخلتك التي تحمل كل انواع الحب والتشجيع والعقل والتواضع

كل عام وجميع الاخوة والاخوات بخير

لكم مني كل احترام وتقدير

#5

الأستاذ الفاضل يوسف أحمد:

اقتباس
واشكرك على مداخلتك التي تحمل كل انواع الحب والتشجيع والعقل والتواضع

أما بعد،

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

اقتباس
1- كيف يمكن فتح النموذج الفرعي "EMPLOY" (الخاص بالسجل الجديد) وعند الفتح يكون التركيز على حقل " TXTCOD" جربت الكود SetFocus ولم تنجح معي

استخدم أخي الكود التالي:

Me.FRM1.SetFocus

فيصبح الكود في حدث زر إضافة موظف جديد كالتالي:

FRM1.SourceObject = "EMPLOY"
DoCmd.GoToRecord , , acNewRec
Me.FRM1.SetFocus

اقتباس
2- ما معني هذه الاكواد TXTCOD.SelStart = 0

TXTCOD.SelLength = Len(TXTCOD.Text)

هذا هو الكود المسؤول عن تظليل رقم الموظف بعد اكتشاف تكراره. لاحظ أن رقم الموظف يصبح محدداً (مظللاً) بعد ظهور الرسالة التي تخبر المستخدم بتكرار الرقم. يستخدم الكود خاصيتين من خصائص مربع النص: واحدة تحدد بداية التظليل، والثانية تحدد طول التظليل، كأنك تسحب بالفارة وأنت تضغط على الزر الأيسر، فتبدأ من نقطة وتسحب بمسافة معينة (عدد معين من الحروف). الخاصية الأولى SelStart هي اختصار لـ Selection Start أي بداية التحديد (التظليل)، وجعلناها صفراً ليبدأ التحديد من بداية النص في مربع النص. الخاصية الثانية هي SelLength اختصار لـ Selection Length أي طول التحديد (التظليل)، وجعلناها مساوية لطول النص في مربع النص، وهذا يعني أننا نريد تظليل كامل النص.

اقتباس
3- ادخل رقم كود جديد لموظف جديد وليكن رقم (5) مثلا ولم تكمل باقي البيانات مثل TXTNAME - TXTJOB- TXTNA

ثم اغلق وافتح تاني وضع نفس رقم الكود (5) تلاحظ لم تظهر الرسالة اي ان لاتظهر الرسالة الا اذا كانت البيانات مكتملة خصوصا TXTNAME

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

Private Sub TXTCOD_BeforeUpdate(Cancel As Integer)
	If Nz(DLookup("TXTCOD", "EMPLOYEES", "txtCod = " & Nz(TXTCOD, 0)), 0) > 0 Then
		MsgBox "سبق إدخال هذا الرقم للموظف: " & Nz(DLookup("txtName", "EMPLOYEES", "txtCod = " & Nz(TXTCOD, 0)), "لا أحد"), vbExclamation, "إدخال مكرر"
		TXTCOD.SelStart = 0
		TXTCOD.SelLength = Len(TXTCOD.Text)
		Cancel = True
	End If
End Sub

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

#6

ما شاء الله .. بارك الله فيك أخونا أحمد مبارك الحيقى.

حبيت أسجل بس إنى قاعد فى الديسك بتاعى فى الصف الأمامى .. بالتحديد فى الديسك المواجه لطاولة المعلم تماماً.

تحياتى

محمد ندا

تم تعديل هذه المشاركة بواسطة Mohamed Nada في 16 سبتمبر 2009 في 03:02

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#7

اخي الفاضل والخبير / احمد مبارك

حياك الله وجزاك الله كل خير علي الشرح والتوضيح الكامل هذا

تم عمل اللازم وكل شئ الأن تمام التمام

كما اني عند قولي ومصر عليه بانك فعلا خبير

جعله في ميزان حسناتك ان شاء الله

اخي وعمنا واستاذنا / محمد ندا

كل عام وانت بخير

سوف اسحب ديسكي واجلس معك في الصف الامامي لان فعلا هؤلاء الاستاتذه يلزمنا الجلوس امامهم حتي لا يفوتنا اي معلومة

#8

بارك الله فيك أخى أبو شادى .. وكل عام وأنت بألف خير وكل أخواننا وأساتذتنا.

الديسك جنبى واسع ويسع كثير من الأخوة فتفضل ولا داعى لسحب ديسك جديد :) :)

تحياتى

محمد ندا

... بقمة السعادة .. أعود بإذن الله لصحبتكم الرائعة قريباً ...

#9

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

بارك الله فيكم وجزاكم الله عنا خير الجزاء وجعلها الله لكم فى موازين حسناتكم وان ينفعكم بعلمكم وتمنياتى لكم وللجميع بالتوفيق ودوام النجاح

حاولت استخدام هذا الكود وبعد عدة محاولات لم افلح الى ان اكتشفت فرق واحد وهو ان حقل التكست كود فى هذا الشرح خصائصه رقم وعندى خصائصه نص فما هو التغيير المطلوب ليعمل معى

#10

بارك الله فيكم وجعله في موازين حسناتكم هل ينفع على النموذج فقط دون الجدول علماً أن للنموذج الرئيسي جدول والفرعي جدول آخر وأنا أريد معرفة التكرار في النموذج الفرعي فقط

#13

هذا رد المشرفه زهره بارك الله فيها وجعله الله فى موازين حسناتها

فيما إذا كان حقل التكست كود المشروح عليه حقل نصى

zahrah كتب:

اذا كان الحقل txtCod رقمي كما في هذا الكود نضع له علامة اقتباس واحده بهذا الشكل "

Private Sub TXTCOD_BeforeUpdate(Cancel As Integer)
        If Nz(DLookup("TXTCOD", "EMPLOYEES", "txtCod = " & Nz(TXTCOD, 0)), 0) > 0 Then
                MsgBox "سبق إدخال هذا الرقم للموظف: " & Nz(DLookup("txtName", "EMPLOYEES", "txtCod = " & Nz(TXTCOD, 0)), "لا أحد"), vbExclamation, "إدخال مكرر"
                TXTCOD.SelStart = 0
                TXTCOD.SelLength = Len(TXTCOD.Text)
                Cancel = True
        End If
End Sub

اما اذا كان الحقل نصي فنستخدم له علامة اقتباس بهذا الشكل "'" ليصبح الكود بعد التعديل الى حقل نصي بهذه الطريقة

Private Sub TXTCOD_BeforeUpdate(Cancel As Integer)
        If Nz(DLookup("TXTCOD", "EMPLOYEES", "txtCod = '" & Nz([TXTCOD] & "'", 0)), 0) > 0 Then
                MsgBox "سبق إدخال هذا الرقم للموظف: " & Nz(DLookup("txtName", "EMPLOYEES", "txtCod = '" & Nz([TXTCOD] & "'", 0)), "لا أحد"), vbExclamation, "إدخال مكرر"
                TXTCOD.SelStart = 0
                TXTCOD.SelLength = Len(TXTCOD.Text)
                Cancel = True
        End If
End Sub

بالتوفيق

تمنياتى للجميع بالتوفيق

تم تعديل هذه المشاركة بواسطة طالب علم مبتدىء في 22 نوفمبر 2011 في 21:50

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