ورود

View Full Version : ذخیره در بانکها



mehdi_mohamadi
یک شنبه 06 خرداد 1386, 18:00 عصر
آیا در برنامه های تحت شبکه و با استفاده از adotable در هنگام ذخیره کردن نیازی به قفل کردن بانک اطلاعاتی هستش؟
اگه جواب مثبته. چطوری؟

mehdi_mohamadi
یک شنبه 06 خرداد 1386, 18:07 عصر
ضمنا" بانک اطلاعاتی مورد استفاده sql server می باشد

soroush_vs
یک شنبه 06 خرداد 1386, 21:11 عصر
معلومه که نیاز هست اگه شما دو تا کاربر همزمان بخان یه رکورد رو ویرایش کنن آیا میشه ضمانت کرد که مثلا ویرایش کاربر اول اعمال شده یا ویرایش کاربر دوم؟(نقاط بحرانی)

SYNDROME
یک شنبه 06 خرداد 1386, 22:03 عصر
با سلام
اشتباه شد.

mehdi_mohamadi
دوشنبه 07 خرداد 1386, 11:02 صبح
برای چک کردن قفل باید چی کار باید انجام بدم

Mahyaa
دوشنبه 07 خرداد 1386, 11:49 صبح
آیا در برنامه های تحت شبکه و با استفاده از adotable در هنگام ذخیره کردن نیازی به قفل کردن بانک اطلاعاتی هستش؟
اگه جواب مثبته. چطوری؟

نه ، همیشه هم لازم نیست .
بستگی به شرایط داره :
مثلا آیا احتمالش هست ، بیش از یک کاربر همزمان با یک رکورد کار کنند یا نه .


اگر می خواهید در هنگام ذخیره ویرایش و ذخیره اطلاعات بانک را قفل کنی از دستور
کد:
ADOConnection1.BeginTrans
استفاده کن و بعد از پایان کارت برای آزاد سازی و دخیره کامل اطلاعات از دستوردر ضمن متدهای BeginTrans , CommitTrans و RollbackTrans به برای قفل کردن بانک نیست ! (اصلا چنین کاری نمیکنند)
این سه متد برای ذخیره ، اعمال و لغو Transaction ها استفاده میشه .

اگر لازم میدونید که جدول یا رکوردی رو قفل کنید باید خاصیت LockType دیتاست رو تنظیم کنید .
پیشنهاد میکنم کلمات LockType و ltPessimistic رو توی سایت جستجو کنید . (چند بار بحث شده)
Help دلفی هم ، خوب توضیح داده .

SYNDROME
دوشنبه 07 خرداد 1386, 15:32 عصر
با سلام
اشتباه شد.

cybercoder
دوشنبه 07 خرداد 1386, 17:14 عصر
گر می خواهید در هنگام ذخیره ویرایش و ذخیره اطلاعات بانک را قفل کنی از دستور
کد:
ADOConnection1.BeginTrans
استفاده کن و بعد از پایان کارت برای آزاد سازی و دخیره کامل اطلاعات از دستور
کد:
ADOConnection1.CommitTrans
استفاده کن.تا زمانی که دستور بالا را اجرا نکنی با قفل است ولی هر تغییری که انجام می دهی ذخیره نمی شود.
و اگر خواستی اطلاعات را دخیره نکنی و بانک را از حالت قفل خارج کنی از دستور
کد:
ADOConnection1.RollbackTrans
به این کاری که شما می گی می گن اجرای Tra nsaction برای عملیات Commit یا Atomic و متاسفانه چندان ارتباطی به قفل کردن یک رکورد در هنگام ویرایش نداره دوست عزیز. اگر بانک اطلاعاتی مورد استفاده Sql Server هست خودش این کار رو انجام می ده.

موفق باشید

a_b_toops
دوشنبه 07 خرداد 1386, 18:10 عصر
procedure TMain1.LockRec(TB: TADODataSet; TableName, FieldName, Exp: String);
Var
Query : String;
begin
TADODataSet(TB).Close;
Query := 'Begin Transaction '+#13+
'Select * From '+Trim(TableName)+' With (XLock) Where '+Trim(FieldName)+' = '+
QuotedStr(Exp);
TADODataSet(TB).CommandText := Trim(Query);
TADODataSet(TB).Open;
TADODataSet(TB).Requery;
end;

procedure TMain1.UnLockRec(TB: TADODataSet; TableName: String);
Var
Query : String;
begin
TADODataSet(TB).Close;
Query := {'Begin Transaction '+#13+}
'Select * From '+Trim(TableName)+#13+' '+
'Commit Transaction';
TADODataSet(TB).CommandText := Trim(Query);
TADODataSet(TB).Open;
TADODataSet(TB).Requery;
end;

SYNDROME
دوشنبه 07 خرداد 1386, 20:25 عصر
با سلام
با تشکر از کاربر Vahidam.
حواسم نبود اشتباه کردم.شرمنده.
این لینکها را نگاه کنید
http://www.barnamenevis.org/forum/sh...ad.php?t=30186
http://www.barnamenevis.org/forum/sh...ad.php?t=14406

vcldeveloper
چهارشنبه 09 خرداد 1386, 01:33 صبح
اگر می خواهی یک رکورد را قفل کنی در شبکه و بعد باز کنی از طریق sql server
این کد رو که Touska توی یه تاپیک دیگه گذاشته بود. چرا Copy\Paste اش کردید اینجا و لینک ندادید؟!!!

mehdi_mohamadi
جمعه 11 خرداد 1386, 14:02 عصر
واسه اینکه چک کنیم جدول لاک هست یا نه چی کار کنیم؟