環境:delphi XE7 +SQL 2008
問題:關于delphi資料庫多用戶操作問題
問題描述:
delphi使用控制元件:TADOConnection + TADOQuery + TDataSource + cxgrid + cxdbedit
ADOQuery.LockType:=adLockOptimistic;
每次只能對一條記錄進行“增刪改”;
增/改的程序:
單擊按鈕“新增”
dm.ADOConnection1.BeginTrans;
with dm.ADOQuery1 do
begin
open;
Edit;
append;
end;
----------需要一段時間來輸入----------
等待用戶在界面上更改資料,使用的是資料系結控制元件:cxdbedit
單擊按鈕“保存”
dm.ADOQurry1.post;
dm.ADOConnection1.CommitTrans;
問題:由于多用戶同時操作,且該程序話費時間比價久;
致使記錄A提交資料庫的時候“記錄已經被更改” ,導致資料保存失敗。
尤其用戶多的情況下。
若使用 ADOQuery.LockType:=adLockPessimistic ;
致使更改資料的時候,別的用戶無法使用訪問該資料,其他用戶等待時間過長
多用戶系統,更新欄位,該用哪種方法比較合適?
uj5u.com熱心網友回復:
并發不都這樣嗎?后保存的人只能算他倒霉.
誰讓他跟人家搶同一條資料沒搶的過人家的.
uj5u.com熱心網友回復:
你是通過ADOQuery.LockType:=adLockOptimistic查找資料行,相應的資料集只有一條(行),當然只能對一條進行增刪改了。
uj5u.com熱心網友回復:
最好是三層結構,在應用服務器端操作資料庫。或者是執行SQL陳述句,“update table set 。。。。”, 讓資料庫自己決定誰來更改。
uj5u.com熱心網友回復:
增刪改不是應該對主鍵操作么?怎么會保存失敗呢????????如果是自增ID,也是資料庫主鍵自動判斷遞增啊uj5u.com熱心網友回復:
多用戶操作,不可以增加多條,你就只能鎖定,有人編輯,其他人不可操作。感覺最好還是點下新加就是一條新資料,并且鎖定用戶。uj5u.com熱心網友回復:
我都不用ado 我都用dbexpress來訪問資料庫uj5u.com熱心網友回復:
C/S通病,所以一般按角色分開操作。但是可定存在多個用戶編輯。一種辦法就是編輯一條更新一條。另外同時編輯同一條記錄情況太特殊了。主鍵是唯一的。uj5u.com熱心網友回復:
寫法有問題應該使用tclientdataset,提交其delta保存,不能直接打開資料表,同時打開事務,嚴重不能這樣操作。uj5u.com熱心網友回復:
用多用戶的話最好還是INSERT+UPDATE,不建議使用其他技巧了,不然隨著資料量越大,發生錯誤的機率越大uj5u.com熱心網友回復:
多用戶操作同一條記錄,如果修改的同一條記錄的同一個欄位,那還有什么意義。如果是修改不同欄位,那弄個狀態,形成作業流。
uj5u.com熱心網友回復:
建議使用DataSnap三層。這樣,服務器的資料,各用戶,可以隨時讀取資料。當別人修改后。其它用戶,讀取的就是新的資料。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69273.html
標籤:數據庫相關
