powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow OLE контрол
5 сообщений из 5, страница 1 из 1
DataWindow OLE контрол
    #32995245
radius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
У меня есть несколько External DataWindow, которые используются для отображения и печати данных из БД.
Возникла необходимость отображать документы MS Word, хранимые в БД.
Делать это через OLE DataBase BLOB не слишком удобно по причине совместимости с написанные старым кодом. Меня бы больше устроил OLE Object контрол. Проблема с тем, как получить доступ к такому контролу.
Мне нужно по крайней мере вставить в такой контрол содержимое документа Word через blob-переменную.
Пробовал использовать синтаксис типа
dw_1.Object.[ole_control_name].[Property_Name] = Value
dw_1.Object.[ole_control_name].Object.[Property_Name] = Value
Не работает.
Пробовал активировать OLE контрол, а потом подцепляться к нему через создание локального OLE контрола и ConnectToObject( ... ).
Не работает.
Кто нибудь знает, как можно получить доступ OLE контролу в DataWindow?
...
Рейтинг: 0 / 0
DataWindow OLE контрол
    #32995654
Black Savage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить документы Word в базе - не есть гуд.
Чтобы вносить изменения, корректировки в такие документы - нужно вмешательство программиста или написать хороший интерфейс в программе.

Лучший вариант - хранить документы на диске в какой-то директории (путь к ней будет храниться в базе). Если нужна вставка данных из базы в такой документ, то это делается слиянием. При таком подходе, документ может редактировать даже безмозглая секретарша.

IMHO пересмотри свои взгляды на хранение Word документов в базе. Если воспользоваться поиском, то на этом сайте можно многое найти на сей счет...
...
Рейтинг: 0 / 0
DataWindow OLE контрол
    #32996325
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить документы Word в базе - не есть гуд.
Чтобы вносить изменения, корректировки в такие документы - нужно вмешательство программиста или написать хороший интерфейс в программе.

Чушь.
Пользователи спокойно юзают web-mail типа Яндекса и Mail.ru.
И вполне способны осознать что такое download/upload.
Так что никаких OLE не требуется на самом деле.
Достаточно SELECTBLOB/UPDATEBLOB. Вытащил - изменил - залил обратно.
А уж сделать "хороший интерфейс" для извлечения и сохранения файлов труда не составит.
И централизованно в базе хранить документы и привязывать их к даннным это гораздо лучше того бардака который пользователи устраивают в "какой-то директории на диске". Плюс нет необходимости отдельно разбираться с правами доступа и маппингом дисков.
Типа Вася пишет в базу "S:\XXX\XXX\XXX.doc" , а у Пети мало того что диска S: нет так еще и права доступа на XXX не настроены.
...
Рейтинг: 0 / 0
DataWindow OLE контрол
    #32996376
Andrew Nagorny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работать с OLE желательно в отдельном окне с OLE контролом. Т.е. сделать спец. окно которое будет открываться при активации документа.Так же в это окно положить кнопку на закрытие. Закрываем окно - закрываем активированный документ. это для того что бы после глюков которые иногда проскакивают при работе с ОЛЕ, можно было закрыть все-таки закрыть документ.

Читаем из базы SELECTBLOB. Открываем окно с передачей параметров(в том числе и Блоба документа). В пост опене запоняем ОЛЕ
ole_blob.objectdata = lblb_blob

затем активируем его...(или не активируем)

а дальше как у кого фантазия будет работать... можно редактировать, ловить события, записывать в базу (UPDATEBLOB) по закрытию...

конкретно, для Word идет обращение к его VBA.

ole_blob.Object.Application.Visible=True

по поводу переменных см. хелп по VBA For MS Word.
будет что-то типа этого
ole_blob.Object.ActiveDocument.Variables.Add('Value1', '1')
...
Рейтинг: 0 / 0
DataWindow OLE контрол
    #32996603
radius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.
Частично проблему мне удалось решить.
Подцепиться к OLE контролу в DataWindow возможно следующим способом:

Код: plaintext
1.
2.
3.
4.
OleObject       lole_Word
ll_result =  dw_ole.Object.ole_1.Activate( OffSite! )
lole_Word = CREATE OleObject
ll_result = lole_Word.ConnectToObject( '', 'word.application' )

Ну дальше возможно использовать обычные функции и макросы Word используя объект lole_Word.
ole_1 был создан именно как OLE контрол в DataWindow, тип объекта "Документ Microsoft Word".
Кстати, если я указываю тип активации не Offsite! а InPlace!, то все равно появляется окно Word , однако после этого окно моего приложения не закрывается и убить его можно только через диспетчер задач. Почему так?

Конечно, мне было бы удобнее при отображении документов использовать не DataWindow, а отдельные OLE контрол в окне. Однако, по причине совместимости с существующим кодом, это сделать довольно сложно.
Технология такова, что сам шаблон DataWindow хранится в БД, на его основе приложением создается External DataWindow, которое заполняется данными из БД. Сейчас данные могут быть текстовыми, числовыми, дата/время. Хотелось бы использовать так же BLOB и работать с документами MS Office.

Может быть кто нибудь предложить другой способ отображать документы Word в DataWindow?
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DataWindow OLE контрол
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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