在事务中封装SQL语句

4

我正在使用以下内容:

begin
dbmodule.comenziQuery.SQL.Clear;
dbmodule.comenziQuery.SQL.Add('INSERT INTO `r33758pi_tipotask`.`arhiva` SELECT id, data, stare, client, telefon, email, detalii, observatii, pret, livrare, user, status FROM comenzi WHERE `id`='''+inttostr(dbmodule.comenziDataSetid.Value)+''';');
dbmodule.comenziQuery.ExecSQL(true);

dbmodule.comenziQuery.SQL.Clear;
dbmodule.comenziQuery.SQL.Add('DELETE FROM `r33758pi_tipotask`.`comenzi` WHERE `id`='''+inttostr(dbmodule.comenziDataSetid.Value)+''';');
dbmodule.comenziQuery.ExecSQL(true);
end;

有谁能指导我如何将这个操作包装在事务中? 我以前从未使用过,我很难理解如何修改代码来添加它。

我正在尝试将其添加到transaction中,因为我已经读到了这是一个好的实践方法,因为如果其中一个失败,它就不会执行。

我尝试遵循这篇指南Some Guide,并随后使用其中提到的begin transactionbegin try,但我猜想那不是针对delphi代码的,或者什么原因导致没有成功。

希望代码没问题,请随时指出我可能犯的任何错误。

Delphi,使用Rad Studio 10 Seattle,TSQLQuery - 服务器是mysql - 如果我漏掉了任何内容,请在评论中告知我,我会进行编辑。


那么dblayer是什么?是dblibrary吗? - Drew
@Drew 非常感谢! :D - t1f
你应该使用 If SQLConnection1.TransactionsSupported Then - Ilyes
我不确定mysql是否能够做到这一点,但在sql server中,您可以将两个语句放在同一个调用中,而不是分别调用两次。 - GuidoG
@GuidoG 谢谢!我会继续寻找。 - t1f
显示剩余6条评论
1个回答

1

事务通常在SQL Server存储过程中使用,其中在BEGIN TRANSACTION和COMMIT TRANSACTION或ROLLBACK TRANSACTION语句之间有一块sql语句块。

不确定MySQL是否也是如此。

通常在SQL服务器上处理事务,而不是通过代码完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接