2008-11-28 74 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)進行測試?錯誤可能不在您的代碼中。這種方法(改變數據提供者/驅動程序)幫助我解決了一些令人困惑的問題,這些問題並不是我的。