那是因为你并没有启动事务,可以用如下方法:try query1.Database.StartTransaction;//启动事务 //写库操作 if 操作成功 then begin query1.Database.Commit;//成功则提交 end else begin query1.Database.Rollback;//异常也回滚 //出错信息提示 end except //异常提示 query1.Database.Rollback; end;不过在数据库编程上,现在基本不用BDE,除非非技术因素或者数据库不提供OLEDB。ADO是目前比较好的选择。
不管是這麼寫, procedure TForm1.Button1Click(Sender: TObject); begin query1.First ; try query1.Database.StartTransaction ; query1.Delete ; query1.Database.Commit ; except query1.Database.Rollback ; end; end; 是這麼寫: procedure TForm1.Button1Click(Sender: TObject); begin query1.First ; query1.Delete ; try Database1.StartTransaction ; query1.ApplyUpdates ; query1.CommitUpdates ; Database1.Commit ; except Database1.Rollback ; query1.CancelUpdates ; end; end;都是發生no user transaction is currently in progress這個錯誤。 也就是說在執行starttransaction 這句就產生錯誤了。
procedure TForm1.Button1Click(Sender: TObject); begin query1.First ; try if not query1.Database.InTransaction then begin query1.Database.StartTransaction ; query1.Delete ; query1.Database.Commit ; end; except query1.Database.Rollback ; end; end;这样应该行了
還是不行,一樣的錯誤 在執行query1.Database.StartTransaction ;產生錯誤,提示信息為 "the transation isolation level must be dirty read for local databases" 然後程序跳到query1.Database.Rollback ; 再產生錯誤no user transaction is currently in progress
但要求query1,query2的新增必需一起成功,不然就取消操作,都不新增。不能只完成其中一個。
就是這樣。
query1.Database.StartTransaction;//启动事务
//写库操作
if 操作成功 then
begin
query1.Database.Commit;//成功则提交
end
else begin
query1.Database.Rollback;//异常也回滚
//出错信息提示
end
except
//异常提示
query1.Database.Rollback;
end;不过在数据库编程上,现在基本不用BDE,除非非技术因素或者数据库不提供OLEDB。ADO是目前比较好的选择。
procedure TForm1.Button1Click(Sender: TObject);
begin
query1.First ;
try
query1.Database.StartTransaction ;
query1.Delete ;
query1.Database.Commit ;
except
query1.Database.Rollback ;
end;
end; 是這麼寫:
procedure TForm1.Button1Click(Sender: TObject);
begin
query1.First ;
query1.Delete ;
try
Database1.StartTransaction ;
query1.ApplyUpdates ;
query1.CommitUpdates ;
Database1.Commit ;
except
Database1.Rollback ;
query1.CancelUpdates ;
end;
end;都是發生no user transaction is currently in progress這個錯誤。
也就是說在執行starttransaction 這句就產生錯誤了。
begin
query1.First ;
try
if not query1.Database.InTransaction then
begin
query1.Database.StartTransaction ;
query1.Delete ;
query1.Database.Commit ;
end;
except
query1.Database.Rollback ;
end;
end;这样应该行了
在執行query1.Database.StartTransaction ;產生錯誤,提示信息為
"the transation isolation level must be dirty read for local databases"
然後程序跳到query1.Database.Rollback ;
再產生錯誤no user transaction is currently in progress