嗨,我有一个使用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发送给DB的包含值的内容,以便我可以跟踪出了什么问题?
我试着向SQLConnection添加一个日志事件,但是不知道如何让它生成日志。

最佳答案

根据我的经验,EditPostApplyUpdates方法与TClientDataSet结合使用。在这种情况下,您只需为CD中的字段分配新值(导航到要编辑的记录后),然后发布这些更改(不需要更新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,无法使DB Update运行。如何预览正在提交的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17929113/

10-11 03:46