Как выполнить команду sql с параметром blob в dbx?
Вопрос
У меня есть 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.
Что мне не хватает?
Решение
Отвечая на мой вопрос, правильно сделать это следующим образом:
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)? Возможно, что ошибка не в вашем коде. Этот подход (изменение поставщиков данных / драйверов) помог мне с некоторыми запутанными проблемами, которые оказались не моими.
Не связан с StackOverflow