数据库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
...全文
47 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pgz_007 2008-06-05
[Quote=引用 2 楼 XavierDelphi 的回复:]
record locked by another user
资源冲突了
[/Quote]

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

你得先编译成Exe,然后执行Exe时报错的话才会进入异常处理回滚数据
你在Delphi里面运行的话照样会报错的..
回复
发帖
数据库相关
创建于2007-08-02

2451

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2008-06-05 04:38
社区公告
暂无公告