Деинициализация Вариантовской переменно

  • Автор темы Mirage
  • Дата начала
M

Mirage

#1
Есть код соединения с базой 1С

Код:
Set MyApp = CreateObject ( "V81.ComConnector")
Set Base_ = MyApp.Connect ( "Srvr=server02; Ref=Copy;")
в работе при выборке может произойти ошибка (при нормальной работе происходет самостоятельная деинициализация переменной) и, как следствие, сессия остается висеть.
Как правильно деинициализировать вариантовскую переменную при ошибке?
 
M

Mirage

#3
Mirage
а дисконект пробывали?
я не лотусятник, я 1С ник, поэтому если можно кинте пример, :)
пробовали так

Set Base_ =0
Set MyApp =0

говорит что нельзя класу присвоить аргумент. по идее вызов дисконекта не обязателен, т.к. при нормальной работе его не вызываем,
а при выходе из функции видимо все переменные освобождаются, так вот я думаю как их освободить "насильно", в 1С ке скажем, хватило бы присвоения переменной любого другого значения
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
Есть код соединения с базой 1С

Код:
Set MyApp = CreateObject ( "V81.ComConnector")
Set Base_ = MyApp.Connect ( "Srvr=server02; Ref=Copy;")
в работе при выборке, может произойти ошибка, при нормальной работе,
происходет самостоятельная деинициализация переменной, и как следствие
сессия остается висеть, как правильно деинициализировать вариантовскую переменную,
при ошибке ?
Код:
 On Error Goto ErrOneC
Set MyApp = CreateObject ( "V81.ComConnector")
Set Base_ = MyApp.Connect ( "Srvr=server02; Ref=Copy;")
...
exit sub
ErrOneC:
'код деинициализации
Set Base_ = Nothing
Set MyApp = Nothing
P.S. Вообще-то не по адресу вопрос. Он уместнее где-нибудь в VBA или 1С
 

hosm

* so what *
18.05.2009
2 442
6
#5
P.S. Вообще-то не по адресу вопрос. Он уместнее где-нибудь в VBA или 1С
В VBA точно не буду отправлять.
(по секрету) Еще встречаются лотусисты, которые с 1С работают, пусть пока тема живет здесь...
Автор, отпишитесь - если не получится, перекинем в 1С :)
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#6
говорит что нельзя класу присвоить аргумент. по идее вызов дисконекта не обязателен, т.к. при нормальной работе его не вызываем
а вот это и не правильно!
конект значит делаем а дисконект не хотим, что за прикол?
данный обьект будет висеть в памяти вечно без дисконекта
потом
Код:
delete Base_
delete MyApp
 
K

Klido

#8
это же внутри платформы :)
зато если, например, по jdbc коннект делать к тому же sql-серверу, то всё надо явно закрывать :)
rs.close(); - закрытие резалттсета
pstmt.close(); - закрытие вызова
con.close(); - закрытие коннекта, если вот тут не делать - коннекты на базу висят и плодятся....
 
M

Mirage

#10
не, ну я ж не знаю, а вдруг не обязательно ))
Точно не обязательно, при выходе из процедуры "корректном" должны уничтожаться все параметры, а оле2 посторенна так что висит до тех пор пока есть хоть один клиент к ней присоединеный, так что должно взлетать,
посмотрел как народ на VBA делает

Код:
Set Base_ = Nothing
Set MyApp = Nothing
Но не помогает
висит, а метода дисконект у этого объекта нет вроде совсем
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Точно не обязательно, при выходе из процедуры "корректном" должны уничтожаться все параметры, а оле2 посторенна так что висит до тех пор пока есть хоть один клиент к ней присоединеный, так что должно взлетать,
посмотрел как народ на VBA делает

Код:
Set Base_ = Nothing
Set MyApp = Nothing
Но не помогает
висит, а метода дисконект у этого объекта нет вроде совсем
Ну, эти строчки просто "зачищают" значения объектных переменных, сами объекты надо как-то дестроить. Подразумевалось, что вместо строки с комментарием " 'код деинициализации " будет собственно код деинициализации.
1С-ной комы не знаю, могу лишь посоветовать попробовать что-то вроде
Код:
 ...
ExitSub:
Exit Sub
ErrOneC:
Delete Base_
MyApp.Close
Resume ExitSub
End Sub