我使用下一段代码在非自动逗号连接上发布一些记录:
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表。
发布于 2013-03-15 11:14:57
解决了我的问题:
以下是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;https://stackoverflow.com/questions/15428452
复制相似问题