【问题标题】:How can I execute a sql command with a blob param in dbx?如何在 dbx 中执行带有 blob 参数的 sql 命令?
【发布时间】:2008-11-28 14:26:38
【问题描述】:

我有一个 TSqlDataSet 有一个 blob 字段,我需要在提供者的 BeforeUpdateRecord 事件中获取这个 blob 字段的数据并执行更新命令,我试过这个:

Cmd := TSQLQuery.Create(nil);
try
  Cmd.SQLConnection := SQLConnection;
  Cmd.CommandText := 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID';
  Cmd.Params.CreateParam(ftBlob, 'PIMAGE ', ptInput).Value := DeltaDS.FieldByName('IMAGE').NewValue; //blob field
  Cmd.Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
  Cmd.ExecSQL;
finally
  Cmd.Free;
end;

当我执行时,我得到一个 EDatabaseError 消息:'No value for parameter PIMAGE.

我错过了什么?

【问题讨论】:

    标签: delphi dbx


    【解决方案1】:

    回答我自己的问题,正确的做法如下:

    const
      SQL = 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID;';
    var
      Params: TParams;
    begin
      Params := TParams.Create(nil);
      try
        Params.CreateParam(ftBlob, 'PIMAGE', ptInput).AsBlob := DeltaDS.FieldByName('IMAGE').NewValue;
        Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
        SQLConnection.Execute(SQL, Params);
      finally
        Params.Free;
      end;
    end;
    

    【讨论】:

      【解决方案2】:

      您是否尝试过使用其他驱动程序(例如 ODBC)进行测试?错误可能不在您的代码中。这种方法(更改数据提供者/驱动程序)帮助我解决了一些令人困惑的问题,这些问题最终证明不是我的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-31
        • 2014-07-20
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多