2

BLOB フィールドを持つ TSqlDataSet があります。プロバイダーの 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;

それを実行すると、「パラメーター PIMAGE の値がありません。

私は何が欠けていますか?

4

2 に答える 2

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;
于 2008-12-01T12:16:33.857 に答える
0

別のドライバー (ODBC など) でテストを試みましたか? エラーがコードにない可能性があります。このアプローチ (データ プロバイダー/ドライバーの変更) は、私のものではないことが判明したいくつかの紛らわしい問題を解決するのに役立ちました。

于 2008-11-29T02:56:54.270 に答える