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


Автор: Upgrader 22.3.2010, 20:49
Здравствуйте!
В БД Access, в одном поле есть OLE объект. Допустим rtf файл или что-либо еще, не так важно.

У меня такой вопрос - как загрузить этот объект в своей программе в компонент "OleContainer1"?

Подключаюсь к базе используя ADOConnection и ADOTable. Как работать с БД знаю, только не понял как получить OLE объект.

Пытался вот так:
Код

OleContainer1.LoadFromFile(ADOTable1.Fields[2]);
Но понятно что тут что-то не так. И на счет типа данных не в курсе.
А как надо, подскажите?

Автор: Grag 23.3.2010, 17:35
Цитата(Upgrader @ 22.3.2010,  20:49)
Здравствуйте!
В БД Access, в одном поле есть OLE объект. Допустим rtf файл или что-либо еще, не так важно.

У меня такой вопрос - как загрузить этот объект в своей программе в компонент "OleContainer1"?

Подключаюсь к базе используя ADOConnection и ADOTable. Как работать с БД знаю, только не понял как получить OLE объект.

Пытался вот так:
Код

OleContainer1.LoadFromFile(ADOTable1.Fields[2]);
Но понятно что тут что-то не так. И на счет типа данных не в курсе.
А как надо, подскажите?

Дублирую тебе свой ответ с "Исходников"...
Код

var

b: TADOBlobStream;


begin
  b := TADOBlobStream.Create((Table1.FieldByName('XXXXXX') as TBlobField),bmRead);
  OLEContainer1.LoadFromStream(b)
end



Автор: Upgrader 24.3.2010, 11:42
Цитата(Grag @ 23.3.2010,  17:35)
Дублирую тебе свой ответ с "Исходников"...

Не получается. Тут я с самого начала более правильно написал вопрос, думал может кто что-то другое подскажет  smile 

Если добавляю объект в БД из программы Access, все нормально.
Но при попытке прочитать этот файл:
TADOBlobStream.Create((Table1.FieldByName('XXXXXX') as TBlobField),bmRead);
он читается, но как выяснил - он немного изменен. Что-то добавлено что-ли Access`ом. По этому ни в какой программе этот файл уже больше не откроется.

По моему в этом вся проблема. Хотя возможно и нет...

Никто не решал такой вопрос?

Автор: Grag 24.3.2010, 12:00
Вот кусочек моей рабочей программы. Выводит картинку из ячейки БД в форму About...
Код


type
  TAboutForm = class(TForm)
  MainPicture: TcxImage;

procedure TAboutForm.FormCreate(Sender: TObject);

var
    Jpeg: TBitmap;
  Blob: TADOBlobStream;
  
begin
    Jpeg:=TBitmap.Create;
    Blob:=TADOBlobStream.Create(MainFrm.tbControl.FieldByName('Pic') as
                                                             TBlobField,bmRead);
  Blob.Seek(82, soFromBeginning);
  Jpeg.LoadFromStream(Blob);
  MainPicture.Picture.Graphic:=jpeg;


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