2016-04-19 7 views
2

В чем разница междуПочему и когда я использую ключевое слово New при объявлении нового набора записей в Access VBA?

Dim rs as New adodb.recordset 

и

Dim rs as adodb.recordset 

В каких ситуациях я хотел бы использовать новое заявление или не использовать его? Для контекста я работаю над приложением доступа ADODB, которое подключается к концу SQL Server Back.

+2

Возможный дубликат [? Что ключевое слово 'New' сделать в VBA] (http://stackoverflow.com/questions/21652671/what-does-the -keyword-new-do-in-vba) –

+0

@ Mat'sMug Этот вопрос относится только к Microsoft Access и Recordsets, который отличается от http://stackoverflow.com/questions/21652671/what-does-the-keyword- new-do-in-vba –

+0

Я добавил примечание, относящееся к 'ADODB.Recordset'. –

ответ

3

Ключевое слово New создает экземпляр объекта , номер ADODB.Recordset.

Объектная переменная должна иметь ссылку прежде, чем она может быть доступна, так что:

Dim rs As ADODB.Recordset 
rs.Open "SELECT * FROM TableName" 

... взорвется во время выполнения с ошибкой # 91 - «Объект или с блоком переменная не установлена ​​". Важная часть этого сообщения здесь «не установлена».

Когда вы делаете:

Dim rs As New ADODB.Recordset 

Вы действительно делаете:

Dim rs As ADODB.Recordset 
Set rs = New ADODB.Recordset 

Set ключевое слово используется для присвоить ссылку к переменной объекта.


ADODB.Recordset В частности о, я бы сказал, что вы не обычно хотят New до набора записей. Вместо этого вы должны получить один запустив параметризованный ADODB.Command (например, когда команда запускает оператор SELECT, вы получите результат Recordset).


Я бы посоветовал против использования As New ярлыка в процедуре области. Главным образом из-за этого:

Private Sub Test() 
    Dim c As New Collection 
    c.Add "Test" 
    Set c = Nothing 
    Debug.Print c.Count 'what happens here? 
End Sub 

Если вы думаете, что приведенное выше код взрывается, потому что c не «набор» больше, когда c.Count доступа, вы укусили.

Этот код ведет себя, как и ожидалось:

Private Sub Test() 
    Dim c As Collection 
    Set c = New Collection 
    c.Add "Test" 
    Set c = Nothing 
    Debug.Print c.Count 'what happens here? that's right, boom! 
End Sub