![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Загрузка содержимое 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...