線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1571
推到 Plurk!
推到 Facebook!

DBexpress Transaction Commit 的問題

尚未結案
shyu_ting
一般會員


發表:13
回覆:25
積分:12
註冊:2002-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-01 21:48:38 IP:210.243.xxx.xxx 未訂閱
各位先進: 我使用DBexpress,Sqlquery,DatasetProvider,Clientdataset,DataBase為MSSQL 7.0 程式段中執行Transaction時,若兩人在還沒ApplyUpdate前取得同一 個單號(PK),當User_A執行ApplyUpdate的過程(未完成commit),User_B也執行同樣的動作,結果User_A的資料可以進DataBase,而User_B則沒辦法ApplyUpdate成功,如何將User_B的clientdataset的資料在單號重新給號之後applyupdate一次, 因為我遇到的問題就是User_B再執行一次ApplyUpdate,程式會出現Transaction already active而沒辦法再做applyupdate的動作.
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-01 22:52:30 IP:218.32.xxx.xxx 未訂閱
shyu_ting 你好:    你可以在 DataSetProvider.OnUpdateError Event 中, 重新給單號, 或將     Error Raise 出來, 以便將 Transaction RollBack, 以避免Transaction already active的Error, 或用 SQLConnection1.InTransaction 屬性, 判斷是否 SQLConnection 已於 Transaction 中.    如:
var
  Amt: Integer;
  TD: TTransactionDesc;
begin
  if not SQLConnection1.InTransaction then
  begin
    TD.TransactionID := 1;
    TD.IsolationLevel := xilREADCOMMITTED;
    SQLConnection1.StartTransaction(TD);
    try
      ...
      SQLConnection1.Commit(TD); {on success, commit the changes};
    except
      SQLConnection1.Rollback(TD); {on failure, undo the changes};
    end;
  end;
系統時間:2024-11-22 18:18:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!