mysql - 提交 MySql + Zeos lib

标签 mysql sql delphi zeos

我使用下一个代码在非自动连接上发布一些记录:

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/

相关文章:

delphi - 使用Delphi进行P2P连接

php - 我可以通过基于文本框中的值与表中列中的值之间的匹配的表单向 MySQL 表添加值吗?

python - Pymysql UPDATE with %s 引发未知错误

php - 如何获取记录求和到一个值然后添加到两个新表中?

mysql - SQL查询选择表列中具有唯一记录的行?

sql - 如果我使用 PostgreSQL,我还需要服务器吗?像 AWS RDS?

delphi - 如何在 Indy (Delphi 10.3 Rio) 中修复 'Access violation at address 00660938 in module Project1.exe. Read of address 00000150.'

MySQL 触发器在更改或删除时触发

mysql - 将特定数据从一个 MySQL 表复制到另一个表

delphi - 在第一个程序启动时注册 COM 对象