我使用下一个代码在非自动连接上发布一些记录:
ZConnection1.AutoCommit := False;
try
ZTable1.Insert;
ZTable1.FieldByName('name').AsString := 'John Doe';
ZTable1.Post;
ZConnection1.Commit;
except
ZConnection1.Rollback;
end;
当我运行这段代码时,我的数据库中没有任何内容。
在我尝试下一个代码之后......
ZConnection1.AutoCommit := False;
with ZQuery1 do begin
SQL.Text := 'INSERT INTO mytable (name) values ("John Doe")';
ExecSQL;
SQL.Text := SQL.Text + 'COMMIT' ;
try
ExecSQL;
except
SQL.Text := 'ROLLBACK';
ExecSQL;
end;
end;
...一切都很完美。
第一种情况我做错了什么?我使用 Delphi6、MySql、Zeos 库和 InnoDB 表。
最佳答案
解决了我的问题:
这就是 AutoCommit
属性在 Zeos 中的实际工作方式:
- 当
AutoCommit
为 True 时,事务会在每次执行 SQL 语句后自动提交,但您可以使用StartTransaction
命令显式阻止此自动提交,直到您显式调用Commit
。 - 当
AutoCommit
为 False 时,您不应调用StartTransaction
。然后事务自动启动,但不会在每次执行语句后自动提交。
ZConnection1.AutoCommit := True;
ZConnection1.StartTransaction;
try
ZTable1.Insert;
ZTable1.FieldByName('name').AsString := 'John Doe';
ZTable1.Post;
ZConnection1.Commit;
except
ZConnection1.Rollback;
end;
关于mysql - 提交 MySql + Zeos lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428452/