在做update動作時,是否有lock指令可以先判斷data是否已被lock, |
尚未結案
|
vivi666666
初階會員 ![]() ![]() 發表:83 回覆:94 積分:35 註冊:2003-03-05 發送簡訊給我 |
|
Jasonwong
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
|
timhuang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
基本上, 資料庫中資料被 lock 的機會應該是很低的, 然而, 使用者要求的指令執行, 資料庫會去排入執行, 會有一個 default 的 timeout, 當你要修改的資料被鎖定時, 你的指令仍舊會排入執行中, 但是若是等待時間超出預設的 timeout 時, 則資料庫會回覆 timeout 訊息給使用者, 當然, 若是你自己下的 command 發生 dead lock 時, 一樣會產生 timeout 的現象, 而導致資料庫也會去產生訊息, 使得你的異動發生 error, 如此一來就可以避免使用者長期佔用資料庫的資源, 導致資料庫無法工作. 當然, 若是在資料庫中特別設定某些身份的 user 不限制 timeout, 那使用這些身份 login 時, 要特別小心下達的 command. 避免發生資料庫大量鎖定的現象. 你的顧慮很好, 但是其實不需要考慮這麼多, 如同 Jasonwong 兄的提示, 直接使用 try 包住利用 error handle 的方式來傳達異動失敗的原因, 將是比較理想的程式流程, 而且你在 update 之前, 先確認了沒有鎖定, 再下達 update 時, 之間若是又發生的資料鎖定的現象, 問題一樣會發生的, 資料庫一樣會給你一個 error 的, 所以直接下達異動指令即可! 資料庫的鎖定方式很多種, 有 row lock, page lock, table lock, db lock 等狀況, 而且會隨著使用者包裝的 transaction 而影響的範圍可大可小, 資料庫引擎的複雜性可想而知了呢.
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 在做update動作時,是否有lock指令可以先判斷data是否已被lock, 若lock則show,一些訊息..,不曉指令如何下不知資料庫何種? 1.如果是 DB, DBF , BDE有提供LOCK原型(沒有封包成VCL PROPERITY), 可以鎖定 2.如果是CLIENT SERVER資料庫可以透過 Transaction(交易)方式來做, 在 EDIT前先對某一個欄位下 UPDATESQL填入註記 例如下例模式 ...... SQLupdate:= 'update ' Table_Name ' set NETMARK="1" ' wherekey; try aSQL.SQL.Clear; aSQL.SQL.Text:= SQLupdate; while not stopTry do try // 進行存入 flag 動作, 如果存入失敗表示被鎖住 if not aLockTrans.InTransaction then aLockTrans.StartTransaction; ...... aSQL.ExecQuery; result:= True; exit; except on E: Exception do begin aLockTrans.Rollback; aLockTrans.Active:= False; IDkey:= Application.MessageBox(pChar('【' recordstr '鎖定失敗】' dbfName #13 '是否再嘗試鎖定一次?' #13 cancelstr #13 #13 '【系統中斷說明】' E.Message),'網路錯誤', MB_ICONINFORMATION key MB_DEFBUTTON1); stopTry := IDkey<>ID_YES; netCancel := IDkey=ID_CANCEL; netRefresh:= IDkey=ID_YES; end; end; .....發表人 - P.D. 於 2003/10/07 00:23:37 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |