السلام عليكم
موضوع معالجة العمليات او بما يسمى Transaction Processing هو من المواضيع المهمة التي يجب علينا معرفتها و استخدامها بشكل المناسب.
ساحاول في هذا الموضوع القاء الضوء على ال Transactions و كيفية الاستفادة منها.
هذا الموضوع ليس كاملا ولهذا ادعو الاعضاء المشاركة بما لديهم من معلومات ليكون مرجعا لنا جميعا.
ماهو ال Transaction
==============
هو يشير الي عملية تجميع التغييرات التي تمت على البيانات في حزم Batches بحيث تعامل كل حزمة Batch كوحدة ذرية وحيدة Single atomic unit . وهذا يعني كل التغييرات التي تمت على البيانات في الحزمة الواحدة اما ان تنجح جميعا او تفشل جميعا.
دعني اوضح هذا المعنى بطريقة اخرى...
ما اعنيه هو انه يمكنك تحديد مجموعة من التعليمات التي تؤثر على البيانات (مثل تعليمة الاضافة Insert و تعليمة التحديت Update و تعليمة حذف السجل Delete و تعليمة حذف الجدول Drop و تعليمة الانشاء Create وغيرها الكثير) على انها تعليمات ذرية أي ان جميع التعليمات اما ان تقبل جميعا او ان ترفض حميعا ولا يوجد حل وسط.. بالعربي الفصيح يابيض ياسود مافيش لون رمادي.
مثال توضيحي:
--------------
1- ابدأ العملية – هنا نحدد بداية الحزمة
2- احذف السجل رقم 10 من جدول المودعين
3- اضف سجل في جدول الاصناف
4- احذف جدول الاصناف الاحطياطي من قاعدة البيانات
5- اقبل حميع التغييرات او ارفضها – نهاية الحزمة
لاحظ معي ان البند رقم 5 نتيجته تعتمد على على الموافقة بنعم او لا؟؟؟
فأذا تمت الموافقة على التغييرات فأن التعليمات من 2 الي 4 ستعتمد و تصبح التغييرات دائمة في قاعدة بياناتنا!
اما اذا تم الرفض فان التعليمات من 2 الي 4 ستلغي جميعا ولن يكون هناك أي اثر على قاعدة بياناتنا.
الان فكر معي قليلا ماذا اذا تم تنفيذ التعليمة رقم 2 بنجاح بينما حدث خطأ عند تنفيذا التعليمة رقم 3 ما الذي سيحدث؟؟؟
الاجابة بسيطة!! ستلغي جميع التغييرات وهذا يعني انه ستلغي التعليمة رقم 2 رغم انها نفذت بنجاج و السبب كما فلنا ان العملية ذرية اما ان تنجح جميعا او تلغى جميعها.
ارجو ان يكون المفهوم واضحا الان.
كيف يمكن تمثيل ال Transactions في الاكسس
===========================
يدعم الاكسس ال Transactions من خلال ثلاث دوال او طرق Methods خاصة بالكائن WorkSpace و هي:
BeginTrans : وهي تخبر الاكسس ببداية الحزمة Batch
CommitTrans : تخبر الاكسس بقبول كل تعليمات الحزمة.
Rollback : تخبر الاكسس بوجوب رفض كل تعليمات الحزمة
مثال عملي
======
في هذا المثال سنشرح واحد من اشهر الامثلة التي تشرح فكرة ال Transaction الا وهو عملية تحويل مبلغ من المال من حساب بنكي الي حساب اخر.
قاعدة البيانات تتكون من جدول واحد باسم Account ويحتوي على حقلان وهما AccountID و الحقل AccountBalance
هنا سننشئ دالة وضيفتها تحويل مبلغ من المال من حساب الي رصيد حساب اخر. وسيترتب على هذه العملية ان رصيد الحساب المحول منه سيخفض بقدر المبلغ المحول بينما رصيد الحساب المحول اليه سيزيد بمقدار المبلغ المحول.
هذه العملية في غاية الخطورة وذلك انه اذا حدث خطأ فسيترتب على ذلك ضياع الحقوق و مشاكل جمة. تخيل ان المبلغ قد خصم من الحساب المحول منه و لكن قبل زيادة رصيد الحساب المحول الية حدث خطأ (انقطعت الكهربا, , حدث خطأ في النظام و و و ) هل ترى المشكلة الان اذا صديقنا ال Transaction سيمنع ذلك.
القي نظرة على الكود
Private Function TransferMoney(ByVal lngFromAccount As Long, ByVal lngToAccount As Long, ByVal lngMoney As Long) As Boolean
On Error GoTo ErrorHandler
Dim blnTransactionIsCommited As Boolean
Dim strSQL As String
Dim wrkWorkSpace As DAO.Workspace
Dim dbCurrentDatabase As DAO.Database
blnTransactionIsCommited = True
Set wrkWorkSpace = DBEngine.Workspaces(0)
Set dbCurrentDatabase = CurrentDb
'Begin the Transaction
Call wrkWorkSpace.BeginTrans
strSQL = "UPDATE Account SET Account.AccountBalance = Account.AccountBalance - " & lngMoney
strSQL = strSQL & " WHERE (((Account.AccountID)= " & lngFromAccount & "));"
Call dbCurrentDatabase.Execute(strSQL)
strSQL = "UPDATE Account SET Account.AccountBalance = Account.AccountBalance + " & lngMoney
strSQL = strSQL & " WHERE (((Account.AccountID)= " & lngToAccount & "));"
Call dbCurrentDatabase.Execute(strSQL)
'Now commit all queries together
Call wrkWorkSpace.CommitTrans
CleanUpAndExit:
TransferMoney = blnTransactionIsCommited
Call dbCurrentDatabase.Close
Call wrkWorkSpace.Close
Exit Function
ErrorHandler:
' Rollback all queries
Call wrkWorkSpace.Rollback
blnTransactionIsCommited = False
Call MsgBox("Error#" & Err.Number & vbCrLf & "Description: " & Err.Description)
Resume CleanUpAndExit
End Functionانظر المثال المرفق
تحياتي لكم جميعا
Whale