Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.03.29;
Скачать: [xml.tar.bz2];

Вниз

Загрузка содержимое BLOB поля на WebBrowser   Найти похожие ветки 

 
camil   (2014-02-06 15:59) [0]

У меня такая задачка: делать сборник презентаций 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?


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

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


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

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


 
sniknik ©   (2014-02-06 18:06) [3]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.03.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.001 c
15-1407875402
Юрий
2014-08-13 00:30
2015.03.29
С днем рождения ! 13 августа 2014 среда


3-1303730170
Дмитрий Тимохов
2011-04-25 15:16
2015.03.29
Код ошибки Timeout expired в MS SQL Server.


4-1271301738
Interesting
2010-04-15 07:22
2015.03.29
Температура проца


15-1408003458
NailMan
2014-08-14 12:04
2015.03.29
Никому не интересна работа программера Delphi?


15-1407412508
Ламот
2014-08-07 15:55
2015.03.29
Как залить прошивку на железку с предустановленным U-Boot?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский