Форум: "Базы";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизОбновление BLOB-полей в ZeosDB Найти похожие ветки
← →
phpist (2004-01-22 19:13) [0]Уважаемые Мастера! Может быть кто-нибудь работал с компонентами Zeos - тогда помогите. Проблема в том, что при попытке заменить JPEG изображение в поле BLOB (MySQL) все что было в этом поле просто стирается, а новая картинка не загружается. Причем, если это первая операция после создания строки в БД, то все отлично. Если пытаться вместо JPEG поместить BMP, то тоже все Ок. Размер поля проверял, пробовал действовать и через TMemoryStream, и через TBlobStream, и через параметры SQL-запроса пытался сделать UPDATE (как это описано на форуме Zeos) - никаких результатов. Если кто-нибудь что-нибудь знает - ПОМОГИТЕ.
P.S. использовать другие компоненты (не Zeos) не хотелось бы - уже огромный проект построен на его основе.
← →
sniknik (2004-01-22 19:33) [1]есть разница JPEG и BMP, у JPEG-а нет битмапа к примеру. есть пример (писал когдато) "запихивания" их(JPEG/BMP) в базу, на ADO, но принципы должны быть одинаковы.
будеш разбиратся вышлю.
← →
Nikolay M. (2004-01-23 18:05) [2]Покажи, как делаешь (хотя бы один вариант).
+ версию мускула и зеоса.
Не исключено, что и мускул может глючить.
← →
phpist (2004-01-24 15:51) [3]To sniknik: Вышли пожалуйста - очень нужно.
To Nikolay M.: MySQL 3.23, Zeos 6.0.12, примеры кода ниже:
od - OpenDialog
qemp - ZQuery
blob-поле - "fotoemp"
procedure TfrmEmpCard.btnFotoClick(Sender: TObject);
begin
if od.Execute then begin
qemp.Edit;
foto.Picture.LoadFromFile(od.FileName);
qemp.Post;
end;
end;
Данный способ сработал один раз (как я описывал ранее)
procedure TfrmEmpCard.Button1Click(Sender: TObject);
var
ms: tmemorystream;
begin
if not od.Execute then exit;
foto.Picture.LoadFromFile(od.FileName);
qemp.SQL.Text:="update employees set fotoemp=:FOT where idemp="+qemp.Fields[0].AsString;
ms:=tmemorystream.Create;
try
foto.Picture.Bitmap.SaveToStream(ms);
ms.Seek(0, soFromBeginning);
qemp.ParamByName("FOT").LoadFromStream(ms, ftBlob);
qemp.ExecSQL;
finally
ms.Free;
end;
end;
Данный способ предложен на форуме Zeos, но он не работает (старая информация стирается а новая не записывается)
procedure TfrmEmpCard.BitBtn1Click(Sender: TObject);
var
bs: tstream;
fs: tfilestream;
begin
if not od.Execute then exit;
qemp.Edit;
fs:=tfilestream.Create(od.FileName, fmOpenRead);
fs.Seek(0, soFromBeginning);
bs:=qemp.CreateBlobStream(qemp.FieldByName("fotoemp"), bmReadWrite);
bs.CopyFrom(fs, fs.size);
qemp.Post;
qemp.ApplyUpdates;
bs.Free;
fs.Free;
end;
procedure TfrmEmpCard.BitBtn2Click(Sender: TObject);
var
fs: tfilestream;
begin
if not od.Execute then exit;
qemp.Edit;
fs:=tfilestream.Create(od.FileName, fmOpenRead);
fs.Seek(0, soFromBeginning);
(qemp.FieldByName("fotoemp") as tblobfield).LoadFromStream(od.FileName);
qemp.Post;
//fs.Free;
end;
Последних два метода выдают ошибку "Bitmap is not valid" при вызове Post
Может я чего-нибудь упускаю или недопонимаю?
← →
sniknik (2004-01-24 19:20) [4]выслал (и не такое это простое дело по диалапу 400кб слать :), нет чтобы раньше когда на работе.
обрат внимание как там изображение из базы читается для отображения, и посмотри что будет если оба типа читать одинаково.
в одном случае как раз "Bitmap is not valid".
← →
phpist (2004-01-27 09:16) [5]Всем спасибо.
Проблема оказалась в глючной версии zeos 6.0.12. Поставил 3 патча и все заработало.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.015 c