عرض مشاركة واحدة
قديم 04-Aug-2011, 04:25 PM   #25
humam
مشرف منتدى المطورين
 
الصورة الرمزية humam
 
تاريخ التسجيل: Jul 2007
الدولة: UAE
المشاركات: 323
إرسال رسالة عبر مراسل Yahoo إلى humam
من مواضيعي  
افتراضي

الشفرة البرمجية للزر Save:

بالعودة الى الشفرة البرمجية في الزر Save نلاحظ انها تمتاز بالبساطة وانا كنت متقصد من ذلك لانني في البداية لااريد ان اضع شفرات معقدة نوعا ما مما يعطي انطباع سيء عند الشخص الذي يرغب في التعلم وهي كانت كافية في البداية لاعطاء صورة جديدة حيث ان المستخدم سوف يقوم بأدخل المعلومات ثم يقوم بحفضها ويلاحظ ان كل شيء يعمل بشكل جيد حيث تتم عملية مسح محتويات النافذة بعد الحفظ وعندما يعمل SELECT من SQL Server سوف يجد السجل الذي ادخله الان اين العيب في هذه الشفرة ؟ الجواب ان هذه الشفرة تعمل بشكل سليم في حالة ادخال New record ولكن عندما تحاول ان تحرر اي سجل موجود مثلا استرجع اي سجل ثم غير اسم الزبون مثلا او اي حقل ثم اضغط الزر حفظ واسترجع نفس السجل سوف تلاحظ ان التغييرات التي قمت بها لم تحفظ ؟ الخلل في الشفرة البرمجية حيث نحتاج الى تغيير المنطق الذي تعمل به الشفرة الى المنطق التالي:
اولا. سوف نقوم بعملية الحفظ كما هي ان ننسخ المحتويات من النافذة الى الجدول ثم نحفظ الجدول.
ثانيا. بعد تنفيذ عملية الحفظ سوف نستخدم الدالة err لمعرفة نتيجة عملية الحفظ هل نجحت ام لا .طبعا سوف تنجح العملية اذا كنت تحفظ هذا السجل لأول مرة ولكن عندما تحاول ان تقوم بعملية تحرير سجل موجود سوف تعاد القيمة التالية DUPLICATE ولتوضيح السبب في ذلك سوف نحتاج الى تقريب الموضوع كما يلي ان عبارة Save Table سوف تترجم لاحقا الى عبارة Insert المعروفة في SQL Server الان عندما تنفذ عملية Insert في جدول يجب ان يكون كل سجل في الجدول يمتلك قيمة فريدة لحقل او مجموعة الحقول التي تمثل Primary Key للجدول فأذا حاولت ادراج سجل جديد يمتلك نفس القيمة في حقل المفتاح الاساسي Primary Key لسجل موجود فأنك تحاول ان تكسر تكامل قاعدة البيانات وسوف يقوم SQL Server بمنعك من ذلك وهذا ما يحصل فعلا عندما تحاول ان تنفذ عبارة save table بالنسبة لسجل موجود مسبقا لذا اذا كانت القيمة المعادة هي DUPLICATE سوف نستنج ان المستخدم يحاول ان يعدل محتويات سجل موجود لذا نحتاج الى اضافة سطر برمجي قبل عبارة save table يعمل على ترجمتها الى عبارة Update المكافئة في SQL Server .
__________________
GP Techno-Functional Consultant
humam غير متواجد حالياً   رد مع اقتباس