Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / нужна помощь с New (Set) и Nothing / 8 сообщений из 8, страница 1 из 1
11.02.2007, 12:54
    #34321756
ElinaCh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
добрый день ,
помогите разобратся с 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
12.02.2007, 06:38
    #34322564
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
Код: 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
12.02.2007, 16:40
    #34324556
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
А вы уверены, переменные связи надо декларировать как public? Если их вводить внутри процедур, то и Set ... Nothing может даже не потребуется.
...
Рейтинг: 0 / 0
13.02.2007, 05:29
    #34325687
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
Я просто переделал в именах переменных префикс в примере автора
...
Рейтинг: 0 / 0
13.02.2007, 12:06
    #34326595
ElinaCh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
большое спасибо за советы

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

если можно пример не совсем понятно когда не надо делать Set ... Nothing
...
Рейтинг: 0 / 0
14.02.2007, 16:09
    #34330931
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
На примере класса 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
14.02.2007, 16:13
    #34330950
Проходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
Забыл добавить, что при выходе из видимости переменной
Код: plaintext
Set cnn = Nothing
срабатывает сам.
Т.е. если в процедуре объявлен и создан объект, с областью видимости <процедура>, то по завершении этой процедуры все объекты сами удалятся.
...
Рейтинг: 0 / 0
15.02.2007, 13:01
    #34333008
ElinaCh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нужна помощь с New (Set) и Nothing
большое спасибо
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / нужна помощь с New (Set) и Nothing / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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