powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SelectBlob и Ole control
13 сообщений из 13, страница 1 из 1
SelectBlob и Ole control
    #35175788
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите, пожалуйста, как можно решить следующую проблему.
В табличке Oracle 8.1.7 лежат excel, word, xml файлы (тип поля Long Raw). Пытаюсь открывать для обработки в цикле только excel файлы.
Проверяю принадлежность файла в LBLOB1 к excel проверяя значение Ole_1.ClassLongName.
Если встречается Word документ, то он успешно пропускается...
Если же встречается xml файл, то происходит вылет из программы в момент передачи LBLOB1
в OLE_1.OBJECTDATA.

Событие Error OLE_1 контрола:
Код: plaintext
1.
2.
3.
4.
5.
INTEGER li_FileNum
//Ставил здесь брякпоинт, но ошибка видимо возникает в другом месте? :(((
action = ExceptionIgnore! 
li_FileNum = FileOpen('c:\log\ERR.txt', LineMode!, WRITE!, LockWrite!, append!)
FILEWRITE(li_FileNum, INPUT)
FILECLOSE(li_FileNum)

Селект и обработка файлов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SELECTBLOB "SPRAV_DOC"."DOCUMENT"
	INTO :LBLOB1
	FROM "SPRAV_DOC"
	WHERE "SPRAV_DOC"."NOMER" =:NOMER
	USING SQLCA;
     IF SQLCA.SQLCode <>  0  THEN
		MESSAGEBOX("SQL error",STRING(SQLCA.SQLCode) + '  ' + SQLCA.SQLErrText)
    END IF 

        IF isNull(LBLOB1) = false THEN
                OLE_1.OBJECTDATA= LBLOB1 //В этом месте происходит вылет из программы		

		if pos(OLE_1.ClassLongName,'Excel') >  0  then
		  OLE_1.Activate(inplace!)
                            //Манипуляции с Эксель файлом
                            OLE_1.object.APPLICATION.WORKBOOKs( 1 ).CLOSE()
		  OLE_1.object.DisconnectObject()
                         end if
        END IF

Как же корректно пропускать Xml файлы и отловить мерзопакостную ошибку вызывающую свал?
Заранее, благодарю.

З.Ы.
PB 7.0 build 5031
MS Windows Professional SP2
Oracle 8.1.7
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35175908
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Событие Error OLE_1 контрола:

INTEGER li_FileNum
//Ставил здесь брякпоинт, но ошибка видимо возникает в другом месте?
action = ExceptionIgnore!
li_FileNum = FileOpen('c:\log\ERR.txt', LineMode!, WRITE!, LockWrite!, append!)
FILEWRITE(li_FileNum, INPUT)
FILECLOSE(li_FileNum)

Мда.
Ошибка вылазит в SystemError Application event, где у меня стоит один единственный Return.
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176106
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил в SystemError event код обработки системных ошибок взятый из UserGuide:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
string ls_logline
ls_logline = "SYSTEM ERROR: "
ls_logline += String(error.number) + " " + error.text
ls_logline += " occurred at line " + &
		String(error.line) + " "
ls_logline += " in event " + error.objectevent
ls_logline += " of object " + error.object
if Messagebox("System Error", ls_logline + &
		"~r~n~r~nDo you want to stop the program?", &
		Question!, YesNo!) =  1  then
		HALT CLOSE
end if
Теперь получаю красивое сообщение
Код: plaintext
1.
error.number -  21 
error.text     - "Bad runtime function reference"
При нажатии на кнопку No также происходит закрытие приложения.

В том же самом UserGuide, советуют завершать работу приложения при возникновении SystemError
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176137
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UzrptavДобавил в SystemError event код обработки системных ошибок взятый из UserGuide:

а externalexception не срабатывает?
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176292
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а сам ole - инициализиться?
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176321
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрейа externalexception не срабатывает?
Спасибо! Я про него совсем забыл.
Поставил
Код: plaintext
1.
action  = ExceptionIgnore! 
messagebox('Ошибка!!!','ExternalException')
в событии ExternalException для сигнала...
Все равно, в момент операции
Код: plaintext
OLE_1.OBJECTDATA= LBLOB1
первее отрабатывает событие SystemError
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176415
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001 а сам ole - инициализиться?
Имелось в виду такое?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
OleObject ole_1
integer rezult

ole_1 = Create OleObject
rezult = ole_1.ConnectToNewObject('excel.application')
if rezult <>  0  then
	messagebox("Error", string(rezult))
else
	ole_1.workbooks.open(s_fname1)			
end if
Не использую в данном случае, есть только визуальный контрол, т.к. не знаю как открыть Blob c экселем в конструкции ole_1.workbooks.open( )
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176693
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там надо было еще SetAutomationPointer использовать

Код: plaintext
1.
2.
3.
4.
oo_1 = Create oleobject
oo_2 = Create my_oleobject
oo_1.ConnectToNewObject("Excel.Application")
oo_2.SetAutomationPointer(oo_1) 
как то так.
my_oleobject inherited from OLEObject
и в ем есть код обработки externalexception.
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35176979
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрейТам надо было еще SetAutomationPointer использовать
Спасибо, пойду читать.
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35177828
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может просто сделать temp-файл и открыть олешником
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35178671
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую от простого к сложному.
Для обработки события External Exception создаю пользовательский объект стандартного класса OleObject.
Передаю указатель автоматизации Ole из переменной ole_1 (соединяется с сервером ole) в мой ole_2.
При открытии файла 'C:\1.xml' попадаю в SystemError Event без обрабатывания External Exception.
Есть подозрение, что я курю не ту траву...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
OleObject ole_1
my_oleobject ole_2
integer rezult
string s_fname1

ole_1 = Create OleObject
ole_2 = Create my_oleobject
//--------------------------
rezult = ole_1.ConnectToNewObject('excel.application')
//--------------------------
ole_2.SetAutomationPointer(ole_1)
if rezult <>  0  then
	messagebox("Error", string(rezult))
else
	s_fname1 = 'C:\1.xml'
	ole_1.workbooks.open(s_fname1)					
end if

messagebox('excel file','open')
ole_2.DisconnectObject()
ole_1.application.Quit
	DESTROY OLE_2
	DESTROY OLE_1

Application systemerror event:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
event systemerror;string ls_logline

ls_logline = "SYSTEM ERROR: "
ls_logline += String(error.number) + " " + error.text
ls_logline += " occurred at line " + &
		String(error.line) + " "
ls_logline += " in event " + error.objectevent
ls_logline += " of object " + error.object

if Messagebox("System Error", ls_logline + &
		"~r~n~r~nDo you want to stop the program?", &
		Question!, YesNo!) =  1  then
		HALT CLOSE
end if

end event

Мой User Object:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
$PBExportHeader$my_oleobject.sru
forward
global type my_oleobject from oleobject
end type
end forward

global type my_oleobject from oleobject
end type
global my_oleobject my_oleobject

event externalexception;

        Messagebox( "Exception code", String(exceptioncode) ) 
            action = ExceptionIgnore!

end event

on my_oleobject.create
call super::create
TriggerEvent( this, "constructor" )
end on

on my_oleobject.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event error;action = ExceptionIgnore!
end event
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35178686
Uzrptav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001Может просто сделать temp-файл и открыть олешником
Торможу... не совсем понял идею :))
...
Рейтинг: 0 / 0
SelectBlob и Ole control
    #35179125
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это так - заглушка
Делаешь gettempfilename или сам назначаешь
Filewrite в streammode
ole - инициализация
ole - open(темп)
Работает 100%

-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / SelectBlob и Ole control
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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