1. 程式人生 > >UpdateBatch與事務處理的一點總結

UpdateBatch與事務處理的一點總結

對於某些設定或者提交,如果希望是全部修改完畢後才確定生效,可以將DataSet的LockType:=ltBatchOptimistic,這樣就可以了。然後每次做的修改和改動都暫時儲存在快取中,必須通過UpdateBatch來提交入庫。可以通過判斷DataSet的UpdateStatus屬性是否為usUnmodified就可以知道先前是否已經提交了改動了。

注意:對於使用者已經Edit,但是未提交的修改,也要注意提示使用者儲存。由於沒有提交前UpdateStatus並沒有發生變化,所以還要注意判斷是否ADOTable1.State=dsBrowse,以便提示使用者是否儲存。

    if (ADOTable1.UpdateStatus<>usUnmodified) or (Not (ADOTable1.State=dsBrowse)) then
    begin
    end;

這個用法也可以通過事務實現,操作前先通過ADOConnection的BeginTrans開始事務,提交修改是CommitTrans,回滾是RollbackTrans,判斷是否處於事務中讀取InTransaction屬性即可。事務也有一個缺點,就是DataSet沒有事務,如果多個DataSet使用一個ADOConnection,如果使用事務勢必影響其他操作。而且有文章說事務處理起來比較耗費資源,至少比UpdateBatch費資源,呵呵~