No user transaction is currently in progress..... |
尚未結案
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
各位高手:
我碰到了一个很困惑的问题,我前台使用delphi5,后台使用sql7.0,
在我的前台中我使用了如下程式,但奇怪的是我在单机上可以实现,完全正常,
但在局域网上却不能实现,并出现以下提示:
"No user transaction is currently in progress. The ROLLBACK TRANSACTION Request has no corresponding BEGIN TRANSACTION." code如下:
first.Database1.StartTransaction; //开始事务
...
first.Database1.Commit; //提交事务
...
first.Database1.Rollback;
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 關於 StartTransaction 的用法,delphi 中 Help Example 如下
procedure TForm1.ApplyButtonClick(Sender: TObject); begin with CustomerQuery do begin Database1.StartTransaction; try ApplyUpdates; {try to write the updates to the database}; Database1.Commit; {on success, commit the changes}; except Database1.Rollback; {on failure, undo the changes}; raise; {raise the exception to prevent a call to CommitUpdates!} end; CommitUpdates; {on success, clear the cache} end; end;你可以試試看,應該不會有問題,此外,DataBase 的 HandleShared 必須設為 True -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
问题还是存在,我的code如下:
first.Database1.StartTransaction; //开始事务
try
query1.close;
query1.sql.clear;
query1.sql.add('INSERT INTO');
query1.sql.add(first.edit2.text);
query1.sql.add('.');
query1.sql.add(first.edit3.text);
query1.sql.add('.dbo.ml');
query1.sql.add('SELECT *');
query1.sql.add('FROM ml_temp1');
query1.prepare;
query1.execsql;
query1.close;
query1.sql.clear;
first.Database1.Commit; //提交事务
except begin
Application.Messagebox('发生错误,不能正常存盘!','信息',mb_Ok mb_Iconinformation);
first.Database1.Rollback;
application.Terminate;
end; 在单机上时,所有的事务功能我试过都很正确,但只要连到局域网上就出错,不过如果我把“Database1.StartTransaction;Database1.Commit;Database1.Rollback; ”注释掉,就正常了,只是这样不就没有事务功能了吗?
多谢!
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 问题还是存在,我的code如下: if not first.Database1.InTransaction then first.Database1.StartTransaction; //开始事务 try query1.close; query1.sql.clear; query1.sql.add('INSERT INTO'); query1.sql.add(first.edit2.text); query1.sql.add('.'); query1.sql.add(first.edit3.text); query1.sql.add('.dbo.ml'); query1.sql.add('SELECT *'); query1.sql.add('FROM ml_temp1'); query1.prepare; query1.execsql; query1.close; query1.sql.clear; first.Database1.Commit; //提交事务 except begin Application.Messagebox('发生错误,不能正常存盘!','信息',mb_Ok mb_Iconinformation); first.Database1.Rollback; application.Terminate; end; 在单机上时,所有的事务功能我试过都很正确,但只要连到局域网上就出错,不过如果我把“Database1.StartTransaction;Database1.Commit;Database1.Rollback; ”注释掉,就正常了,只是这样不就没有事务功能了吗? 多谢!加上紅色字體部分試試看 天行健 君子當自強不息~~@.@
------
天行健 君子當自強不息~~@.@ |
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi: 因我慣用的 DataBase 為 Oracle 我用此來舉例,當以下程式在 insert or delete 出現錯誤訊息時,皆會回復至原始狀態
begin insert into aaa select * from bbb; delete from bbb; commit; exception when others then rollback; end;SQL Server 寫法我就不知道了,不過觀念大致上是這樣 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman |
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
xriz8989
一般會員 發表:0 回覆:3 積分:0 註冊:2003-06-30 發送簡訊給我 |
luowy651 你好, 剛剛才看到這個問題.. TQuery.ExecSql 這個指令--用錯了,它本身就已經完成所有transaction.
所以當發生交易失敗時 try..except.. 會觸發database.rollback;
而此時因 'execsql' 已經完成 transaction,
所以會得到無交易狀況下之rollback Error TQuery.ExecSql...單一資料表...偶爾為之尚可. 針對BDE的資料元件進行交易管控(transaction)不能使用此方式. 另外由此引發的問題--如果要進行多table之transaction該如何?
如果仍舊使用你原始的方法...一定無法ROLLBACK! 下列是我常用的方式(適用各種資料庫): try
db.startransaction.
query1.close;
query1.RequestLive := true;
query1.SQL.Clear;
query1.SQL.Add(必要的SQL語法);
query1.active := true;
{進行資料必要之編輯q.Edit(insert)...q.Post; ...很繁瑣...
但是若要使用TQuery or TTable進行資料異動,
還是得乖乖的使用傳統流程..尤其是多資料表之異動} query2.active := false;
query2.RequestLive := true;
query2.SQL.Clear;
query2.SQL.Add(必要的SQL語法);
query2.active := true;
{... edit...post ...} ... ... ...
... ... ...
db.commit;
except
db.rollback;
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |