Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Чтение из полей OLE


Автор: PsiMagistr 11.9.2011, 11:30
Ребята, 

у меня картинки появились прямо в  в базе (Accsess) , я решил отказаться от ImageList, (при добавлении очередного мсонстра надо перекомпилировать программу). 

Пытаюсь читать:

Код

Avatara.Picture.Bitmap.Assign(TBlobField(Q2.FieldByName('Картинка')));



Выходит ошибка

BitMap Image is not valid.

Помогите разобраться. Соответствующие темы на форуме читал - не выходит.


Важно: Картинка битмап была сохранена в базе через Acсess, а не через Дельфи





Автор: Данкинг 11.9.2011, 11:55
Попробуй под себя адаптировать:
Код

procedure tform1.Load_pic;
var S : TStream;
    FileName:string;
begin
  filename:=extractfilepath(application.ExeName)+'\temp.jpg';
  deletefile(filename);
  if zapros_ib2.FieldByName('Картинка').IsNull then Exit;
  S:=zapros_ib2.FieldByName('Картинка').DataSet.CreateBlobStream(zapros_ib2.FieldByName('Картинка'), bmRead);
  if FileExists(FileName) then
    FileS:=TFileStream.Create(FileName, fmOpenWrite)
  else
    FileS:=TFileStream.Create(FileName, fmCreate);
  try
    FileS.CopyFrom(S, S.Size);
  finally
    S.Free;
    FileS.Free;
  end;
image1.Picture.LoadFromFile(filename);
end;


Автор: PsiMagistr 11.9.2011, 12:02
Данкинг,  С сохранением файла?

Добавлено через 39 секунд
Данкинг, спасибо конечно, но лишние телодвижения...

Добавлено через 9 минут и 14 секунд
Как прочитать правильный bitmap картинки из таблицы БД MS Access,
которая была сохранена там не програмно, а с помощью Microsoft Access 2000 

Access пишет в базу не битмапу, а OLE-объект. Нужно просто считать его в блок памяти, найти в начале блока (cj cvtotybtv d ytcrjkmrj ltcznrjd ,fqn jn yfxfkf) сигнатуру bitmap (BM) и с этой позиции прочитать в другой блок памяти нужное число байт. Это число легко определить, разбирая заголовок bitmap, который следует за сигнатурой (см. описание формата BMP) 


В теории понятно, но вот как это на практике осуществить?




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)