TADOCommand 如何達到 roolback 的功能 |
答題得分者是:bestlong
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
各位大大:
請問 TADOCommand 如何做 Roolback,我有一段程式如下 :
procedure TsysMainFrm.Button1Click(Sender: TObject); var cmd: TADOCommand; FConnection: TADOConnection; begin FConnection := sysCommDM.AdoConn; cmd:=TADOCommand.Create(self); cmd.Connection:=FConnection; try FConnection.BeginTrans; while not qry.eof do begin cmd.CommandText:='insert into onlinesysnc_error (price)' ' values(:price)'; cmd.Parameters.ParamByName'price').Value:=qry.FieldByName'price').AsFloat); cmd.Execute; qry.next; end; if qry.recordcount>10 then FConnection.RollbackTrans; FConnection.CommitTrans; except FConnection.RollbackTrans; end; end;我故意讓程式執行十筆之後,做roolback 的動作, 但好像無法達到Rollback 的 功能,前十筆一樣會寫入資料庫,如果我將cmd.Execute; 這行拿掉,則不管成功或失敗,什麼都不會寫入,不知那裡錯了,謝謝 如果愛情也有味覺 那麼 有沒有ㄧ種愛 微微泛酸 不太苦澀 有點甜密 嚐起來的滋味讓人想起幸福 Thomas Chiou
------
Thomas Chiou |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 改成如下試試﹕
procedure TsysMainFrm.Button1Click(Sender: TObject); var cmd: TADOCommand; FConnection: TADOConnection; begin FConnection := sysCommDM.AdoConn; cmd:=TADOCommand.Create(self); cmd.Connection:=FConnection; try FConnection.BeginTrans; while not qry.eof do begin cmd.CommandText:='insert into onlinesysnc_error (price)'+ ' values(:price)'; cmd.Parameters.ParamByName'price').Value:=qry.FieldByName'price').AsFloat); cmd.Execute; qry.next; if qry.recordcount>10 then begin FConnection.RollbackTrans; Exit; end; end; FConnection.CommitTrans; except FConnection.RollbackTrans; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗
procedure TsysMainFrm.Button1Click(Sender: TObject); var cmd: TADOCommand; FConnection: TADOConnection; begin FConnection := sysCommDM.AdoConn; cmd:=TADOCommand.Create(self); cmd.Connection:=FConnection; try FConnection.BeginTrans; while not qry.eof do begin cmd.CommandText:='insert into onlinesysnc_error (price)'+ ' values(:price)'; cmd.Parameters.ParamByName'price').Value:=qry.FieldByName'price').AsFloat); cmd.Execute; qry.next; if qry.RecNo>10 then begin FConnection.RollbackTrans; Exit; end; end; FConnection.CommitTrans; except FConnection.RollbackTrans; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
懷舊的人
高階會員 發表:28 回覆:152 積分:141 註冊:2003-01-08 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
BOSS
中階會員 發表:70 回覆:79 積分:64 註冊:2006-11-01 發送簡訊給我 |
FConnection := sysCommDM.AdoConn; cmd:=TADOCommand.Create(self); cmd.Connection:=FConnection; try FConnection.BeginTrans; while not qry.eof do begin cmd.CommandText:='insert into onlinesysnc_error (price)' ' values(:price)'; cmd.Parameters.ParamByName'price').Value:=qry.FieldByName'price').AsFloat); cmd.Execute; qry.next; end; 改成這樣 if qry.recordcount>10 then FConnection.RollbackTrans else FConnection.CommitTrans; except FConnection.RollbackTrans; end; |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
懷舊的人
高階會員 發表:28 回覆:152 積分:141 註冊:2003-01-08 發送簡訊給我 |
|
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
|
whyzn
中階會員 發表:46 回覆:149 積分:54 註冊:2002-06-16 發送簡訊給我 |
雞婆一下
procedure TsysMainFrm.Button1Click(Sender: TObject); var cmd: TADOCommand; FConnection: TADOConnection; begin FConnection := sysCommDM.AdoConn; cmd:=TADOCommand.Create(self); cmd.Connection:=FConnection; try cmd.Connection.BeginTrans; while not qry.eof do begin cmd.CommandText:='insert into onlinesysnc_error (price)' ' values(:price)'; cmd.Parameters.ParamByName'price').Value:=qry.FieldByName'price').AsFloat); cmd.Execute; qry.next; end; if qry.recordcount>10 then cmd.Connection.RollbackTrans; cmd.Connection.CommitTrans; except cmd.Connection.RollbackTrans; end; end;[red] ●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛
------
●○○○○○●○○○○○● 竹密不妨水過,山高無礙雲飛 |
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
首先 MySQL 5 還是發展中的版本, 使用上有可能會出現問題. 可是 MySQL 4 有開始支援 Transaction 是沒錯, 但是請注意只是指有支援喔, 並不代表使用者所建立的 database, table 就一定是啟動 Transaction 的功能. 而是在建立 Table 時所指定的參數以及 MySQL DB Server 的預設環境設定來決定. 請針對所連接的 batabase 執行 show table status 的 SQL 指令, 請確認顯示結果中的 Eengine 欄必須是 InnoDB 的 Table 才有支援 Transaction . 詳細資料建議參考 MySQL 說明文件. 雪龍
http://bestlong.no-ip.com/
學海無涯覺無盡,勤做筆記防失憶 發表人 - bestlong 於 2005/06/13 21:41:55
------
http://blog.bestlong.idv.tw/ http://www.bestlong.idv.tw/ http://delphi-ktop.bestlong.idv.tw/ |
thomas0728
中階會員 發表:112 回覆:260 積分:89 註冊:2002-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |