我其中有一个BLOB字段放置一个TSQLDataSet,我需要得到这个BLOB字段的数据提供者的BeforeUpdateRecord事件和执行更新的命令,我已经试过这样:

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与信息:“的参数PIMAGE No值

我是什么失踪?

有帮助吗?

解决方案

回答我的问题,做了正确的方法如下:

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;

其他提示

您是否尝试过测试与另一个驱动程序(例如ODBC)?这有可能是错误是不是在你的代码。这种方法(改变数据提供商/驱动器),使我与原来一些容易混淆的问题,不是被雷到了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top