gpt4 book ai didi

mysql - Lazarus,无法使数据库更新工作。我如何预览提交的内容?

转载 作者:行者123 更新时间:2023-11-29 01:42:10 27 4
gpt4 key购买 nike

您好,我有一个使用 TMySQL51Connection、TSQLTransaction 和 TSQLQuery 模块的表单设置,它可以毫无问题地从数据库中检索信息,但我在更新时遇到了问题。

数据库非常大,所以我只从第一对行开始,一旦它们开始工作,我将扩展查询。

我的TSQLQuery.UpdateSQL如下

UPDATE table SET
ContactFirst = :ContactFirst,
ContactSur = :ContactSur
WHERE AccountID = :AccountID

然后我的表单中有一个按钮,onCLick 事件包含:

begin
accSelect.Edit;
accSelect.Post;
accSelect.ApplyUpdates;
dbTransaction.CommitRetaining;
sqlbl1.Caption := accSelect.UpdateSQL;
end;

单击按钮对数据库没有任何作用,它不会生成错误消息,只会更新 sqlbl1 上的标题。无论如何,是否可以预览 Lazarus 向数据库发送的内容以及包含的值,以便我可以找出问题所在?

我尝试将日志记录事件添加到 SQLConnection,但无法弄清楚如何让它生成日志。

最佳答案

根据我的经验,EditPostApplyUpdates 方法与 TClientDataSet 一起使用。在这种情况下,您只需为 CDS 中的字段分配新值( 导航到您要编辑的记录后),然后发布这些更改(不需要更新 SQL 语句)。像这样的……

MyCDS.Edit;
MyCDS.FieldByName('ContactFirst').Value := sContactFirstName;
MyCDS.FieldByName('ContactSur').Value := sContactSurname;
MyCDS.Post;
MyCDS.ApplyUpdates;

或者,您可以使用查询组件,将 UPDATE SQL 写入 SQL 属性,然后使用 ExecSQL 或为该组件实现的任何方法(有许多数据库访问组件,每个组件都有他们自己的特质)

这是我头脑中的一些代码。请原谅,我不熟悉 Lazarus 的具体细节 - 它基本上是 Delphi 代码。

MySQLQuery.SQL.Clear;
MySQLQuery.SQL := 'UPDATE MyTable
SET ContactFirst = :ContactFirst,
ContactSur = :ContactSur
WHERE AccountID = :AccountID';
MySQLQuery.Params.ParamByName('ContactFirst').Value := sContactFirstName;
MySQLQuery.Params.ParamByName('ContactSur').Value := sContactSurname;
MySQLQuery.Params.ParamByName('AccountID').Value := iAccountID;
try
MySQLQuery.ExecSQL;
ShowMessage('Update succeeded');
except on e: Exception do
ShowMessage(e.Message);
end;

所以这可能是您最终使用了两种方法的一半,而没有完全使用它们。

关于mysql - Lazarus,无法使数据库更新工作。我如何预览提交的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17929113/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com