数据库database组件的问题,大家来拿分

pgz_007 2008-06-05 04:38:47
请问用database组件能实现回滚吗?发现执行一半停止后数据也没有回滚,改了一个表,另外一个没动。 paradox数据库的
database1.Close;
database1.Connected:=false;
database1.DriverName:='STANDARD';
database1.Params.Values['path']:='.';
database1.Open;
database1.Connected:=true;

query1.Close;
query2.Close;
query1.DatabaseName:='dbwork';
query2.DatabaseName:='dbwork';

query2.SQL.Clear;

database1.StartTransaction;
try
query2.SQL.Add('update outbill set type=''9'',oprid=:oprid where outbhid=:outbhid ');
query2.ParamByName('outbhid').AsString:=trim(edit1.Text);
query2.ParamByName('oprid').AsString:=trim(gmusername);
query2.ExecSQL;

for i:=0 to R_length do
begin
clbhid:=RecordArray[i].name;
tlsl:=RecordArray[i].value;

query1.SQL.Clear;
query1.SQL.Add('update material set kcsl=kcsl+:tlsl where clbhid=:clbhid ');
query1.ParamByName('clbhid').AsString:=trim(clbhid);
query1.ParamByName('tlsl').AsFloat:=abs(tlsl);
query1.ExecSQL; //执行到这里报错 record locked by another user
end;
except
database1.Rollback;
end;
end;

另外,query在循环中报错 record locked by another user
...全文
80 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pgz_007 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 XavierDelphi 的回复:]
record locked by another user
资源冲突了
[/Quote]

我的query的sql都clear了啊,难道要在循环里面加上query1.close?
DumDum 2008-06-05
  • 打赏
  • 举报
回复
可以回滚的~~!
我TMD就是天才 2008-06-05
  • 打赏
  • 举报
回复
record locked by another user
资源冲突了
我TMD就是天才 2008-06-05
  • 打赏
  • 举报
回复
ADOConnection1.BeginTrans; //开始事务
Try //异常保护
......
......
......
......
ADOConnection1.CommitTrans; //提交事务
except //如有异常执行下一句
ADOConnection1.RollbackTrans; //回滚事务
end;

你得先编译成Exe,然后执行Exe时报错的话才会进入异常处理回滚数据
你在Delphi里面运行的话照样会报错的..

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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