sql server中的事务写法 |
尚未結案
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
各位大大:
小弟又有问题了,下面的这一段code我用了delphi的事务处理,如果我想把这段code 完全改成用sql server的事务处理,请教该如何写,不胜感激! first.Database1.StartTransaction; //开始事务
try
query1.close;
query1.sql.clear;
query1.sql.add('INSERT INTO');
query1.sql.add('server.db.dbo.ml');
query1.sql.add('SELECT *');
query1.sql.add('FROM ml_temp1');
query1.prepare;
query1.execsql;
query1.close;
query1.sql.clear;
query1.sql.add('delete table aaa *');
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; 發表人 -
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
luowy651
高階會員 發表:257 回覆:313 積分:114 註冊:2003-04-09 發送簡訊給我 |
引言: 試試看:非常感谢Mickey大大的解答,其实我的主要目的是想用sql server的事务处理功能来代替delphi中的事务处理功能,我还想问一下: 1.我听说最好能将"if @@error!=0 goto error"再加上@@rowcount的判断会更保险,是这样吗?但不知该如何加上。有一本书是这样写的“if @@error!=0 or @@rowcount<>1 goto error ”,但我觉得似乎应该是 “if @@error!=0 or @@rowcount<>0 goto error ”,请问到底是怎样的 2.raiserror 40001 '发生错误,不能正常存盘!' 这一句提示语能在我所编的delphi软体中显示吗(即相当于application.messagebox功能)?如果不能,该用什么方法解决? 3.return是返回到哪里? 对不起,我入行不深,麻烦各位大大了 我已将其改成在delphi的code,如下,有问题吗?begin begin tran INSERT INTO server.db.dbo.ml SELECT * FROM ml_temp1 if @@error!=0 goto error delete table aaa * if @@error!=0 goto error commit transaction return error: raiserror 40001 '发生错误,不能正常存盘!' rollback transaction end adoquery1.sql.add('begin'); adoquery1.sql.add('begin tran'); adoquery1.sql.add('INSERT INTO server.db.dbo.ml SELECT * FROM ml_temp1'); adoquery1.sql.add('if @@error!=0 goto error'); adoquery1.sql.add('delete table aaa *'); adoquery1.sql.add('if @@error!=0 goto error'); adoquery1.sql.add('commit transaction'); adoquery1.sql.add('return'); adoquery1.sql.add('error:'); adoquery1.sql.add('raiserror 40001 '发生错误,不能正常存盘!''); adoquery1.sql.add('rollback transaction'); adoquery1.execsql; adoquery1.close; adoquery1.sql.clear; end發表人 - luowy651 於 2004/04/09 12:40:28< > < > 發表人 - luowy651 於 2004/04/09 13:47:58 發表人 - luowy651 於 2004/04/09 13:52:34 |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
1. @@rowcount 是....交易中之"受影響"資料列數, 若加入 if 條件也無訪. 2. raiserror 會顯現在前端, 像 Delphi 中 raise Exception.Create(...) 一樣. 3. adoquery1.sql.add('raiserror 40001 '#39'发生错误,不能正常存盘!'#39); // #39 = ' 4. ADOQuery.SQL 最後好像少了 "end". 發表人 - Mickey 於 2004/04/09 22:47:05
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |