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

كيف أعرف الخطأ العائد من Docmd.RunSQL في الكود

مغلق
بدأه aroma_kt في 1 ديسمبر 2005 · 9 رد · 1,417 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أرجو مساعدتكم في الآتي:

قمت بعمل فورم ولم أعمل له bind مع أي جدول

هذا الفورم الغاية منه إضافة داتا على جدول معين

طريقة الإضافة التي أتبعها هي بواسطة Docmd.RunSQL

حيث أمرر تعليمة SQL:

INSERT INTO table_name (fld1, fld2) VALUES ('val1', 'val2');

لكن المشكلة إذا فشلت RunSQL لسبب ما في إلحاق البيانات

مثلاً أن السجل لا يمكن إلحاقه لأنه سوف يتسبب بسجلات متكررة (وهذا بالطبع غير مسموح إذا كان هناك مفتاح أساسي)

لهذا أود معرفة رقم وتفاصيل الخطأ (Error Description) الذي حصل مع RunSQL

لأنني أود إعلام المستخدم بتفاصيل الخطأ بينما كل ما يعرضه أكسيس هو الرسالة التالية:

01_12_05_12_59_16_1133427556err_from_runsql.gif

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

أرجو أن تكون الفكرة واضحة

وشكراً..

#2

أما من حل؟

#3

أين المشرفون؟ أين الخبراء؟

#4

أخي الكريم

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

ثانيا ، بخصوص المستخدم اذا اردت ان تفيده بنوع الخطأ فيجب ان تستخدم خاصية err.no أو err.descriptio عندها يمكن معرفة الخطأ عن طريق برمجة رقم الخطأ ومعناه .

تحياتي

#5

أرجو أن تقرأ مطلبي بتروي

يبدو لي أنه ليس هنالك حل لأنه حتى الآن لم أجد الجواب الشافي من أحد

تم تعديل هذه المشاركة بواسطة aroma_kt في 6 ديسمبر 2005 في 16:34

#6

أ×ي الكريم

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

بالنسبة لموضوعك اعتقد انه سهل للغاية إذا ما تم تبني الأفكار التالية :

(1) يبدا التشييك من البداية من لحظة ادخال البيانات بالنموذج ، كعدم ترك الحقل فارغا أو يخضع لقيمة معينة وهذا متوفر ، اذ تقوم بعمل حدث قبل التحديث عن كل ما تريده وكتابة جملة cancel = true أو cancel = -1 حتى يتم ادخال البيانات الصحيحية.

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

رسائل الخطأ التلقائية الصادرة من الاكسس يمكن الغائها عن طريق وضع كود وهو set warning = false عندها يمكن اظهار الرسائل كما تريد وليس عن طريق الاكسس .

3 - يبدو لي أن الموضوع سهل الا اذا لم افهم مرة أخرى ما تريده بالضبط

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

تحياتي

#7

أشكرك على اهتمامك فأنت الوحيد الذي أبديت تعاطفاً معي ومع موضوعي

لكن يبدو أنك لم تنتبه أنني ذكرت أن الفورم غير مرتبطة Unbound وبالتالي خانات النص غير مرتبطة أيضاً

ومع هذا عملية التأكد من أن البيانات المطلوب إدخالها قد أدخلت فعلاً ليست بمشكلة بالنسبة لي

إليك هذا الملف حتى يتوضح ما أريد عمله

المطلوب عند نقر زر Add

أن تظهر رسالة فيها رقم الخطأ ووصفه (Description)

بحيث توضح هذه الرسالة للمستخدم لماذا لم تنجح عملية الإلحاق (في حال فشلها)

أما إذا لم تفشل تظهر رسالة بأن السجل قد تم إلحاقه بنجاح

لكن مايحدث هو الآتي:

إن كانت SetWarnings قيمتها True:

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

لهذا أريد أن تظهر نفس الرسالة التي كانت لتظهر لو كان هذا الفورم مرتبطاً

مثلاً في حالة خطأ السجلات المتكررة(في المفتاح الرئيسي) أود أن تظهر الرسالة التالية:

اقتباس
Run-time error '3022':

The changes you requested to the table were not successful because

they would create duplicate values in the index, primary key, or

relationship. Change the data in the field or fields that contain

duplicate data, remove the index, or redefine the index to permit

duplicate entries and try again.

أما إن كانت SetWarnings قيمتها False:

لا تظهر أية رسالة (طبعاً)

ولكن مع أن Docmd.RunSQL قد فشلت تظل قيمت Error صفراً (أي لا يوجد خطأ)

ولا يعرف المستخدم أن السجل لم يتم إلحاقه

فما العمل؟

RunSQL_Sample.zip

تم تعديل هذه المشاركة بواسطة aroma_kt في 7 ديسمبر 2005 في 13:09

#8

اخي الكريم

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

ان ما ذكرته وعبرت عنه بالصور لا يعتبر من اخطاء الاكسيس ولكنه يعتبر من ارشادات برنامج الاكسيس بدلالة انه لو كان هناك خطأ لظهر لك رقم الخطأ ولتم معرفة رقم الخطأ من الرسالة .

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

RunSQL_Sample.rar

اختكم

زهره

#9

أخي الكريم

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

تحياتي

db.rar

#10

أشكرك زهرة على مجهودك (ملاحظة اسمي مؤنث وليس مذكر)

لكن ليس هنالك داعي لوجود جدول يحوي الأخطاء لأنه طالما حصل المبرمج (عن طريق الكود) على رقم الخطأ يمكن معرفة وصفه عن طريق Description (أما إن كانت غايتك هي التعريب فهذا شيء آخر)

إن ما حصل هو كما قلت أنت ليس خطأً في الأكسيس والدليل أن Err فارغ

لهذا يبدو أن طريقة RunSQL لن تنفعني وعلي اللجوء لطريقة أخرى

أشكرك أخ غازي على مساعدتك أيضاً

أنا فعلاً بعدما وجدت أنه ما من سبيل لعمل ما أريده بواسطة RunSQL اتجهت لطريقة شبيهة لطريقتك (لكن بدون مكتبة DAO)

هذه طريقتي مرفقة للفائدة وشكراً للجميع مرة ثانية

Insert_Sample.zip

تم تعديل هذه المشاركة بواسطة aroma_kt في 8 ديسمبر 2005 في 12:28

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

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