منتديات جريت بلينز العربية Great Plains For Arab

منتديات جريت بلينز العربية Great Plains For Arab (http://www.gp4arab.com/forum/index.php)
-   مواضيع المطورين الأخرى (http://www.gp4arab.com/forum/forumdisplay.php?f=8)
-   -   تعلم كيفية كتابة الشفرة البرمجية بلغة الدكسترتي (http://www.gp4arab.com/forum/showthread.php?t=122)

humam 02-Aug-2011 10:18 AM

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

عثمان 02-Aug-2011 11:53 AM

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

حيا الله شعب العراق الأبي ... الشعب العبقري دون منازع... فرج الله همكم

humam 04-Aug-2011 03:35 PM

الله محييك اخي العزيز جزاك الله عني خير الجزاء على كلماتك الطيبة واتمنى ان تعود هذه المواضيع بالفائدة المرجوة منها على كل العرب والمسلمين

Monzer Osama 04-Aug-2011 03:44 PM

اقتباس:

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

أتوقع أن الخلل في هذا هو عدم وضع كود لعملية الحفظ عند إغلاق الشاشة حيث أنه لن يتم حفظ المدخلات الا بضغط الزر ويفترض أن يتم سؤال المستخدم عن رغبة الحفظ من عدمها... هل انا محق في هذا؟؟

humam 04-Aug-2011 04:25 PM

الشفرة البرمجية للزر 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 .

humam 04-Aug-2011 04:37 PM

اقتباس:

المشاركة الأصلية كتبت بواسطة Monzer (المشاركة 976)
أتوقع أن الخلل في هذا هو عدم وضع كود لعملية الحفظ عند إغلاق الشاشة حيث أنه لن يتم حفظ المدخلات الا بضغط الزر ويفترض أن يتم سؤال المستخدم عن رغبة الحفظ من عدمها... هل انا محق في هذا؟؟

احسنت اخي منذر على هذه الملاحظة وهذه نقطة اخرى سوف نذكر لاحقا كيفية التعامل معها.

humam 04-Aug-2011 04:44 PM

1 مرفق

ان العبارتين Copy from & save table كما وضحنا سوف تعمل على حفظ المعلومات من النافذة الى الجدول الان هناك احتمالين الاول هو نجاح عملية الحفظ لذا سوف تعيد الدالة err القيمة OKAY وبتالي سوف لايتم تنفيذ عبارة الشرط الاولى وينتقل التنفيذ مباشرة الى السطر الاخير من الشفرة وتحديدا الى العبارة restart window والتي تعمل على مسح محتويات النافذة بعد عملية الحفظ التي تمت بشكل سليم .

الان نأتي الى الاحتمال الثاني وهو ان المستخدم يحاول تعديل سجل موجود وعندما نحاول تنفيذ العبارة save سوف يحصل هناك خطأ وتعيد الدالة err قيمة الخطأ وهو DUPLICATE وبتالي سوف يتحقق شرط عبارة if then الاولى وننتقل الى مجموعة من العبارت تعمل على ما يلي:
اولا. نفرغ محتويات Table Buffer
ثانيا.تعمل عبارة range table على ملئ Table buffer بالسجل المحدد اعتمادا على قيمة حقل النافذة Customer ID .
ثالثا. تقوم العبارة change first بوظيفتين الاولى هي استرجاع السجل الاول من Table Buffer والثانية انها تهيئ الجدول ARB_Customer_MSTR للقيام بعملية تعديل محتوى احد السجلات الموجودة حاليا.

رابعا. تقوم عبارة copy from & save table بعملية حفظ التعديلات التي اجراها المستخدم على السجل وسوف تتم هذه العملية بنجاح ولكن للاحتياط وضعت بعدها عبارة if then لفحص العملية الاخيرة لانه قد يحصل هناك خلل اثناء عملية الحفظ مثلا تنقطع الشبكة وهنا ان العبارة change table خطرة نوعا ما لانها تسبب اقفال الجدول وهذا الاقفال لا يزال الا بتنفيذ عملية save ناجحة اما اذا لم تنجح عملية الحفظ لاي سبب من الاسباب سوف تعمل عبارة if then على تنفيذ العبارة release table وهي تعمل على ازلة القفل من الجدول لاننا اذا لم نفعل ذلك سوف لا يستطيع المستخدم ان يصل الى الجدول لانه سوف يكون مغلق.

yasser_bh 04-Oct-2011 10:02 AM

شكرا لك على هذا الموضوع الممتاز ... منذ فترة و انا ابحث عن مصادر لتعلم لغة الدكستري ... فأذا كانت لديك بعض المصادر (كتب، مواقع أو منتديات) فسوف نكون لك نت الممتننين لو شاركتنا إياها


شكرا

عماد زيد 04-Oct-2011 11:06 AM

السلام عليكم
الأخ همام اضطر للإنقطاع عن المنتدى بسبب لعض الظروف القاهرة.
نتمنى عودته قريباً.

humam 14-Nov-2011 06:57 PM

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


جميع الأوقات بتوقيت GMT +3. الساعة الآن 11:27 AM.

Powered by vBulletin® Version 3.8.3

الموقع والمنتدى من تطوير » شركة المنذر للاستضافة والتصميم


الموقع لا يمثل أي جهة رسمية بل هو جهد شخصي يرمي الى تجميع القدرات في برنامج جريت بلينز