Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLE из BLOB, С доступом ADO 
:(
    Опции темы
Spike
Дата 5.7.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Привет всем!
Может кто знает как загрузить данные из BLOB-поля в OLEContainer?
Доступ к данным осуществляется через TADOQuery. 
PM MAIL   Вверх
Vit
Дата 5.7.2006, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



ADOQuery имеет возможность чтения поля в поток Stream, а то чего у вас там в контейнере должно понимать работу с потоками, или иметь какие-то методы для работы с данными. Вообще-то вопрос достаточно странный, типа: " у меня есть мешок, как мне включить то что находится в мешке?" - ответ, "а хрен его знает" - зависит от того что засунуто в мешок... Контейнер он и есть контейнер, а реальная функциональность его содержимого зависит от самого содержимого. 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Spike
Дата 6.7.2006, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Цитата(Vit @  5.7.2006,  16:38 Найти цитируемый пост)
ADOQuery имеет возможность чтения поля в поток Stream

ADOQuery имеет возможность чтения в поток TADOBLOBStream

Цитата(Vit @  5.7.2006,  16:38 Найти цитируемый пост)
а то чего у вас там в контейнере должно понимать работу с потоками, или иметь какие-то методы для работы с данными

TOLEContainer умеет работать с потоками типа TStream, а также умеет загружать данные из файлов, но опять же через TFileStream

Цитата(Vit @  5.7.2006,  16:38 Найти цитируемый пост)
 у меня есть мешок, как мне включить то что находится в мешке?" - ответ, "а хрен его знает" - зависит от того что засунуто в мешок... Контейнер он и есть контейнер, а реальная функциональность его содержимого зависит от самого содержимого.

Именно так, вопрос не в том как запустить (включить) содержимое, вопрос в том, как это содержимое правильно поместить/ загрузить в контейнер (т.е. сделать данные из БД содержимым контейнера).

Почему-то TADOBLOBStream и TStream имеют различный формат (насколько я понял)... smile Вот здесь и нужен хелп!!! 
PM MAIL   Вверх
Vit
Дата 6.7.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Spike @  6.7.2006,  02:32 Найти цитируемый пост)
ADOQuery имеет возможность чтения в поток TADOBLOBStream


Цитата(Spike @  6.7.2006,  02:32 Найти цитируемый пост)
TOLEContainer умеет работать с потоками типа TStream, а также умеет загружать данные из файлов, но опять же через TFileStream



Все они  наследники TStream


Цитата(Spike @  6.7.2006,  02:32 Найти цитируемый пост)
Именно так, вопрос не в том как запустить (включить) содержимое, вопрос в том, как это содержимое правильно поместить/ загрузить в контейнер (т.е. сделать данные из БД содержимым контейнера).


Ну теперь то задача хоть понятна

Цитата(Spike @  6.7.2006,  02:32 Найти цитируемый пост)
Почему-то TADOBLOBStream и TStream имеют различный формат (насколько я понял)...  Вот здесь и нужен хелп!!!  



Формат самих данных одинаков, они оба наследуются от одного предка. На вскидку, если проблема только в этом, то можно просто иметь 2 потока и копировать из одного в другой. А если не на вскидку, то TOLEContainer имеет метод LoadFromStream который требует абстрактный TStream, а значит будет принимать любого потомка TStream, в том числе и TADOBLOBStream 


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Spike
Дата 7.7.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Цитата(Vit @  6.7.2006,  15:22 Найти цитируемый пост)
А если не на вскидку, то TOLEContainer имеет метод LoadFromStream который требует абстрактный TStream, а значит будет принимать любого потомка TStream, в том числе и TADOBLOBStream 

Это в теории, а на практике следующий код не работает:
Код

...
d: TADOBLOBStream;
...
d:=TADOBLOBStream.Create((ADOQuery1.FieldByName('Blob') as TBlobField), bmRead);
OleContainer1.LoadFromStream(d as TStream);

и еще раз, повторюсь, из-за различного формата данных. 
PM MAIL   Вверх
Golden Hands
Дата 8.7.2006, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 2
Всего: 83



Spike, грузи поток либо в визуальный TImage, либо в TBitmap для дальнейших действий. 


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Spike
Дата 10.7.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Цитата(Golden Hands @  8.7.2006,  01:47 Найти цитируемый пост)
Spike, грузи поток либо в визуальный TImage, либо в TBitmap для дальнейших действий. 

Не понял..., причем тут TImage и/или TBitmap?
 
PM MAIL   Вверх
Golden Hands
Дата 11.7.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 2
Всего: 83



Для чего тебе загружать в  OLEContainer? 


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Spike
Дата 11.7.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Golden Hands, а разве в BLOB можно хранить только картинки? я вот хочу хранить там документы word, excell, да и вообще любые... Вот и нужен для этого TOLEConteiner. Конечно, это может быть в корне не верный подход smile , я не знаю, кто знает лучше, я буду благодарен... Хранить в файлах - тоже вариант, но вынужденный (при этом, возможно не худший). 
PM MAIL   Вверх
Golden Hands
Дата 11.7.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 2
Всего: 83



Напиши уже наконец, какую СУБД используешь.
MS Access поди?  smile  


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Spike
Дата 12.7.2006, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Цитата(Golden Hands @  11.7.2006,  22:32 Найти цитируемый пост)
Напиши уже наконец, какую СУБД используешь.
MS Access поди?     

Блин, забыл  smile  - ее родимую. Вот и хочу сделать такую возможность как в access'е: скопировал в буффер обмена кусок текста вордовского, или файл с картинкой или ..., вставил в ячейку, а потом когда надо запустил. Ведь умеет же access это делать - значит есть путь smile  
PM MAIL   Вверх
Golden Hands
Дата 13.7.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 2
Всего: 83



Если данные заносились через MS Access, то смотри тут:
http://forum.shelek.com/index.php?action=p...ge;topic=7620.0
http://www.sql.ru/forum/actualthread.aspx?...&tid=240912

Проблема заключается в получении "чистого" формата файла, то есть отсекании "левой" инфы, которую пихает Access. Например, для BMP-изображений:
Код

b:=TAdoBlobStream.Create(TBlobField(AdoDataSet1.FieldByName('<name>')), bmRead);
b.Seek(82, soFromBeginning);
...


А вот какую поправку делать на остальные форматы файлов - известно наверное только Microsoft.


А загрузку в OleContainer "чистого" файла тоже не смог реализовать... 


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Spike
Дата 13.7.2006, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



Цитата(Golden Hands @  13.7.2006,  00:01 Найти цитируемый пост)
http://forum.shelek.com/index.php?action=p...ge;topic=7620.0

ОНО smile 
т.е. по идее записав в blob-поле чистый файл, он должен запуститься без проблем, надо попробовать... 
PM MAIL   Вверх
DDX
Дата 13.7.2006, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 127
Регистрация: 31.1.2005
Где: Москва

Репутация: 5
Всего: 5



Spike

загрузка в BLOB- поле  MSAccess ( поле q_blob таблицы adtQuestion) из OLEContainer (oleQuestion)
Код

var
        s: tmemorystream;
begin
with form1 do begin
        if adoconnection1.connected then begin
                try
                        if oleQuestion.State=osempty then exit;
                        adtQuestion.Edit;
                        s:=tmemorystream.create;
                        oleQuestion.SaveToStream(s);
                        if s.size>0 then  begin
                                adtQuestionq_blob.LoadFromStream(s) ;
                                adtQuestion.Post;
                        end
                finally
                        s.free;

                end
        end
end


загрузка содержимого BLOB-поля в OLEContainer
Код

procedure LoadQuestionFromBLOB;
var
bs:tadoblobstream;
begin
with form1 do begin
if adoConnection1.connected then begin
try
bs:=TADOBLOBStream.Create(adtQuestionQ_blob, bmread);

if bs.size>0 then begin
        oleQuestion.LoadFromStream(bs);
        ...
finally 
   bs.free;
end;

 
--------------------
Учиться, учитьcя и ещё раз учиться  
PM MAIL WWW   Вверх
Spike
Дата 17.7.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 5.7.2005
Где: Протвино МО

Репутация: нет
Всего: 1



сделал так:
Код

procedure TForm1.Button2Click(Sender: TObject);
var
   ms: TMemoryStream;
begin
   try
      if OLEContainer1.State=osEmpty then exit;
      ADOTable1.Edit;
      ms:=TMemoryStream.Create;
      OLEContainer1.SaveToStream(ms);
      if ms.size>0 then  begin
         (ADOTable1.FieldByName('blob') as TBLOBField).LoadFromStream(ms);
         ADOTable1.Post;
      end;
   finally
      ms.free;
   end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   abs: TADOBLOBStream;
begin
   try
      abs:=TADOBLOBStream.Create(ADOTable1.FieldByName('blob') as TBlobField, bmread);
      if abs.size>0 then begin
        OLEContainer1.LoadFromStream(abs);
      end;
   finally
      abs.free;
   end;
end;  

работает.
Спасибо всем!

Но вопрос с микрософтовским форматом не снимается, если кто встретит - киньтесь ссылкой. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0769 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.