اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

عيوب الحدث beforeupdate


الردود الموصى بها

السلام عليكم

أستخدم حدث  before update 

لمنع تكرار اسم مدرسة موجود سابقا

و بما أن جدول أسماء المدارس يشتمل على حقلين

الأول رقم المدرسة

و الثانى اسم المدرسة

فعند إضافة مدرسة موجودة سابقة

يعمل الحدث

لكن يتراكم بيانات فى حقل رقم المدرسة

بدون أسماء مدارس

يعنى أرقام فى الحقل الأساسى رقم المدرسة

بدون أسماء مدارس مقابلة لها فى حقل اسم المدرسة

فكيف يكون علاج ذلك

 

إذا لم يقبل إدخال اسم المدرسة

لا يسجل رقما فى حقل رقم المدرسة

أفادكم الله

الكود المستخدم فى حقل اسم المدرسة فى النموذج

Private Sub TelName_BeforeUpdate(Cancel As Integer)
If DCount("madrsa", "[tblmdaress]", "[madrsa]= '" & Me.TelName.Text & "'") > 0 Then
MsgBox "مدرسة موجودة مسبقا....", , "تنبيه"
Cancel = -1
Me.TelName.Undo
End If

End Sub

أستخدم قيمة افتراضية لحقل رقم المدرسة لتسهيل الإدخال

=DMax("[MadrsaId]";"tblmdaress")+1

 

رابط هذا التعليق
شارك

حسب فهمي لسؤالك 

واحتمال ان يكون فهمي لسؤالك بيكون غلط لكن
اكتب الكود في نموذج قبل تحديث بدلا من حقل قبل تحديث

هذا والله يعلم

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

 

النموذج اول ما يُفتح ، فإنه تلقائيا يعمل الرقم ، اي يعمل سجل جديد ،

وبعدين انت تستفسر عن المدرسة موجودة او لا:smile:

 

في اعتقادي عندك طريقتين لحل الموضوع:

1. وكما قال أخوي ابوخليل:

4 ساعات مضت, ابوخليل said:

اجعل سطر الترقيم ضمن الحدث

 

2. او في الجدول ، في اعدادات اسم المدرسة ، اجعل وجود الاسم شرطا في حفظ السجل:smile:

 

جعفر

  • Like 1
رابط هذا التعليق
شارك

الآن

نفذت الآتى

و أود التأكد من أن هذه أفضل طريقة

- الحقلان مطلوبان رقم و اسم المنطقة

كل الكود فى حدث قبل التحديث للنموذج

- إلغاء أزرار التنقل فلا يبقى أمام المستخدم إلا زر إغلاق أو إغلاق النموذج من أعلى "×"

الكود التالى

Private Sub Form_BeforeUpdate(Cancel As Integer)
If DCount("eqama", "[tbleqama]", "[eqama]= '" & Me.TelName.Text & "'") > 0 Then
MsgBox "محل إقامة موجود مسبقا....", , "تنبيه"
Me.Undo
Cancel = -1
Else
'الترقيم
Me.TelID = DMax("[eqamaid]", "tbleqama") + 1
End If
End Sub

أخيرا المرفق

و شكرا لتوجيهاتكم

منع التكرار.rar

تم تعديل بواسطه عبد الفتاح كيرة
  • Like 1
رابط هذا التعليق
شارك

اقتباس

نى أرقام فى الحقل الأساسى رقم المدرسة

بدون أسماء مدارس مقابلة لها

هناك عدة طرق ومنها :

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

- تسجيل البيانات بمربعات نص غير مرتبطة ثم استعلام اضافة  للسجل يعمل عند ضغط زر الحفظ.

 

اضافتي هذه للجملة المقتبسة فقط  وليست للموضوع كله

 

تم تعديل بواسطه أمير2008
  • Like 1
رابط هذا التعليق
شارك

3 دقائق مضت, أمير2008 said:

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

نعم

لكن منع حدوث ذلك من البداية

لا شك أنه أفضل

شكرا

  • Like 1
رابط هذا التعليق
شارك

14 ساعات مضت, عبد الفتاح كيرة said:

أستخدم قيمة افتراضية لحقل رقم المدرسة لتسهيل الإدخال


=DMax("[MadrsaId]";"tblmdaress")+1

 

القيمة الافتراضية للحقل يجب أن تكون بهذا النسق

Me.TelID.DefaultValue = DMax("[eqamaid]", "tbleqama") + 1

 

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

Private Sub Form_Current()
    If NewRecord Then
        Me.eqamaid.DefaultValue = DMax("[eqamaid]", "tbleqama") + 1
    End If
End Sub

ثالثا أن يكون حدث التحقق على مستوى الحقل وليس على مستوى النموذج

Private Sub eqama_BeforeUpdate(Cancel As Integer)
    If DCount("eqama", "[tbleqama]", "[eqama]= '" & Me.eqama & "'") > 0 Then
        MsgBox "محل إقامة موجود مسبقا....", , "تنبيه"
        Cancel = True
        Me.Undo
        
    End If

End Sub

إليكم التطبيق

منع التكرار.zip

  • Like 1
رابط هذا التعليق
شارك

بارك الله فيك

إجابتك أخى الفاضل

أشبه بطريقة قياسية

لمن يريد معرفة الطريقة الصحيحة

فى إجابتك 3 مرات يجب

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

طبعا القيمة الافتراضية ليست نفسها القيمة

القيمة تسجل

لكن القيمة الافتراضية مجرد اقتراح من أكسيس

 

بقى أن نعلم

سبب وضع الكود فى حدث الحالى

سبب وضع كود التحقق فى الحقل و ليس النموذج

مع أن الأخ شفان أوصى بعكس ذلك

 

وفقك الله و أعانك على الرد بإسهاب على أسئلتنا و أفادكم الله و زادكم علما

 

رابط هذا التعليق
شارك

33 دقائق مضت, أبو إبراهيم الغامدي said:

ثالثا أن يكون حدث التحقق على مستوى الحقل وليس على مستوى النموذج

ما الفرق بينهما ؟

22 دقائق مضت, عبد الفتاح كيرة said:

سبب وضع كود التحقق فى الحقل و ليس النموذج

مع أن الأخ شفان أوصى بعكس ذلك

خليني انا اوضح لماذا قلت على المستوى النموذج
حسب فهمي ليس هناك الفرق بينهما 
كلهما بيعمل بشكل ممتاز
لكن هناك من الافضل ان يعطي الحدث في النموذج قبل التحديث
1 / اذا كان لا نريد ان يكرر اكثر من الحقل اي مثلا :-
       عندك ثلاث حقل 
                    واحد هو مخصص للاسم
                     ثاني واحد مخصص لاسم الاب
                     ثالث واحد مخصص لاسم الجد
اذا الحدث يكون في نموذج والا راح تظهر رسائل لكل حقل على وحده عند تدخل البيانات
والا يجب ان تدخل البيانات على التوالي وبالخير اي عند اسم اجد راح تعطي الحدث
لذلك قبل ان يحفظ السجل من الافضل ان نوضع الحدث في نموذج قبل تحديث
2/ واذا نريد ان لا يحفظ السجل بشكل تلقائي او نريد ان ندخل البيانات في جميع الحقول
و ... الخ 
هذا والله يعلم

 

تم تعديل بواسطه Shivan Rekany
  • Like 1
رابط هذا التعليق
شارك

3 ساعات مضت, عبد الفتاح كيرة said:

فى إجابتك 3 مرات يجب

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

نعم العبارة فضة بعض الشيء.. والمقصود منها لفت الانتباه

نأتي للتعليل..

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

يمكن استخدام القيمة  الافتراضية كما فعلتُ في يجب الثانية 

أو وضعها في خصائص الحقل الحامل للقيمة الافتراضية؛ في النموذج أو الجدول أيضاً.

** السجل الحالي: هو السجل الذي يقع عليه المؤشر .. هذا السجل إما أن يكون جديداً، أو مغلقاً!

** السجل المحرر: هو السجل الذي بدأ للتو الكتابة فيه إما بالإدخال، أو التعديل! .. .. هنا يبرز الحدثان [قبل التحديث]، [بعد التحديث]..

** الحدث قبل التحديث ينقدح عند بدء انتقال المؤشر من (الحقل.. السجل.. بالتسلسل)

** الحدث بعد التحديث ينقدح بعد انتقال المؤشر من (الحقل.. السجل.. بالتسلسل)

أي إسناد للقيم في هذين الحدثين لا يتوقع ظهورهما إلا في الفترة بين بدء الانتقل وبعده .. ولهذا بالكاد تُرى القيم العائدة من ذلك الإسناد

 

أما لماذا على مستوى الحقل وليس على مستوى النموذج 

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

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

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

 

!! تنبيه.. الاستخدام التالي خطأ!

5 ساعات مضت, عبد الفتاح كيرة said:

Me.TelName.Text

والصيحيح أحد الصيغتين التاليتين

Me.TelName
Me.TelName.Value

 

  

تم تعديل بواسطه أبو إبراهيم الغامدي
رابط هذا التعليق
شارك

وفقك الله

وجزاك خيرا على هذه الإضاءة

كلامك و تطبيقك محل اعتبار و دراسة لمزيد من الاستفادة

هناك نوعان من المعلومات

معلومة تحل لك مشكلة

و معلومة تجنبك  الوقوع فى المشكلة

أرجو أن يتسع وقتك للتعليق على مشاركات الإخوة بلا اختصار

  • Like 1
رابط هذا التعليق
شارك

السلام عليكم

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

فيه استفسار استاذ ابو ابراهيم ومقتبس من مشاركة الاستاذ شيفان

6 ساعات مضت, Shivan Rekany said:

       عندك ثلاث حقل 
                    واحد هو مخصص للاسم
                     ثاني واحد مخصص لاسم الاب
                     ثالث واحد مخصص لاسم الجد

وحسب مرفق الاستاذ عبدالفتاح

لو حبينا يكون المنع مكون من حقلين وفي مثالنا رقم المدرسة واسم المدرسة وفي المثال اعلاه eqamaid,eqama

وحسب الحدث قبل التحديث ؟ كيف ستكون ؟

تحياتي

  • Like 1
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information