Пытаюсь загрузить файл в БД (MySQL), в blob-поле (маленькую, до 50kb картинку - формат jpg).
Но вот что-то у меня идёт не так:
var
ImgPath: String;
begin
ImgPath:=ExtractFilePath(ParamStr(0))+'data\photo.jpg';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('UPDATE exam_users SET `photo`=(:fphoto) WHERE `number` = 94');
ADOQuery1.parameters.parambyname('fphoto').LoadFromFile(ImgPath, ftBlob);
ADOQuery1.ExecSQL;
ADOQuery1.Close;
end;
также пробовал и так:
var
ImgPath: String;
fs:TFileStream;
begin
ImgPath:=ExtractFilePath(ParamStr(0))+'data\photo.jpg';
fs :=TFileStream.Create(ImgPath, fmOpenRead or fmShareDenyWrite);
ADOQuery1.SQL.ADD('UPDATE exam_users SET `photo`=(:fphoto) WHERE `number` = 94');
ADOQuery1.Parameters.ParamByName('fphoto').LoadFromStream(fs, ftBlob);
ADOQuery1.ExecSQL;
fs.Free;
ADOQuery1.Close;
end;
Все эти два примера выдают одну ошибку:
Project Project2.exe raised exception class EOleException with message 'Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом'.
Ответ
Вернулся снова в проекте к этому вопросу.
Оказывается если в первом примере данное сообщение при компиляции проекта игнорировать, то всё прекрасно записывается в БД!
А когда файл проекта скопмилирован и просто запускается на исполнение, то ни какого сообщения программа не выдаёт и всё срабатывает на 100%.
Файл без каких-либо ошибок загружается в Blob-поле БД.
Так что:
ImgPath:=ExtractFilePath(ParamStr(0))+'data\photo.jpg';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('UPDATE exam_users SET `photo`=(:blob_photo) WHERE `number` = 94');
ADOQuery1.parameters.parambyname('blob_photo').LoadFromFile(ImgPath, ftBlob);
ADOQuery1.ExecSQL;
ADOQuery1.Close;
работоспособный код.
Комментариев нет:
Отправить комментарий