اذهب الي المحتوي
أوفيسنا

مساعدة في كود الخطا 2137


إذهب إلى أفضل إجابة Solved by kkhalifa1960,

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

السبلم عليكم

لدي هذا الكود للبحث داخل النموذج

DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True

المشكلة اذا لم يكن هناك بيانات في النموذج تظهر لي رسالة بالخطا 2137

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

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

17 دقائق مضت, ازهر عبد العزيز said:

السبلم عليكم

لدي هذا الكود للبحث داخل النموذج

DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True

المشكلة اذا لم يكن هناك بيانات في النموذج تظهر لي رسالة بالخطا 2137

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

ممكن مرفق من قاعدتك لو تكرمت ؟

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

9 دقائق مضت, kkhalifa1960 said:

ضع أول سطر (On Error Resume Next)

طبعا سوف يتم تفادى المشكلة باستخدام هذا السطر 

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

لذلك الافضل استخدام  ErrorHandler ولذلك طلبت المرفق 

وعلى كل حال handler syntax error يكون بالشكل الاتى

   On Error GoTo ErrorHandler
   ' Insert code that might generate an error here
   Exit Sub or Exit Function
ErrorHandler:
   ' Insert code to handle the error here
   Resume Next

 

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

23 دقائق مضت, ابو جودي said:

طبعا سوف يتم تفادى المشكلة باستخدام هذا السطر 

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

لذلك الافضل استخدام  ErrorHandler ولذلك طلبت المرفق 

وعلى كل حال handler syntax error يكون بالشكل الاتى

جزيل الشكر للاستاذ المبدع @ابو جودي 

 

 

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

4 دقائق مضت, ازهر عبد العزيز said:

جزيل الشكر  @ابو جودي 

الشكر والفضل لله سبحانه وتعالى ثم لاساذتى الكرام الذين اتعلم على ايديهم.. جزاكم الله خيرا:fff:

ان تعذر عليكم تطبيق كود تصيد الأخطاء ضع مرفقكم اخى الحبيب ليتم التعديل بكتابة الكود المناسب

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

السلام عليكم 🙂

ومال سرعة 🙂

 

on error goto err_Handler

DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True

..

Exit_Handler:

Exit sub
err_Handler:

	if err.number=2137 then
		msgbox "يا رجال حست وحست وما لقيت بو تدور عليه"
		resume next
	else
		msgbox err.number & vbcrlf & err.description
		resume Exit_Handler
	endif

 

جعفر

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

بارك الله فى استاذى الجليل ومعلمى القدير و والدى الحبيب الاستاذ @jjafferr:fff:
انا وضعت بناء الكود اجمالا ومعلمى الجليل وضعه تفصيلا على تلك الحالة خصيصا

وبناء الكود خصيصا لتلك الحالة يمكن استخدامة بهذا الشكل كذلك باستخدام Select Case لانى احب استخدامها اكثر من استخدام IF :biggrin:

On Error GoTo ErrorHandler
   
  DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True

ExitHandler:
   Exit Sub
ErrorHandler:

  Select Case Err.Number
    Case Is = 2137
    MsgBox "يا رجال حست وحست وما لقيت بو تدور عليه"
    Resume Next
  Case Else
    MsgBox "Error Number : " & Err.Number & vbNewLine & "Error Description : " & Err.Description
    Resume ExitHandler
  End Select

 

طبعا تستخدم 

Exit Function

أو 

Exit Sub

حسب الكود 

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

2 دقائق مضت, jjafferr said:

واقعا ، المحترفين يستخدمون Select case 🙂

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

41 دقائق مضت, jjafferr said:
		msgbox "يا رجال حست وحست وما لقيت بو تدور عليه"

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

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

1 ساعه مضت, jjafferr said:
		msgbox "يا رجال حست وحست وما لقيت بو تدور عليه"

اعتقد ان هذا الخطأ يكون في حالة عدم وجود بيانات وليس بسبب عدم وجود ما يوافق نتيجة البحث

لكون اسلوب عمل الامر FindRecord لايعود برسالة في حالة وجود او عدم وجود قيمة في السجلات تطابق ماتم البحث عنه

وتظهر عادة في

  • عدم وجود بيانات في الجدول مصدر النموذج
  • في حالة اننا غيرنا في خصائص النموذج الى ادخال بيانات : نعم
  • في حالة مصدر البيانات استعلام بمعيار غير متوفر
  • في حالة تنفيذ الامر بعد تنفيذ الفلترة في حالة عدم توفر بيانات توافق معيار الفلتر ونفذنا الامر FindRecord قبل ان نلغي الفلترة
  • في حالة فتح النموذج في وضع اضافة بيانات ⬇️
DoCmd.OpenForm "form_name", , , , acFormAdd

ربما تكون هذه ابرز حالات ظهور الخطا رقم 2137 مع الامر FindRecord والله اعلم

مع تأييدي لرأي الاساتذه جعفر ومحمد

تحياتي

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

مع كبيرنا الاستاذ jjafferr

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

استخدم الكود

Me.J من حقل تجميع =count("*") 

dim j as string  or long

j = me. j. value

if j=0  then

msgbox "اذا تستعمل رسالة عند خطأ تكن فريده اذا كان اكثر من جدول في نموذج..   زود 1مثال"  ،!، "" 

On Error GoTo ErrorHandler1
   

حتى لا تتضارب الاخطاء ببعض اظن ان نادر استخدام عند الخطأ حسب الغرض

exit sub

else

DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True

end if 

 

 

 

من حقل تجميع
Me.J =count("*") 

dim j as string  or long

j = me.j.value

if j=0  then

msgbox "اذا تستعمل رسالة عند خطأ تكن فريده اذا كان اكثر من جدول في نموذج..   زود 1مثال"  ،!، "" 

'On Error GoTo ErrorHandler1   حتى لا تتضارب الاخطاء ببعض اظن ان نادر استخدام عند الخطأ حسب الغرض

exit sub

else

DoCmd.FindRecord Me.booknamex, acEntire, False, , True, acCurrent, True
end if
تم تعديل بواسطه jjafferr
لتنسيق الكود: استعمال <> القائمة ، ووضع الكود في نافذته
  • Thanks 2
رابط هذا التعليق
شارك

السلام عليكم اخي Ezril 🙂

ومرحبا بك بيننا مرة اخرى 🙂

للإستفادة من المنتدى ، رجاء قراءة قوانين المنتدى: اضغط هنـــــــــامن فضلك لقراءة القواعد كاملة

 

ورجاء ، عند وضع كود ، اتبع الخطوات التالية ، حتى يكون الكود مقروء بطريقة صحيحة :

00.z_0038_Forum_Code_Formating.jpg.526adbc5aab3c9fe7fb478ed82190106.jpg

.

ثم الصق الكود في النافذة التالية

00.Code_02.jpg.b3f719d151e854867b51734f3e19018f.jpg

.

جعفر

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

أنا ضد المفاضلة بين:
On Error Resume Next
و
On Error GoTo

 

وضد المفاضلة بين:
If
و
Select Case

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

تذكرت أن هناك فرق السرعة لصالح  Select Case عند تعدد القيم (من نوع واحد) وكثرة الأحتمالات حيث لا يتم اختبار القيم السابقة بل يكون الاختيار للقيمة المطلوبة مباشرة بعكس الـ If فهي ستعمل اختبارات للخيارات التي تسبق القيمة المطلوبة وربما للقيم جميعها (تحتاج إلى دراسة).

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

17 دقائق مضت, AbuuAhmed said:

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

اتفق معك ان هناك حالات نكون مجبرين على اختيار محدد ولكن البعض يعتقد ان On Error Resume Next حل لكل رسالة خطا

فتجد ان البعض يستخدمه دون معرف سبب الخطا ودون ان يكلف نفسه عناء البحث عن السبب

في 16‏/1‏/2023 at 18:42, ابو جودي said:

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

 

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

16 دقائق مضت, jjafferr said:

والامر iif هو الذي يختبر جميع قيم الامر ، وليس if

أنا أقصد عبارة if وليس دالة IIF

 

10 دقائق مضت, مبرمج متقاعد said:

فتجد ان البعض يستخدمه دون معرف سبب الخطا ودون ان يكلف نفسه عناء البحث عن السبب

هذه مشكلة البعض 🙂 من غير الخبراء/المحترفين ولكن من يعلم التعامل معهما سوف يستعمل Resume Next أكثر فأكثر الأحيان لا يهم نوع الخطأ كثر ما يهم أن هناك خطأ أو لا 
وفي حالة معرفة التفاصيل وعمل معالجة لها وإعطاء رسائل بها فبالتأكيد يفضل استخدام GoTo.  مع أن Resume Next تستطيع القيام بهذه المهمة أحيانا.

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

عملت دراسة لسلوك If و Case
وظهر لي أن الإثنين يقومان باختبار/فحص القيم/الخيارات من البداية حتى القيمة المطلوبة.

وهذه أول مرة أختبر فيها هذا الأمر في الـ vba ولكن كنت قد عملت هذه التجربة في لغة أخرى قديمة وكانت كما قلت لكم سابقا أن استخدام Case كان لا يعمل فحص من البداية بل يذهب مباشرة للقيمة المطلوبة.

للإختبار لا تغطوا Run بل استخدموا زر F8 واستمروا بالضغط المتقطع حتى النهاية.

If_and_Case_01.accdb

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

هذا موضوع به مقارنة عبارة If مع عبارة switch في لغة C وهو نفس التعبير في بعض اللغات مثل Case/which/when
اللغة التي كنت استخدمها تسلك نفس سلوك لغة سي.
في الرد الأول فكرة الوصول السريع والقفز مباشرة للقيمة المطلوبة.
.net - Is there any significant difference between using if/else and switch-case in C#? - Stack Overflow

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

17 ساعات مضت, AbuuAhmed said:

أنا ضد المفاضلة بين:
On Error Resume Next
و
On Error GoTo

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

If Fbookmain.Form.RecordsetClone.RecordCount = 0 Then

 

 

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

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

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

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information