2008-11-28 75 views
2

我已经具有BLOB字段放置一个TSQLDataSet,我需要得到这个BLOB字段的数据提供者的BeforeUpdateRecord事件和执行更新的命令,我已经试过这样:如何在dbx中使用blob参数执行sql命令?

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没有值。

我错过了什么?

回答

2

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

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; 
0

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