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

خطأ ما في كود الحذف


sandanet

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

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

أما بعد ..

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

هنالك مشكلة في كود الحذف ارجو الاطلاع عليه

 

تحياتي

New Microsoft Office Access Application.zip

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

عليكم السلام والرحمة 

جرب هذا السطر وقم بتغيير الحقل date الى مسمى اخر لأنه من الكلمات المحجوزة 

في المثال انا غيرته الى ddate 

DoCmd.RunSQL "DELETE leave.* FROM leave WHERE d  IN ( SELECT ddate FROM record)"

بالتوفيق

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

وجرب هذا الكود ايضا :rol:

 

CurrentDb.Execute ("DELETE DISTINCTROW leave.* FROM leave INNER JOIN record ON leave.d = record.Date")

 

 

8 دقائق مضت, سعيد صواب said:

عليكم السلام والرحمة 

جرب هذا السطر وقم بتغيير الحقل date الى مسمى اخر لأنه من الكلمات المحجوزة 

في المثال انا غيرته الى ddate 


DoCmd.RunSQL "DELETE leave.* FROM leave WHERE d  IN ( SELECT ddate FROM record)"

بالتوفيق

 

كلام صحيح ، وهذا ينطبق على الحقل name كذلك :rol:

ولكن للتخلص من هذه المشكلة ، ضع الحقل بين قوسين مربعين ، بهذه الطريقة يعرف الاكسس انه حقل :rol:

docmd.runsql "DELETE leave.* FROM leave WHERE d IN (SELECT [date] FROM record)"

 

جعفر

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

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

وجرب هذا الكود ايضا :rol:

 


CurrentDb.Execute ("DELETE DISTINCTROW leave.* FROM leave INNER JOIN record ON leave.d = record.Date")

 

جعفر

 

كلام صحيح ، وهذا ينطبق على الحقل name كذلك :rol:

ولكن للتخلص من هذه المشكلة ، ضع الحقل بين قوسين مربعين ، بهذه الطريقة يعرف الاكسس انه حقل :rol:


docmd.runsql "DELETE leave.* FROM leave WHERE d IN (SELECT [date] FROM record)"

 

جعفر

جزاك الله خير استاذ جعفر 

والأفضل ان نتخلص من المشكة من اساسها ولا نستخدم الكلمات المحجوزة .

شكرا 

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

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

1. بالنسبة لكود الأخ سعيد 

docmd.runsql "DELETE leave.* FROM leave WHERE d IN (SELECT [date] FROM record)"

كيف يتم اضافة شرط اخر مثلاً الاسم في الجدول الاول = الاسم في الجدول الثاني بالاضافة الى الشرط السابق؟

2. ماهو الفرق بين الكودين من الناحية العلمية (كود الاستاذ سعيد وكود الاستاذ جعفر) اي لماذا الاول يستخدم عبارة sql بينما الكود الثاني يستخدم 

CurrentDb.Execute

3. كيف يتم انشاء كود الاستاذ جعفر؟ اي من اين جائت عباة 

INNER JOIN

ارجو منكم توضيح تلك النقاط وبارك الله فيكم على مجهوداتكم الرائعة

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

وعليكم السلام :rol:

 

3. انا درايتي بـ SQL قليلة ، لذا دائما استعين بالاستعلام لعمل SQL لي :rol:  ،

هنا ترى كيف حصلت على الكود الاصل ، وسترى في النهاية كيفية إضافة شرط اخر مثلاً الاسم في الجدول الاول = الاسم في الجدول الثاني بالاضافة الى الشرط السابق:

330.gif.8fb8a231daf8cdda7a509f0835af7975

.

2. الطريقة الافضل لعمل الكود ، هو معرفة الخطأ الذي يمكن ان ينتج اذا كان في الكود خطأ ،

لذا docmd.runsql سيعطيك رسائل انذار ، ورسائل خطأ اذا وُجدت ،

ولما كل شئ يكون تمام ، فانت لا تريد المستخدم ان يرى هذه الرسائل ، لذا تطلب من الاكسس عدم إظهار هذه الرسائل:

docmd.setwarnings false

docmd.runsql

docmd.setwarnings true

 

بينما currentdb.execute تُنفذ الامر ، واذا في اخطاء ، فإنك لا تراها ، لذا يجب ان لا تستخدمها إلا بعد التأكد ان الكود يعمل كما يجب وبدون رسائل خطأ :rol:

 

1. الظاهر ان اخي سعيد بارع في SQL ، فاعطاك الحل باستعلام فرعي ،

وإضافة شرط جديد معناه إضافة استعلام فرعي آخر ، يعني عندك استعلامك الرئيسي واستعلامين:

330.1.gif.d90e37075f2869dab517c41af6c087

.

 

جعفر

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

حياك الله :rol:

 

وتكملة لما قلته:

في الكود ، فهناك الكثير من المبرمجين يستخدمون On Error Resume Next

وهذا معناه ، ان الكود سيواصل العمل عند حصوله على خطأ (وطبعا النتيجة قد تكون خطأ) ،

لذا ، وعند عمل الكود ، يجب ان نعرف رقم الخطأ ، ونصطاده ، ونطلب من الكود اعطاء بقية الاخطاء ، إن وُجدت :rol:

 مثل الكود التالي ، يصطاد الخطأ رقم 2501 فنحن لا نستطيع حفظ ملف ، اذا كانت نسخة اخرى منه بنفس الاسم مفتوحة ، فنعطي رسالة للمستخدم بإغلاق الملف ،

اما اذا لم توجد سجلات ، ورقم الخطأ هنا 3021 ، فنقول للكود ، لا تبالي ، وانتقل لتنفيذ السطر التالي من الكود ، وذلك بالامر Resume Next :

Private Sub cmd_rpt_pdf_close_Click()
On Error GoTo err_cmd_rpt_pdf_close_Click

    
    DoCmd.Hourglass True
    
	.......
    
    DoCmd.Hourglass False
    
Exit Sub
err_cmd_rpt_pdf_close_Click:

    If Err.Number = 2501 Then
        'pdf file is open
        MsgBox "رجاء اغلاق ملف pdf" & vbCrLf & _
               "Please close the PDF file"

    elseif err.number=3021 then
        'لا توجد سجلات ، واصل العمل
         Resume Next

    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If
    
End Sub

.

طيب السؤال هنا ، وكيف اعرف رقم الخطأ ؟

الاكسس يعطيك رسالة خطأ ، وفيها رقم الخطأ ، هكذا:

IC314066.jpg

 

او

attachment.php?attachmentid=109743&d=139

.

ولكن هناك من الاكواد ، نعرف انه سيعطينا خطأ معين ، ولسنا بحاجة الى اصطياده ، ونعرف انه لن يكون هناك اي نوع آخر من الاخطاء ، فنستعمل On Error Resume Next :rol:

 

 

جعفر

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

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