Как выполнить команду sql с параметром blob в dbx? - PullRequest
2 голосов
/ 28 ноября 2008

У меня есть TSqlDataSet, который имеет поле большого двоичного объекта, мне нужно получить данные этого поля большого двоичного объекта в событии 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.

Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 01 декабря 2008

Отвечая на мой вопрос, правильный способ сделать это следующий:

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 голосов
/ 29 ноября 2008

Вы пробовали тестировать с другим драйвером (например, ODBC)? Возможно, что ошибка не в вашем коде. Этот подход (смена поставщиков данных / драйверов) помог мне с некоторыми запутанными проблемами, которые оказались не моими.

...