Вниз
Скачать: CL | DM;

ADO+MS SQL + Image blob = ?   Найти похожие ветки 

← →
j_a_g_o   (2006-06-26 16:51) [0]

коллеги помогите прочитьать данные хранящиеся в Blob -image поле бд MS SQL 2000 из программы на Delphi. Поиск по интернету показал актуальность проблемы, но предложенные варианты, читать через смещение в обычный TImage, успехом не увенчались.


← →
Ega23 ©   (2006-06-26 17:12) [1]

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;


← →
j_a_g_o   (2006-06-27 08:10) [2]

или руки кривые или лыжи не катят, но все равно не работает, вылетает при попытки загрузить из потока по причине "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-27 09:10) [3]


> Image1.Picture.Bitmap.LoadFromStream(ms);

Image1.Picture.LoadFromStream(ms);


← →
j_a_g_o   (2006-06-27 09:43) [4]

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 полях в виде нормальных файлов


← →
j_a_g_o   (2006-06-27 09:51) [5]

как выяснилось проблема решена в компаненте TJvDBImage входящем в библиотеку JVCL


← →
Ega23 ©   (2006-06-27 10:03) [6]


> P.S. оказывается *.bmp действительно хронятся в базе с дополнительным
> заголовком, а остальные форматы *.jpg, *.gif лежат в blob
> полях в виде нормальных файлов
>


Нет. Они ВСЕ хранятся именно в том виде, в котором ты их туда положил.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.029 c
6-1144955552
qazwsx
2006-04-13 23:12
2006.09.03
base64_encode(pack("H*", sha1(utf8_encode($_GET[ pwd ])))))


2-1155239524
ккккккккк
2006-08-10 23:52
2006.09.03
список подключений


15-1155248778
Мазут Береговой
2006-08-11 02:26
2006.09.03
Вот, как идиот улыбаясь, сижу и слушаю Юмор FM...


15-1155212113
PhpEnginer
2006-08-10 16:15
2006.09.03
PHP engine


15-1154764927
Belyakov
2006-08-05 12:02
2006.09.03
Дайте работу на 2-3$ :)




   Наверх