請問ADOConnection + TADOQuery 要如何做交易呢? |
尚未結案
|
saam
初階會員 發表:61 回覆:75 積分:27 註冊:2003-03-03 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如下方法﹕
在對資料庫進行任何異動之前先BeginTrins﹐即開始一筆新交易(使用BeginTrins方法的前提條件是必須已經和后端資料庫來源建立連接﹐即Connected屬性值為True)﹐确認之前開啟的交易時用CommitTrans﹐取消之前的交易用RollBackTrans﹐一般來講為了保持資料異動的一致性和正确性﹐我們使用交易功能﹐以下為較常見的使用方法﹕
begin Try ADOConnection1.BeginTrans; //開始交易 ADOQuery1.Insert; //Delete, Edit等 ADOQuery1.FieldByName('欄位名').Value := ...;//略 ADOQuery1.Post; ADOConnection1.CommitTrans; //确認交易 Except ADOConnection1.RollBackTrans; //取消交易 end; end;當然﹐除此以外﹐也可手動分別完成開始交易﹐确認交易﹐取消交易的功能 開始交易 begin ADOConnection1.BeginTrans; end; 确認交易 begin ADOConnection1.CommitTrans; end; 取消交易 begin ADOConnection1.RollBackTrans; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/16 09:19:35
------
忻晟 |
saam
初階會員 發表:61 回覆:75 積分:27 註冊:2003-03-03 發送簡訊給我 |
謝謝cashxin2002大大: 我寫了一串下面的程式~
發現有二個問題
1.資料表在ExecSQL執行後,在CommitTrans執行前,都會被鎖住,使用SQL Server
Enterprise Manager 連讀取都無法.要如何解決.
2.執行完成後,使用SQL Server Enterprise Manager 要刪除insert 的幾筆資料
都會出現 [索引鍵資料行資訊不足或不正確;太多資料行被更新所影響],
而刪不掉,為什麼呢? Try
//開始交易
adoConnCCDB.BeginTrans;
adoConnTCHDB.BeginTrans; TmpStr := 'Insert Into testcc(cc) values(''11'')';
adoQurCCDBTran.SQL.Clear;
adoQurCCDBTran.SQL.Add(TmpStr);
adoQurCCDBTran.ExecSQL; TmpStr := 'Insert Into testtt(tt) values(''22'')';
adoQurTCHDBTran.SQL.Clear;
adoQurTCHDBTran.SQL.Add(TmpStr);
adoQurTCHDBTran.ExecSQL; TmpStr := 'Insert Into testcc(cc) values(''33'')';
adoQurCCDBTran.SQL.Clear;
adoQurCCDBTran.SQL.Add(TmpStr);
adoQurCCDBTran.ExecSQL; adoConnCCDB.CommitTrans; //確認交易
adoConnTCHDB.CommitTrans; //確認交易
Except
on E: Exception do
begin
adoConnCCDB.RollBackTrans; //取消交易
adoConnTCHDB.RollBackTrans; //取消交易 Result := ' 寫入資料庫時發時錯誤!E.Message=' E.Message;
exit;
end;
end;
|
saam
初階會員 發表:61 回覆:75 積分:27 註冊:2003-03-03 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 亦是索引鍵的問題﹐檢查看看其它相關資料表是否有設索引﹒
您的SQL敘述中在語法上缺少了幾個空格﹐請見以下紅色下划線處即為空格
begin Try adoConnCCDB.BeginTrans; adoConnTCHDB.BeginTrans; TmpStr := 'Insert Into testcc_(cc) values_(''11'')'; adoQurCCDBTran.SQL.Clear; adoQurCCDBTran.SQL.Add(TmpStr); adoQurCCDBTran.ExecSQL; TmpStr := 'Insert Into testtt_(tt) values_(''22'')'; adoQurTCHDBTran.SQL.Clear; adoQurTCHDBTran.SQL.Add(TmpStr); adoQurTCHDBTran.ExecSQL; TmpStr := 'Insert Into testcc_(cc) values_(''33'')'; adoQurCCDBTran.SQL.Clear; adoQurCCDBTran.SQL.Add(TmpStr); adoQurCCDBTran.ExecSQL; adoConnCCDB.CommitTrans; //確認交易 adoConnTCHDB.CommitTrans; //確認交易 Except on E: Exception do begin adoConnCCDB.RollBackTrans; //取消交易 adoConnTCHDB.RollBackTrans; //取消交易 Result := ' 寫入資料庫時發時錯誤!E.Message='+ E.Message; exit; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/06/16 17:30:41
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |