Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / получение OLE HANDLE / 3 сообщений из 3, страница 1 из 1
02.09.2003, 14:19
    #32253705
Anton K
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение OLE HANDLE
Привет.
Подскажите вот такую вещь.
Мне необходимо получить из базы блоб и передать его ActiveX компоненту.
База ОРАКЛ 8.0.5 работаю через DOA 3.4.3
ActiveX компонент: Tidestone Formula One 6.1
У Formula One есть метод
ReadFromBlob(hBlob, nReservedBytes)
hBlob OLE_HANDLE Reference to a BLOB variable in memory.

Так вот вопрос, как мне получить этот OLE_HANDLE ?
Из базы блоб полчаю вот так.
blob := TBLobField(headInfo.FieldByName('excel_file'));
headInfo – это TOracleDataSet (TOracleDataSet является наследником TDataSet);

так вот как теперь мне получить HANDLE на объект хранящейся в TBLobField.
Или возможно существуют другие способы ?

Хотелось бы еще отметить что в настоящий момент существует решение этой проблемы через временный файл т.е. у TBLobField есть метод SaveToFile, а у Formula One ReadFromFile. Но хотелось бы решить эту проблему без временных файлов, так как это значительно снижает производительность.
Я понимаю что должен быть способ, но как ???

Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
02.09.2003, 14:44
    #32253736
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение OLE HANDLE
типа пример :)

var sheetBlob,
sheetSize : integer;
bs : tBlobStream;
// copy from table to spread sheet
sheetSize := tBlobField (srcTable.FieldByName ('Package
Formula')).BlobSize;
if sheetSize > 0
then begin
sheetBlob := GlobalAlloc (GHND, sheetSize);
try
bs := tBlobStream.Create (tBlobField
(srcTable.FieldByName ('Package Formula')), bmRead);
sheetPointer := GlobalLock (sheetBlob);
try
bs.Read (sheetPointer^, sheetSize);
finally
GlobalUnlock (sheetBlob);
bs.Free;
end;
f1Book1.ReadFromBlob (sheetBlob, 0);
finally
GlobalFree (sheetBlob);
end;
end;
// copy from spread sheet to table
srcTable.Edit;
bs := tBlobStream.Create (tBlobField (srcTable.FieldByName ('Package
Formula')), bmWrite);
sheetBlob := GlobalAlloc (GHND, 2048);
sheetSize := 2048;
try
f1Book1.WriteToBlob (sheetBlob, 0);
sheetPointer := GlobalLock (sheetBlob);
try
sheetSize := GlobalSize (sheetBlob);
bs.Write (sheetPointer^, sheetSize);
finally
GlobalUnlock (sheetBlob);
end;
finally
bs.Free;
GlobalFree (sheetBlob);
end;
...
Рейтинг: 0 / 0
03.09.2003, 11:13
    #32254390
Anton K
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
получение OLE HANDLE
big thanks!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / получение OLE HANDLE / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]