خطأ في جملة “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.

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

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

    • العفو أخي ،،
      جزاك الله خير

  • إستفـت مـن الفكـرة ..

    وإن شاء اللـه نـرجع نبرمـج مـرة إخـرى ..

    • إن شاء الله ..
      علها تكون عودة ممتعة للبرمجة

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

    • لا أدري ! لماذا أخطاء قاعدة البيانات تكون غير واضحة !!

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

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

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

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

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

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

    • أوافق الأخ أحمد في كلامه
      هذه الميزة يتصف به الـ IDE وليس لغة البرمجة نفسها.

    • نعم أخي ، ميزة البرنامج فيجوال ستديو هذا ما كنت أقصده ،،
      شكراً لك

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

    • مشاكل الداتا بيس تكون مبهمة بعض الشيء
      أما الأخطاء الأخرى فهي أوضح

  • شكرا فردوس ،

    هنالك حل اخر لـ الـ ( 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/

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

    • العفو أخي ،،
      إضافة مثرية جزاك الله خير

    • alfarok

      السلام عليكم

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

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

  • بدر

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

    • لم أكن أتوقع أن هذه المشكلة ظاهرة للكثيرين
      شعرت بمدى شيوعها بعد هذه المقالة ..

  • بدر بن محمد

    الله يعطيك العافيه على الشرح الوافي ..

  • ماكسيموس

    مقال ممتاز .

  • المبرمجة:سميه

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

  • ابو ايناس الصيعري

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

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

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

  • ماجد الصيعري

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

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

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

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

  • ghgh11

    وعليك السلام

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

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

  • نفس المشكلة في php
    -.-
    وظهرت لي حتى مع C++

  • MR. Codd

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

  • أبومالك بلقاسم خليفة اغنية

    3- Do not use spaces in the fields names. Thnks.

تعليقات عبر الفيسبوك