rudwan قام بنشر ديسمبر 8, 2003 قام بنشر ديسمبر 8, 2003 السلام عليكم لدي نموذج , أريد أن يرسل لي رسالة عند تعديل أي قيمة فيه يخبرني بأن قيمة الحقل [ ] قد تغيرت فهل تريد حفظ التعديلات أو لا . فكرت في حل ذلك باحدى طريقتين : أولا : أن أضع تعليمة لحدث on change لكل حقل بحيث عند تغيير أي قيمة فيه يطلب مني تأكيد حفظ التغير أم لا , و اذا لم يتم تأكيد الحفظ يعمل text.oldvalue و لكن هذه الطريقة ربما فيها ركاكة و تعقيد ثانيا : وضع التعليمة عند حدث after update للنموذج , و لكن في هذه الحالة أحتاج الى مايلي : 1-في حال عدم الرغبة في حفظ التعديل , هل التعليمة هي : record.undo 2-أريد أن يخبرني عن الحقل الذي تم تفيير قيمته , كيف ؟ 3-حدث after update يعمل أيضا في حالة اضافة سجل جديد , فكيف يمكن حصر اعطاء التعليمة بالتغيير فقط , حيث لم أجد حدث اسمه form_ change 1
ابراهيم - ابو ريان قام بنشر ديسمبر 9, 2003 قام بنشر ديسمبر 9, 2003 اخي الكريم في حدث after update على افتراض ان لديك حقل هو رقم الهاتف والحقل الذي يليه هو عنوان المشترك وتريد في حالة تغيير رقم الهاتف ان يعطيك رسالة تفيد بالتغيير فهل تريد حفظ التغييرات ام لا اذا اخترت نعم فان المؤشر سيتجه الى الحقل الذي يليه وهو عنوان المشترك واذا نقرت لا فان المؤشر سيعود مكانه في حقل رقم الهاتف محتفظا بالقيمة القديمة انسخ ثم الصق الكود التالي msg$ = "هل تريد تعديل رقم الهاتف بالفعل" Title = "تنبيه عن تعديل " If [رقم الهاتف].OldValue > 0 Then response = MsgBox(msg, 36, Title) If response = 6 Then DoCmd.GoToControl "عنوان المشترك" If response = 7 Then [رقم الهاتف] = [رقم الهاتف].OldValue Cancel = True
rudwan قام بنشر ديسمبر 9, 2003 الكاتب قام بنشر ديسمبر 9, 2003 شكرا لك على هذا الرد , و لكن توجد عدة ملاحظات : أولا : الكود المكتوب هو كود خاص بحقل معين , و أنا أريد كود عام لضبط التغييرات في أي حقل في النموذج . ثانيا : أظن أن هناك خطأ في الكود و هو أنه يجب وضع inputbox بدلا من msgbox ثالثا : الحدث يفترض أن يكون before update وليس after ubdate على كل حال قمت بالتجريب و توصلت الى الحل التالي : أولا قمت بعمل اجراء خاص في النموذج : private sub changed () Dim ctlTextbox As Control For Each ctlTextbox In Me.Controls If ctlTextbox.Value <> ctlTextbox.OldValue Then MsgBox ctlTextbox.Value End If Next ctlTextbox End Sub ثانيا : عند حدث بعد التعديل على النموذج Private Sub Form_BeforeUpdate(Cancel As Integer) Dim m As Integer Dim intnewrec As Integer intnewrec = Me.NewRecord If intnewrec = True Then MsgBox " you insert a new record " Else Changed m = InputBox(" save ") If m = 1 Then Cancel = True Me.Undo Else Cancel = False End If End If End Sub و لكن المشكلة أن البرنامج يرسل لي رسالة خطا بالنسبة للاجراء الخاص عند If ctlTextbox.Value <> ctlTextbox.OldValue Then بأنني أدخلت قيمة غير معروفة , و أنا بصدد المحاولة ثانية لمعرفة أين الخطأ
rudwan قام بنشر ديسمبر 10, 2003 الكاتب قام بنشر ديسمبر 10, 2003 الحمد لله , تم التوصل بفضل الله الى الحل الصحيح , و هذا هو الكود Private Sub Form_BeforeUpdate(Cancel As Integer) Dim m As Integer Dim ctl As Control Dim intnewrec As Integer intnewrec = Me.NewRecord If intnewrec = True Then MsgBox " you insert a new record " Else For Each ctl In Me.Controls If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then If ctl.OldValue <> ctl.Value Then m = InputBox(ctl.ControlName & " value already changed Enter your password to save ?") If m = 1 Then Cancel = false Else Cancel = true ctl.Undo End If End If End If Next ctl End If End Sub حيث في الأسطر من 4 الى سبعة اختبار فيما اذا كان السجل الذي تم تعديله هو سجل جديد أم لا , فاذا كان السجل جديد لا داعي لارسال رسالة عند تغيير أي حقل , فهذا يبدو عملا متعبا و عديم الفائدة , أما اذا كان السجل الذي تم تعديله مسجل سابقا , فانه يتم الانتقال في السطر 9 لعمل حلقة دورانية لفحص كافة عناصر التحكم ( شرط أن لا تكون عناوين أو صفحات أو غيرها ) فاذا وجد عنصرا قد تغيرت قيمته , يرسل رسالة تبين أن الحقل المسمى " " قد تغيرت قيمته , و يطالب بادخال كلمة سر للتأكد من صلاحية التعديل , فاذا كانت كلمة السر صحيحة يحفظ التعديلات , و الا يلغي التعديل و يعيد القيمة القديمة للعنصر و هكذا بالنسبة لبقية العناصر 1
ابن مسقط قام بنشر ديسمبر 12, 2003 قام بنشر ديسمبر 12, 2003 السلام عليكم ورحمة الله وبركاته أخي الكريم/ rudwan طريقة رائعة فعلاً لقد حاولت تطبيق الفكرة على قاعدة مرتبطة بقاعدة موجودة على سيرفير، فبقى المؤشر عالقاً بعد التحديث بدخال الحقل الذي أستخدمت معه الكود. فهل الكود يصلح للقواعد التي تعمل عبر الشبكة الداخلية ؟
rudwan قام بنشر ديسمبر 13, 2003 الكاتب قام بنشر ديسمبر 13, 2003 السلام عليكم أخي الكريم أنا لآسف للتأخر في الرد , و لكن النت عندي فقط في المكتب , أي اليوم فقط داومت و اطلعت على رسالتك بالنسبة لسؤالك , في الحقيقة أنا لم أشتغل قبل الآن على الشبكات , و لا أعرف بالضبط ما يمكن أن تكون المشكلة , هل في طريقة استدعاء الملفات , أي هل يجب تعريف العناصر بامتداداتها الكاملة من قاعدة البيانات أم ماذا ؟ أما عندي فالكود يعمل بشكل فعال جدا . على كل حال أترك الاجابة على هذا السؤال للسادة الاساتذة فهم أكثر خبرة و معرفة و شكرا .
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.