Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо