powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / нужна помощь с New (Set) и Nothing
8 сообщений из 8, страница 1 из 1
нужна помощь с New (Set) и Nothing
    #34321756
ElinaCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день ,
помогите разобратся с Nothing вернее когда его надо делать , всё работает ,но правильно ли
вот например
модуль ,где объявлены переменные связи и функция связи и форма где при нажатии на кнопку вызывает функцию связи 2 раза .Если я правильно понимаю Nothing мне надо делать каждый раз
после вызова функции (в данном примере 2 раза) или можно один раз в unload - но тогда наверное теряются New после первого вызова
модуль
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public rstConnGenericRecordset As ADODB.Connection
Public strConnectionGenericRecordset As String
Public rstGenericRecordset As ADODB.Recordset

Public Sub OpenDB()
    ........
    Set rstConnGenericRecordset = New ADODB.Connection
   ...
    
    Set rstGenericRecordset = New ADODB.Recordset

    .......
End Sub

форма
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Private Sub cmdOK_Click()

......
Call OpenDB

.....
Set rstConnGenericRecordset = Nothing
Set rstGenericRecordset = Nothing

  If (......) Then
     Call OpenDB
     ........
    Set rstConnGenericRecordset = Nothing
    Set rstGenericRecordset = Nothing
  End If
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34322564
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
Set rstConnGenericRecordset = Nothing
Set rstGenericRecordset = Nothing
If (rstConnGenericRecordset Is Nothing) Then
    Call OpenDB
    Set rstConnGenericRecordset = Nothing
    Set rstGenericRecordset = Nothing
End If

и еще насчет префиксов в имени переменных, вместо
Код: plaintext
rstConnGenericRecordset
я бы сделал
Код: plaintext
cnnGeneric

Например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public cnnGeneric As ADODB.Connection
Public strGenericConnectionString As String
Public rstGenericRecordset As ADODB.Recordset

Set cnnGeneric=New ADODB.Connection
cnnGeneric.Open strGenericConnectionString
Set rstGenericRecordset=New ADODB.Recordset
rstGenericRecordset 'Table',cnnGeneric,adOpenKeyset,adLockReadOnly
rstGenericRecordset.Close
cnnGeneric.Close
Set rstGenericRecordset=Nothing
Set cnnGeneric=Nothing
и т.д. с перехватом ошибок, ну... это только мое предпочтение... ;) а вообще можете хоть как именовать переменные ;)
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34324556
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы уверены, переменные связи надо декларировать как public? Если их вводить внутри процедур, то и Set ... Nothing может даже не потребуется.
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34325687
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто переделал в именах переменных префикс в примере автора
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34326595
ElinaCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большое спасибо за советы

если можно объяснить
Код: plaintext
1.
А вы уверены, переменные связи надо декларировать как public? Если их вводить внутри процедур, то и Set ... Nothing может даже не потребуется.

если можно пример не совсем понятно когда не надо делать Set ... Nothing
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34330931
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На примере класса ADODB.Connection.
Код: plaintext
Dim cnn As ADODB.Connection
Объявляем переменную cnn как ADODB.Connection. Объект пока еще не создан.
Код: plaintext
Set cnn = New ADODB.Connection
Создаем объект ADODB.Connection. Именно сейчас срабатывает конструктор класса.
Код: plaintext
Set cnn = Nothing
Удалаем объект (т.е. освобождаем занимаемую им память). Сейчас срабатывает деструктор.


К слову: есть позднее и ранне связывание.
Зацените варианты
А:
Код: plaintext
Dim cnn As New ADODB.Connection
Б:
Код: plaintext
1.
Dim cnn As ADODB.Connection
Set cnn = New ADODB.Connection
При кажушейся выгоде от варианта А, вариант Б предпочтительнее. Причина: в варианте А объект создается при первом обращении к cnn... и при каждом последующем обращении проверяется, создан ли объект. В варианте Б таких проверок не происходит, кроме того вы можете управлять (т.е. контролировать вызов) консрукторами и деструкторами классов.
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34330950
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл добавить, что при выходе из видимости переменной
Код: plaintext
Set cnn = Nothing
срабатывает сам.
Т.е. если в процедуре объявлен и создан объект, с областью видимости <процедура>, то по завершении этой процедуры все объекты сами удалятся.
...
Рейтинг: 0 / 0
нужна помощь с New (Set) и Nothing
    #34333008
ElinaCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большое спасибо
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / нужна помощь с New (Set) и Nothing
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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