procedure TfmeEvtReg.SaveInsert();
begin
////////////////////////////////
代码块A//////////////////////////////// 代码块B
/////////////////////////////////效果要求如下
//在整个程序代码的执行过程中,一但遇到错误就取消所有的执行
//就像数据库的事务一样,要不全部给我执行该过程,要不全部都不执行//晕,有点不太可能,因为代码块A和代码块B中都有数据库的insert记录
//***********而且是A中插入1条记录,B中就会插入几条(数目确定)记录(数据来自delphi界面)的那种情况*********
//嗯嗯,是个值得琢磨的问题。
end;
begin
////////////////////////////////
代码块A//////////////////////////////// 代码块B
/////////////////////////////////效果要求如下
//在整个程序代码的执行过程中,一但遇到错误就取消所有的执行
//就像数据库的事务一样,要不全部给我执行该过程,要不全部都不执行//晕,有点不太可能,因为代码块A和代码块B中都有数据库的insert记录
//***********而且是A中插入1条记录,B中就会插入几条(数目确定)记录(数据来自delphi界面)的那种情况*********
//嗯嗯,是个值得琢磨的问题。
end;
解决方案 »
- 请教制作三层服务端的问题
- 为什么用delphi做的浏览器,在打开一个有activex的网页时,无法显示提示信息,而ie却可以
- 一个巨简单的问题,关于DBGrid的
- 请教前辈关于“记事本”编写中遇到的问题?
- 初级问题
- 问:Numeric 类型和String 类型的互换。请朋友们进来帮帮忙。(在线等待)
- 奇了怪了,我下载的XP风格的菜单,安装后不能用,有谁用过,可以告诉我是在什么地方下载的呀,如何安装和使用呀?
- getkeystate 返回值问题?
- 我为何收不到EMAIL通知了?
- Delphi开发数据库应用中,ADOTable等DataSet的CacheSize属性不起作用?
- 在不上网的情况下怎么演示该软件,请指教?
- 用delphi能开发火狐的工具栏么?
代码块B
insert操作的表是不同的。
你的方法不太可行
因为我使用oracle数据库,临时表跟mssql区别很大,
oracle一般不建议动态建表
很久不用,语法一时也想不起,用pascal语法,对mssql操作,对oracle时好象不可以用分号分隔一句sql的,在一个
C#的帖子象看到过是使用begin end;来分隔的
sql:='insert into values(1,''xyz'')'
for i:=0 to n do//n为插入从表ts的不定记录数
sql:=sql + ';insert into ts values(i,''' + intostrdef(i,0) + ''')'
conn.beginTran
conn.execute(sql);
on Error GoTo ErrHandler;
conn.commitTran;
//错误处理
ErrHandler:conn.RollBackTran;//delphi不知道是否可以这样做
vb中可以用分号来分隔单句的sql,但delphi的adoquery.add方法测试过是不可以的
try
qry.beginTran;
qry.sql.add('insert into values(1,''xyz'')');
for i:=0 to n do
qry.sql.add()'insert into ts values(i,''' + intostrdef(i,0) + ''')';
qry.execsql;
qry.commitTran;
except
qry.RollBackTran;
end;
//如果在执行sql之前qry.sql.add可以反复的add进SQL的话,那么也是很好解决这个问题的^o^
事务可以直接写在sql变量中
sql:= 'begin set xact_abort begintran insert into values(1, ' 'xyz ' ') '
for i:=0 to n do//n为插入从表ts的不定记录数
sql:=sql + ';insert into ts values(i, ' ' ' + intostrdef(i,0) + ' ' ') commit tran'
conn.execute(sql);
// ADODataSet_Detail.LockType := ltBatchOptimistic;
try
ADOConnection1.beginTran;
ADODataSet_Main.Insert;
// Insert Main data
ADODataSet_Main.Post;
for i := 0 to n begin
ADODataSet_Detail.Insert;
// Insert Detail data
ADODataSet_Detail.Post;
end;
ADOConnection1.commitTran;
except
ADOConnection1.RollBack;
end;
谢谢楼上大兄
try
...
exception
adoconnect1.RollbackTran;
end;不明白 看不懂 以上几行是否合题意?
========================_-## 我话的意思是说我不明白你题目的意思 怕回答简单了 然后你得出了"你对ADO如何执行SQL不懂而已"这样的结论...