请问用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
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
Try //异常保护
......
......
......
......
ADOConnection1.CommitTrans; //提交事务
except //如有异常执行下一句
ADOConnection1.RollbackTrans; //回滚事务
end;你得先编译成Exe,然后执行Exe时报错的话才会进入异常处理回滚数据
你在Delphi里面运行的话照样会报错的..
资源冲突了
我的query的sql都clear了啊,难道要在循环里面加上query1.close?