事务与存储过程?

xZJJ 2003-06-02 07:52:20
有下面一段代码:
cdsmat.First;
if not dm.adoconn.InTransaction then
dm.adoconn.BeginTrans ;
try
while not cdsmat.Eof do
begin
adospcreat_iss.Parameters.ParamByName('@comid').Value:='aaa';
adospcreat_iss.Parameters.ParamByName('@matno').Value:=cdsmat.fieldbyname('matno').AsString;
...
adospcreat_iss.Parameters.ParamByName('@bz').Value:=bz;
adospcreat_iss.Parameters.ParamByName('@id').Value:=id; //传递参数
adospcreat_iss.Prepared;
adospcreat_iss.ExecProc;
cdsmat.Next;
dm.adoconn.CommitTrans;
except
dm.adoconn.RollbackTrans;
raise;
end;

在循环过程中调用了存储过程,直接插入数据到表中,那么如果在循环过程中发生了问题,不是在发生问题以前的记录都插入数据库中了吗?这个事务好像没有发挥作用了?
请问这种情况应该如何去做才对?
谢谢
...全文
50 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xZJJ 2003-06-02
  • 打赏
  • 举报
回复
哦,现在好了!开心,也不知道刚才是怎么回事?
谢谢大家,结贴!
xZJJ 2003-06-02
  • 打赏
  • 举报
回复
哦。对了,贴出的代码中,在next后面少了一个end;
应该和things(平)的结构一样的,为什么结果会不一样
zhaofuquan 2003-06-02
  • 打赏
  • 举报
回复
同意things(平)
xZJJ 2003-06-02
  • 打赏
  • 举报
回复
楼上的两位:
好像结果不是这样:
比如说,cdsmat中有两条记录,当第一次循环时,插入数据正常,当第二次循环时,插入数据时出现“关键字重复”的错误,此时,我到数据库表中看了一下,发现表中增加了一条记录,这样就不对了啊
bbs791109 2003-06-02
  • 打赏
  • 举报
回复
如果如果在循环过程中发生了问题﹐存儲過程是不會提交結果的。不用提心。
things 2003-06-02
  • 打赏
  • 举报
回复
try
while not cdsmat.Eof do
begin
adospcreat_iss.Parameters.ParamByName('@comid').Value:='aaa';
...
adospcreat_iss.Prepared;
adospcreat_iss.ExecProc;
cdsmat.Next;
end;
{只要在循环中不提交,adospcreat_iss.ExecProc出错后会全部回滚,否则提交肯定没问题}
dm.adoconn.CommitTrans;
except
dm.adoconn.RollbackTrans;
end;

5,402

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧