با سلام
خدمت دوست عزيزم عرض كنم كه در صورتي كه از آبجكت ado استفاده ميكنيد :
اولا نوع بانك تفاوتي ندارد لذا راه حلي كه خدمتتون اريه خواهم كرد در تمامي بانكها صادق ميباشد .
دوما :
ميريم سر اصل مطلب . در جواب شما بايد عرض كنم كه ما دو نوع قفل داريم :
1- قـفـل كـردن كل بـانــك
2- قـفـل كـردن جـدول
حــالت اول :
درصورتي كه ما بخواهيم كليه جدولهاي بانك را به روز رساني كنيم ( يعني ميخواهيم كليه جدولها را تغيير دهيم كه اين تغيير ميتواند تغيير ساختار جداول باشد يا تغيير محتويات جداول )
آنگاه كل بانك را قفل ميكنيم . اين حالت معمولا خيلي كم پيش مي آيد و در ضمن تنها از سوي مديريت انجام ميشود .
حــالـت دوم :
در این حالت جدول یا رکورد قفل میشود . نمونه این حالت همان است که خودتان پرسیده اید . در این حالت هنگام باز کردن رکوردست (Recordset) جدول یا رکورد را قفل میکنیم .
قبل از آنکه روش کار را عرض کنم نکته ای وجود دارد که باید به آن توجه کنید . ما دو نوع قفل برای جدول داریم یا بهتر بگویم دوحالت داریم . در حالت اول که حالت خوش بینانه (Optimistic)
نام دارد تنها زمانی جدول قفل میشود که برنامه به دستور Update برسد و تازمانی که کار Update تمام نشده جدول برای سایر کاربران قفل میباشد . حالت دوم حالت بدبینانه
(pessimistic) نام دارد که در این حالت هنگامی که برنامه به دستورات مربوط به Edit بـرسد جدول را قفل میکند و این قفل تازمانی که کار دستور Update انجام نشده ادامه دارد . حالت
اول که واضح است .اگر فرضا نام رکوردست Rs باشــد زمانی قفل اعمال میشود که به دستور Rs.Update برسد و هنگامی قفل برداشته میشود که به دستور بعدی برود .اما اگر بخواهم
مثالی برای حالت دوم بزنم باید بگم در مثال زیر زمانی که به دستور خط 10 برسد جدول قفل میشود و زمانی که به خط 14 برسد قفل برداشته میشود .
کد:
1 - Dim Db As New Adodb.Connection
2 - Dim Constr As String
3 - Constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db.mdb"
4 - Db.Open (Constr)
5 - Dim Rs as Recordset
6 - Set Rs = New Adodb.Recordset
7 - Dim Sql As String
8 - Sql = "Select * From [Mytbl] Where id = 105"
9 - Rs.Open(Sql , Db , adOpenKeyset , adLockPessimistic )
10 - Rs!name = "ali110"
11 - Rs!family = "Kavousifar"
12 - Rs!phone = "22222222222222"
13 - Rs.Update
14 - Rs.Close
15 - Db.Close
16 - Rs = Nothing
17 - Db = Nothing
در حالت کلی برای قفل کردن جدول به صورت خوش بینانه داریم :
کد:
Rs.Open(Sql , Db , adOpenKeyset , adLockOptimistic )
Or
Rs.Open(Sql , Db , adOpenKeyset , 3 )
و در حالت بدبینانه :
کد:
Rs.Open(Sql , Db , adOpenKeyset , adLockPessimistic )
Rs.Open(Sql , Db , adOpenKeyset , 2 )
توجه داشته باشید که در متد open مربوط به Recordset آخرین پارامتر مربوط به نوع قفل میباشد . به صورت کلی مقادیر مجاز برای پارامتر قفل موارد زیر باشند که مقادیر عددی آنها نیز
آورده شده است .
کد:
'---------------- Lock Type Values ---------------------
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
'----------------------------------------------------------
امیدوارم موفق و موید باشید .
قربان شما علی110