![]() |
|
ربط مهمة بأخرى - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183) +--- الموضوع : ربط مهمة بأخرى (/showthread.php?tid=24487) |
ربط مهمة بأخرى - محمد ابوخليل - 10-04-18 السلام عليكم ورحمة الله أريد معرفة كيف اربط عملية بأخرى بمعنى على سبيل المثال لا يعمل حفظ الا اذا قام بعمل حذف لملف RE: ربط مهمة بأخرى - محمد كريّم - 10-04-18 حطها في جملة شرطية IF statement RE: ربط مهمة بأخرى - محمد ابوخليل - 11-04-18 اريد ان يقوم بالمهمة الاولى وهى حفظ ملف والمهمة الثانية هى حذف ملف واذا لم تتم المهمة الاولى يترك تنفيذ المهمة الثانية RE: ربط مهمة بأخرى - عبدالله الدوسري - 11-04-18 (11-04-18, 08:55 AM)محمد ابوخليل كتب : اريد ان يقوم بالمهمة الاولى وهى حفظ ملف والمهمة الثانية هى حذف ملف أخي محمد ماذا تقصد بالحذف ؟ هل الحذف من قاعدة البيانات أم حذف ملف من القرص الصلب؟ RE: ربط مهمة بأخرى - محمد ابوخليل - 12-04-18 (11-04-18, 01:54 PM)عبدالله الدوسري كتب : أخي محمد أستاذنا الفاضل/ عبدالله الدوسرى اقصد الحذف من قاعدة البيانات...المشكلة عندى ان البرنامج يعمل على قاعدة بيانات sql على سيرفر واحيانا النت يكون بطىء ويقوم بالمهمة الثانية وهى الحذف من قاعدة البيانات بدون المهمة الاولى وهى حفظ ملف ....وقد سمعت من أحد الزملاء ان هناك طريقة لربط المهمتين مها بحيث اذ لم يتم المهمة الأولى بنجاح لا يدخل فى تنفيذ المهمة الثانية RE: ربط مهمة بأخرى - عبدالله الدوسري - 12-04-18 توجد طريقتين : الطريقة الأولى : ( التحكم يكون من داخل البرنامج ) بواسطة التحقق من مخرجات جمل الإستعلام المفروض أن تكون جملة الإستعلام ( جملة الحذف من قاعدة البيانات ) تقوم بإرجاع رقم هذا الرقم هو عدد السجلات المحذوفة ( سواءاً قمت بحذف سجل واحد أو أكثر من سجل ) داخل الكود تستخدم هذا الرقم : إذا كان أكبر من صفر ( 0 ) تنفذ الأمر الثاني : إذا كان أصغر من أو يساوي صفر ( 0 ) إذن لم يحدث شيء على قاعدة البيانات إذن لا تنفذ الأمر الثاني الطريقة الثانية : ( التحكم يكون من داخل قاعدة البيانات ) بواسطة الـ ( Transaction ) تعريف الـ Transaction : ترجمتها بالعربي تعني ( معاملة ) المعاملات هي مفهوم أساسي لقواعد البيانات العلائقية. إذن المعاملات مفهومها الأساسي هو جمع ( عمليات متعددة أو إجراءات متعددة ) تنفذ في قاعدة بيانات , هدفها هو جمع كل هذة الإجراءات معاً لتصبح وحدة عمل واحدة. هذه الوحدة من العمل ( تحتوي على أجراءات كثيرة مثلاً ) يمكن أن تنجح أو تفشل ككل. إذا نجحت : يتم الالتزام والتثبيت والإعتماد بجميع التغييرات داخل هذة المعاملة وجعلها دائمة. إذا فشل ( أي جزء / والقصد أي إجراء ) داخل هذة المعاملة ( وقمت بإستدعاء أمر التراجع عن التغييرات ) فستكون جميع البيانات كما كانت قبل المعاملة. وكأن شيءً لم يكن. بمعنى المعاملة ملغية بالكامل بجميع إجراءاتها. مثال على الـ Transaction : تريد تنفيذ عدة إجراءات على قاعدة البيانات , مثلاً : أريد حذف بيانات موظف من كامل قاعدة البيانات هذا الموظف له سجل رئيسي في جدول , وبيانات الدخول والخروج في جدول مختلف , وأي وثائق أو صور في جدول آخر , والبيانات المالية في جدول آخر , وله بيانات أخرى في جدول الصلاحيات , بمعنى آخر له بيانات منتشرة في جداول كثيرة. الآن عند تنفيذ أمر الحذف على هذا الموظف ( هذا يعتبر إجراء ) وكل عملية تتم على أي جدول يعتبر ( إجراء ) سينتج عن هذا الأمر إجراءات كثيرة , وتريد تنفيذها بشكل منطقي ومتسلسل , الأن : بدون إستخدام الـ Transaction : الإجراء الذي ينجح سيعتمد , والإجراء الذي يفشل لن يعتمد سينتج عن هذة الحالة , خرق لمبداء تكامل البيانات ( في حال فشل أحد الإجراءات ) مثلاُ بيانات الموظف الأساسية تم حذفها من جدول الموظفين , ولكن لا تزال هناك بيانات تخص هذا الموظف في جداول أخرى. مع إستخدام الـ Transaction : يجب أن تنجح جميع الإجراءات حتى يتم إعتماد كامل التغييرات , لكن بشرط ::::::: بإستدعاء أمر الإعتماد ( ()Transaction.Commit ) أي إجراء يفشل يعني فشل العملية بالكامل ( بجميع إجراءاتها ) , لكن بشرط ::::::: بإستدعاء أمر التراجع ( ()Transaction.Rollback ) 1 - بإمكانك إنشاء الـ Transaction داخل البرنامج ( بلغة الـ VB.NET ) كود : Dim transaction As SqlTransactionيجب على كل command أن يأخذ نفس الـ connection الذي تم إنشاء ا الـ Transaction منه يجب على كل command أن يأخذ نفس الـ Transaction الذي تم إنشائة بمعنى connection واحد Transaction واحد وكل أمر ( command ) يجب أن يعتمد هذين المتغيرن Dim command As SqlCommand command.Connection = connection command.Transaction = transaction نفذ كل الإجراءات داخل جملة Try لاحظ الكود والجملتين ( Try / Catch ) كود : Tryبعد الإنتهاء من تنفيذ كل الأوامر قم بإستدعاء أمر الإعتماد transaction.Commit() في نهاية الجملة Try داخل الجملة Catch نفذ أمر التراجع transaction.Rollback() 2 - أو كتابت الـ Transaction داخل قاعدة البيانات بإستخدام الإجراءات المخزنة ( بلغة الـ SQL ) كود : BEGIN TRANSACTIONفيما يخص قواعد البيانات , وإذا كانت لديك إجراءات عدة وتريد تنفيذها , إذن ( الطريقة الثانية الـ Transaction ) RE: ربط مهمة بأخرى - محمد ابوخليل - 12-04-18 شكراً ’’عبدالله الدوسري’’
أستاذنا الفاضل وجارى التجربة
|