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

عاجل ما الغلط في عدم التكرار لسجل

مغلق
بدأه samislman في 1 يونيو 2007 · 4 رد · 567 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوة الكرام

قمت بتصميم قاعدة بيانات صغيرة مكونه من جدول واحد به 4 حقول

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

وضعت في حدث عند الخروج لهذا الحقل الحدث التالي

Private Sub txtNum_Exit(Cancel As Integer)
 Dim R As Variant
	R = DCount("[lc]", "tabstc", "[lc]=[forms]![formstcadd]![txtNum]")
	Select Case R
		Case Is >= 1
			MsgBox "ÇáÑÞã ãßÑÑ ", vbMsgBoxRight + vbCritical, ""

			Me.txtNum = ""
			Me![txtNum].SetFocus
			Cancel = -1
	End Select

	Exit Sub
	DoCmd.Close

End Sub

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

المطلوب / عدم تغيير اي قيمة لهذا السجل بما ان الحقل الاول مكرر

stc1.rar

تم تعديل هذه المشاركة بواسطة samislman في 1 يونيو 2007 في 17:21

#2

أخي العزيز ... السلام عليكم ورحمة الله وبركاته

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

أخيك / كمال النحال

stc1_2007.rar

[يمين]

إذا كـان تـرك الـدين يعــنــي تقــدمــاً

فـيا نفــس مـوتــي قبــل أن تتقـدمــي

[/يمين]

#3

سلام

أهلا سامي

!. مما يدل على وعيك ونباهتك ومستقبلك؛ أنك بدأت تسأل عن الخطأ!!! ولم تسأل عن الحل!!!

.. وهذا في نظري من أهم مزايا المبرمج الناجح. تحيتي لك.

؟. أين الخطأ ..

في الشفرة المرفقة من وجهة نظري أخطاء كثيرة سوف أتناولها بالتسلسل السطري للشفرة مع شي من البسط بيانها كالتالي:

رقم السطر:

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

3. من المعروف أن الدوال التجميعية تقوم بتجميع جميع بيانات المصدر (الجدول) وليس (النموذج) بما في ذلك السجل المفتوح حيث تقوم الدالة بغلق السجل وعده مع باقي السجلات!!!

- المشكلة هنا وضعك الدالة في آخر حقل أو قل بعد عدة حقول قامت الدالة بإغلاق السجل عليها (تخزينها في السجل) وبناء عليه ظهرت في السجل حتي مع وجود التنبيه !!!!!!

- الأفضل استخدام دالة لا تقوم بالتجميع مثل DLookup

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

8. هذا الإجراء يقوم بمسح بيانات الحقل الذي أطلق منه حدث إجراء الفحص ومع هذا له قيمة غير ظاهرة طولها (بت واحد) يعرف بالفحص أو ظهور الظل في الحقل عند التركيز عليه

10.9. هذا الإجراء ينفع في إبطال الحدث وإعادة التركيز إلى الحقل. لكن لا يؤثر على البيانات

13. هذا الإجراء يقوم بإغلاق النموذج. وهذا الإجراء يقع معه إجراء تحديث السجلات. ومعناه أنك طلبت تأكيد حفظ البيانات!!!!

- هذا ما تيسر لى بيانة. والتعديل على المرفق جاري العمل عليه وسأرفقة لاحقا

أتمنى لك التوفيق

سلام

القحم

#4
kamal alnahhal كتب:
أخي العزيز ... السلام عليكم ورحمة الله وبركاته

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

أخيك / كمال النحال

لك كل الشكر والتقدير اخي الفاضل على مساعدتك فجزاك الله خير

مشكلتي في تعديلك الحقل LC انا مجبر بارقام معينة لا يشترط فيها التسلسل رغم انك كما ترى الارقام الموجودة حاليا متسلسلة

كما ان لو اضاف المستخدم رقم مكرر وطلبنا الحفظ تظهر رسالة خطاء انه لايمكن الذهاب للسجل المحدد

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

#5
Gaham كتب:
سلام

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

أهلا سامي

اهلا فيك يا غالي

!. مما يدل على وعيك ونباهتك ومستقبلك؛ أنك بدأت تسأل عن الخطأ!!! ولم تسأل عن الحل!!!

.. وهذا في نظري من أهم مزايا المبرمج الناجح. تحيتي لك.

كلمات جعلتني افكر كثيرا في ردك وان احاول مرة اخرى ان اجد الحل الصحيح

؟. أين الخطأ ..

في الشفرة المرفقة من وجهة نظري أخطاء كثيرة سوف أتناولها بالتسلسل السطري للشفرة مع شي من البسط بيانها كالتالي:

رقم السطر:

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

3. من المعروف أن الدوال التجميعية تقوم بتجميع جميع بيانات المصدر (الجدول) وليس (النموذج) بما في ذلك السجل المفتوح حيث تقوم الدالة بغلق السجل وعده مع باقي السجلات!!!

- المشكلة هنا وضعك الدالة في آخر حقل أو قل بعد عدة حقول قامت الدالة بإغلاق السجل عليها (تخزينها في السجل) وبناء عليه ظهرت في السجل حتي مع وجود التنبيه !!!!!!

- الأفضل استخدام دالة لا تقوم بالتجميع مثل DLookup

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

8. هذا الإجراء يقوم بمسح بيانات الحقل الذي أطلق منه حدث إجراء الفحص ومع هذا له قيمة غير ظاهرة طولها (بت واحد) يعرف بالفحص أو ظهور الظل في الحقل عند التركيز عليه

10.9. هذا الإجراء ينفع في إبطال الحدث وإعادة التركيز إلى الحقل. لكن لا يؤثر على البيانات

13. هذا الإجراء يقوم بإغلاق النموذج. وهذا الإجراء يقع معه إجراء تحديث السجلات. ومعناه أنك طلبت تأكيد حفظ البيانات!!!!

- هذا ما تيسر لى بيانة. والتعديل على المرفق جاري العمل عليه وسأرفقة لاحقا

أتمنى لك التوفيق

سلام

القحم

من خلال ما ذكرت انت سابقا بدلت الشفرة في حدث قبل التحديث إلى

Private Sub txtNum_BeforeUpdate(Cancel As Integer)
 Dim R As Variant
	R = DCount("[lc]", "tabstc", "[lc]=[forms]![formstcadd]![txtNum]")
	Select Case R
		Case Is >= 1
			MsgBox "ÇáÑÞã ãßÑÑ ", vbMsgBoxRight + vbCritical, ""
			DoCmd.Close
			DoCmd.OpenForm "FORMSTCADD"
	End Select
	Exit Sub
End Sub

وعمل معاي 100/100 كما اريد

ما رائك فيما استطعت ان اقوم به والفضل يعود لله اولا ثم لك

بيض الله وجهك يا القحم

تم تعديل هذه المشاركة بواسطة samislman في 2 يونيو 2007 في 02:29

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

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