Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как грамотно выгружать формы, Использование Load, Unload, Set.... 
V
    Опции темы
FallFan
Дата 11.9.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всем доброго времени суток!

Имеются 2 формы frm1 и frm2. 

В форме frm2 имеем код:

Код

Private Sub Form_Load()
Dim fso As FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(AccessBasePath) = False Then
    ErrID = 10014
    Call ErrorHandler(ErrID)
Else
    ABConnectionString = ConnectProviderString + AccessBasePath
    Set ABConnection = New ADODB.Connection
    ABConnection.Open ABConnectionString
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ABConnection.Close
    Unload frm2
    Set frm2 = Nothing
End Sub


На форме frm1 имеется кнопа cmb1 :

Код

Private Sub cmd1()

Load frm2
frm2.Enabled = True
frm2.Visible = True

End Sub


Далее проводятся такие манипуляции:
1. Запускаем проект
2. Нажимаем на frm1 кнопку cmd1 (Появляется frm2)
3. Закрываем frm2 путем нажатия "крестика"
4. Нажимаем на frm1 кнопку cmd1 (Появляется frm2)
5. Закрываем frm2 путем нажатия "крестика" (Ошибка. ABConnection не может быть закрыт, так как еще не открыт).

Т.е. При повторном нажатии cmd1 процедура Private Sub Form_Load() в коде frm2 не обрабатывается.

Получается, что форма frm2 не выгружается ?
Как сделать, чтобы обрабатывалась процедура Private Sub Form_Load() в frm2 каждый раз при её запуске, т.е. как грамотно и полностью выгрузить frm2 ?

Спасибо за внимание

Это сообщение отредактировал(а) FallFan - 11.9.2009, 22:55
PM   Вверх
neic
Дата 12.9.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



Что значит не обрабатывается?

Ваш код у меня работает (код в событии Form_Load на 2ой форме я изменил).
PM MAIL WWW ICQ Skype   Вверх
Akina
Дата 12.9.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



FallFan, запомните.
ВСЕГДА. При ЛЮБЫХ мыслимых и немыслимых сочетаниях условий. Перед выгрузкой формы следует отключить ВСЕ коннекты. К базам данных. К СОМ-серверам. К ActiveX-компонентам. И выгрузить всё, что было загружено.
Приведённый Вами код - это ужастик. И то, что Vb runtime подчищает (насколько может) за Вами всё оставленное, не повод разводить грязь.
Напишите код чисто. И никаких проблем не будет.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
FallFan
Дата 16.9.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 30.3.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



2 Akina

Не понял, как можно закрыть все коннекты до закрытия формы, если закрытие коннектов инициируется закрытием формы?

Например, пользователь просматривает через форму содержимое некой БД, по окончании он щелкает "крестик", форма закрывается, программа завершается. Как я думаю, коннекты нужно закрывать в Form_Unload, а иначе где? Или Вы имели в виду, что необходимо дописать "Set AB.Connection = Nothing" в Form_Unload ?

2 neic

Цитата

(код в событии Form_Load на 2ой форме я изменил).


Как, если не секрет?
PM   Вверх
neic
Дата 17.9.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



FallFan
я имею в виду, что вместо:
Код

Private Sub Form_Load()
Dim fso As FileSystemObject

Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(AccessBasePath) = False Then
    ErrID = 10014
    Call ErrorHandler(ErrID)
Else
    ABConnectionString = ConnectProviderString + AccessBasePath
    Set ABConnection = New ADODB.Connection
    ABConnection.Open ABConnectionString
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ABConnection.Close
    Unload frm2
    Set frm2 = Nothing
End Sub


поставил просто:
Код
s = s + 1

Где s в паблике.
Цитата(FallFan @  16.9.2009,  14:42 Найти цитируемый пост)
Или Вы имели в виду, что необходимо дописать "Set ABConnection = Nothing" в Form_Unload ?

Сначала закроем, потом отключимся:
Код

ABConnection.Close
Set ABConnection = Nothing


PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0806 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.