隱式控制(預設): BDE 自動為每筆寫入操作建立獨立事務。優點:簡單、衝突最小;缺點:每筆記錄網路往返,效能低落、不適合批次業務。
顯式控制: 開發者決定事務邊界,兩大實作路徑:
SQLPASSTHROUGH MODE = NOT SHARED,直通伺服器原生事務語法(如 BEGIN TRANSACTION),利用進階特性(儲存點、分散式事務等)。| 成員 | 作用 |
|---|---|
StartTransaction | 在 TransIsolation 指定隔離等級下開啟事務 |
Commit | 永久保存修改並結束事務 |
Rollback | 撤銷修改並結束事務 |
TransIsolation | 控制併發事務可見性層級 |
| 等級 | 語義 | Oracle | Sybase | InterBase | MS SQL |
|---|---|---|---|---|---|
tiDirtyRead | 可讀未提交修改(最低隔離) | Read Committed | Read Committed | Read Committed | Read Committed |
tiReadCommitted (預設) | 僅可讀已提交修改 | Read Committed | Read Committed | Read Committed | Read Committed |
tiRepeatableRead | 事務期間資料快照不變(最高隔離) | Repeatable Read | 不支援 | Repeatable Read | Repeatable Read |
請求等級超過伺服器能力時,Delphi 自動升級至更高支援等級。
Database.StartTransaction;
try
Savings.Amount := Savings.Amount - 100; // 借方
Checking.Amount := Checking.Amount + 100; // 貸方
Database.Commit; // 兩筆同生共死
except
Database.Rollback; // 任一失敗全盤回滾
raise;
end;
Commit 必須包裹在 try...except 中處理併發衝突重試;Rollback 常用於異常處理或使用者取消操作。
TDatabase、NOT SHARED 模式、正確 SQL Links 配置。