البرمجةالدروس

خطأ في جملة “insert into”


microsoft.netبرنامج الفيجوال ستديو ولغة vb.net، استعادة لياقة المبرمجين من جديد، فهي لغة مرنة مع المبرمج نفسه قبل المستخدم وسهلة أيضاً على المصمم قبل المبرمج. في جميع لغات البرمجة يواجه المبرمج “رسائل الخطأ” التي تظهر عند تنفيذ البرنامج في أغلب الأحوال تقريباً، ولكل لغة طقوسها العقدية في كتابة الشيفرة البرمجية، والخطأ وارد ولا محال منه.

يختلف الخطأ كما ذكرنا سابقاً من لغة إلى لغة أخرى، فهناك لغات “دقيقة جداً ” فمثلاً لغة الجافا فإنها حساسة جداً لحالة الأحرف، فقد تقبل لغة الجافا a ولكنها تعتبرك أخطأت لو كتبت A والعكس صحيح، أيضاً هناك لغات لا تظهر مكان وجود الخطأ بالتحديد، فتحصل الغلبة والمشقة داخل سطور الشيفرة لتعديل الخطأ!

بعد هذه المقدمة البسيطة حول الأخطاء والتي قد يطول الحديث عنها وأبخستها بسطوري السابقة -ليست محور مقالتي التعمق فيها- أحببت فقط أبين للقارىء معنى “الخطأ البرمجي”. فبالنسبة لمبرمجي الفيجوال بيسيك دوت نت، يتتبعون الأخطاء بمساعدة البرنامج نفسه وذلك لأن:

  • البرنامج يتيح الإكمال التلقائي للدوال والخصائص، فبمجرد كتابة “اسم الأداة” ومن ثم تتبعها بـ (.)، تظهر قائمة منسدلة بجميع الدوال والخصائص التي تختص بها هذه الأداة، فتجد نفسك تكتب الكود بمساعدة شخص آخر يكتب معك.
  • البرنامج يظهر الخطأ بالتحديد، وذلك عن طريق رسالة تظهر في نافذة الأخطاء، وعند النقر المزدوج عليها تظهر لك سطر وجود الخطأ والشيفرة التي وجد بها الخطأ.
  • وهناك أخطاء تظهر بعد الضغط على زر تنفيذ البرنامج، مثل الأخطاء المرتبطة بـ Data Base.

بالرغم من هذه الميزات إلا أن خطأ “خطأ في جملة insert in to” أتعبني كثيراً، فتظهر الرسالة تنبأ بأن هناك خطأ في جملة الإدخال في قاعدة البيانات من نوع “ms access”، وعندما نمارس العادات الروتينة لإكتشاف الخطأ فنجد أن:

  • عدد الحقول المتضمنة في جملة insert هي نفسها عدد الحقول الموجودة في Table جدول قاعدة البيانات
  • مسمى الحقول في جملة insert هي نفس مسماها في Table جدول قاعدة البيانات
  • الفاصلة (،) التي تفصل كل حقل عن الآخر كتبت بشكل صحيح
  • اسم جدول قاعدة البيانات كتب بشكل مطابق وصحيح

ما الإشكال إذن، و ما الحل؟

بعد جهد جهيد تبين لي الخطأ الذي كنا نرتكبه على غفلة!

1- هو أن أسماء الحقول في جملة insert قد تكون كلمات محجوزة في نفس اللغة فيكمن الخطأ فيه. والحل لن أستطيع أن أقول أو أدعي بحفظ جميع الكلمات المحجوزة حتى لا نقع في الخطأ ذاته، لكن هناك طريقة أسهل وأفضل وهي عند كتابة أسماء الحقول لجدول الموظفين مثلاً، فبدل من أن نكتب الحقول بالشكل التالي:

id – name – date

نكتبها بالشكلين التاليين:

idemp-nameemp-dateemp

أو بأي طريقة تشاؤها، لكن أقصد بالطريقة الثانية هو أنك تتبع اسم الحقل باسم مختصر لاسم الجدول، وهذا سيقلل من احتمال وجود الخطأ.

2- التركيز في وضع العلامة (‘) إذا كان المدخل من نوع string، وعدم وضع العلامة (‘) إذا كان المدخل number.

ملاحظة: نفس الطريقة السابقة نتعامل معها إذا وجد الخطأ في جملة Update.

الفائدة والمتعة أرجوها لكم.. فردوس

‫25 تعليقات

  1. منذ فترة بسيطة كنت أعكف على كتابة برنامج بلغة ++C على اللينكس مع قاعدة بيانات. وظهرت لدي مشكلة وظللت أتحرى مكانها لفترة طويلة جداً استمرت لساعات طوال وفي الأخير اكتشفت أن الخطأ في اسم أحد الحقول في قاعدة البيانات والذي كان اسماً محجوزاً، إذ لم تكن رسالة الخطأ التي يظرها مترجم اللغة على لينكس واضحه بشكل كافي.

  2. مقال جميل جدا لكن حبت اعلق على ان خصائص الاستكمال والبحث عن الخطا

    ليست ميزة لغة البرمجه ولكنها ميزة البرنامج الذي تقوم بالتحرير والكتابة به

    فمايكروسوفت امتعتنا بمثل تلك البرامج التي تسهل عمل المبرمج في الكتابه

    ولكن لا يمكن ان نقول انها ميزه للغه البرمجيه بل البرنامج هو الذي ميزه للغه

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

    فهناك حلان مع قواعد بيانات mysql اما ان تغير اسم الحقل او الجدول او انك تقوم بحصره بين العلامتين `tablename`

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

  4. شكرا فردوس ،

    هنالك حل اخر لـ الـ ( reserved word) وهو (Add square brackets to both sides) ..

    مثال : فبدلا من Password نكتب [Password] وهكذا

    ان الكلمات المحجوزة مدرجة في موقع MDSN تحت مسمي :

    (List of reserved words in Jet 4.0)

    الرابط :

    http://support.microsoft.com/kb/248738/

    شكرا فردوس ، اجمل تحية

  5. آآآآآآآآآآآآآآآآآآآآخخخ ذكرتني قبل كم يوم كنت اشتغل في مشروع Asp.net
    و ظهر لي نفس الخطأ و تخيل بعد كم يوم اكتشفت اني مستخدم كلمة order في قواعد البيانات و هي كلمة محجوزة في لغة الـ SQL

  6. السلام عليكم

    بالفعل هذه طريقة جيدة وقد اثبتت جدواها كثيرا

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

  7. أشكرك ياأختي على الموضوع فالمشكلة التي أثرتيها عانيت منها كثير في مشروع تخرجي.
    جزاكي الله خيرا على هذا المقال الممتاز

  8. استخدم LINQ غهي اسهل وافضل عند التعامل مع قاعدة البيانات

    فلن تحتاج الى كتابة هلامات التنصيص او الفواصل …الخ

    ويمكنك ان تتعامل مع اي توه من اتواع قواعد البيانات بها

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

    ثاني شي كـل عــام وانــتـم بـــخـــيـــر

    لكن انا جربت طريقة اخوي ابو ايناس الصيعري وطلعت موفقه

    ونصيحه مني جربوها ولكم خالص تحياتي

  10. وعليك السلام

    صحيح اخوي ماجد انا جربته والله طلعت موافقه على ماقلت

    لكم خالص تحياتي ودمتم سالمين

  11. واذا حدث ما كنت تخشاه وتم انشاء قاعدة البيانات بهذا الشكل يمكنك تفادي تلك المشكلة بوضع اسم الحقل بين
    [ ]
    فهذا تعريف ان هذا حقل وليس اسم محجوز لدية اقوم باستخدامة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى