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

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

Загрузка содержимое BLOB поля на WebBrowser [D6, XP]


camil ©   (2014-02-06 15:59:00) 

У меня такая задачка: делать сборник презентаций PowerPoint и сохранять их в базе данных MS Access. Сохранение удачно. Но вот, проблема с чтением из базы и отображением на WebBrowser компоненте выбранную презентацию.

При этом требование не использовать временные файлы.

Есть TabSheet. Компонент WebBrowser расположен на TabSheet. Код чтения из базы и отображения на браузере написан внутри событии OnShow компонента TabSheet.

Выдается ошибка Access Violation.... На строке:
LoadResult := PersistStream.Load(Stream);

Вот весь код:
procedure TfrmTraining.sheetTheoryShow(Sender: TObject);
var
  PersistStream : IPersistStreamInit;
  MemoryStream  : TMemoryStream;
  Stream        : IStream;
  LoadResult    : HRESULT;
begin
        PersistStream := wbrowserTheory.Document as IPersistStreamInit;
        MemoryStream := TMemoryStream.Create;
        try
          Stream := TStreamAdapter.Create(MemoryStream, soReference) as IStream;

          frmdm.GetTheoryAsStream(Stream); // Эта процедера на другом модуле

          LoadResult := PersistStream.Load(Stream); // ТУТ ACCESS VIOLATION
          if FAILED(LoadResult) then MessageBox(Handle, 'Не возможно читать!', 'Error', 0)
        finally
           MemoryStream.Free;
        end;
end;

Вот код процедуры frmdm.GetTheoryAsStream(Stream);
procedure Tfrmdm.GetTheoryAsStream(var Stream : IStream);
var
  Blob : TMemoryStream;
  TheoryStream : IStream;
begin
    if TheoryExists then
    begin

         Blob := TADOBlobStream.Create(TBlobField(qryTheory.FieldByName('Content')), bmRead);
         TheoryStream := TStreamAdapter.Create(Blob, soReference) as IStream;
         Stream := TheoryStream;
         Blob.Free;
    end;
end;


Что упущен? Буду очень признателен за помощь. Уже 5 часов...

P.S. Assigned(wbBrowser.Document)выдает false. Может причина в этом. Как тогда сделать так, что оно стало true?


sniknik   (2014-02-06 18:06:00) [1]

вместо всего в GetTheoryAsStream почему не сделать просто qryTheory.FieldByName('Content')).AsString
?
если в акцесной базе поле типа "оле обьект" куда сохраняли "перетаскиванием"/средствами акцесса, то там могут быть "паразитные" байты в начале и конце реальных данных.


sniknik   (2014-02-06 17:37:00) [2]

вот это точно работает (если убрать "корявости")
http://www.swissdelphicenter.ch/torry/showcode.php?id=1096


camil   (2014-02-06 16:42:00) [3]

Добавил в FormCreat строку: wbrowserTheory.Navigate('about:blank');Все равно выдается EAccessViolation...


Наверх

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