![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO+MS SQL + Image blob = ? [D7, MSSQL, ADO]
j_a_g_o © (2006-06-26 16:51:00)коллеги помогите прочитьать данные хранящиеся в Blob -image поле бд MS SQL 2000 из программы на Delphi. Поиск по интернету показал актуальность проблемы, но предложенные варианты, читать через смещение в обычный TImage, успехом не увенчались.
Ega23 (2006-06-27 10:03:00) [1]
> P.S. оказывается *.bmp действительно хронятся в базе с дополнительным
> заголовком, а остальные форматы *.jpg, *.gif лежат в blob
> полях в виде нормальных файлов
>
Нет. Они ВСЕ хранятся именно в том виде, в котором ты их туда положил.
j_a_g_o (2006-06-27 09:51:00) [2]как выяснилось проблема решена в компаненте TJvDBImage входящем в библиотеку JVCL
j_a_g_o (2006-06-27 09:43:00) [3]1. у стандартного TPicture нет методов работы с потокам
2. нашел выход через .. Сохраняю поток в файл и затем в Image загружаю картинку из файла
procedure TForm1.ADODataSetAfterScroll(DataSet: TDataSet);
var
BS : TBlobStream;
Memstr: TMemoryStream;
begin
BS := TBlobStream(ADODataSet1.CreateBlobStream(ADODataSet1.FieldByName('DocImage'),bmR ead));
try
memstr := tmemorystream.Create;
try
memstr.LoadFromStream(bs);
memstr.Position := 0;
memstr.SaveToFile('image.jpg');
image1.Bitmap.LoadFromFile('image.jpg');
finally
MemStr.Free;
end;
finally
bs.free;
end;
end;
P.S. оказывается *.bmp действительно хронятся в базе с дополнительным заголовком, а остальные форматы *.jpg, *.gif лежат в blob полях в виде нормальных файлов
Ega23 (2006-06-27 09:10:00) [4]
> Image1.Picture.Bitmap.LoadFromStream(ms);
Image1.Picture.LoadFromStream(ms);
j_a_g_o (2006-06-27 08:10:00) [5]или руки кривые или лыжи не катят, но все равно не работает, вылетает при попытки загрузить из потока по причине "Bitmap image is not valid":
procedure TForm1.ADODataSetAfterScroll(DataSet: TDataSet);
var
ms:TMemoryStream;
bf:TBLOBField;
begin
bf := TBLOBField(adodataset.fieldbyname('logo'));
if bf.IsNull then Exit;
ms:=TMemoryStream.Create;
try
try
bf.SaveToStream(ms);
ms.Position:=0;
Image1.Picture.Bitmap.LoadFromStream(ms);
finally
ms.Free;
end;
except
Exit;
end;
end;
Ega23 (2006-06-26 17:12:00) [6]
function BLOBToImage(bf:TBLOBField; img:TImage):Boolean;
var
ms:TMemoryStream;
begin
Result:=False;
if bf.IsNull then Exit;
ms:=TMemoryStream.Create;
try
try
bf.SaveToStream(ms);
ms.Position:=0;
img.Picture.LoadFromStream(ms);
finally
ms.Free;
end;
except
Exit;
end;
Result:=True;
end;