3

Я недавно начал работать с другим программистом на большом приложении VBA/SQL Server. В каждой функции есть одно и то же соединение ADODB, и мы пытаемся заменить их одной функцией, которую можно вызывать каждый раз, чтобы сэкономить место. Вот функция:Как вернуть ADODB.Connection из функции в VBA?

Public Function ConnectionString() As ADODB.Connection 
Dim CN As ADODB.Connection 

Set CN = New ADODB.Connection 

With CN 
    .Provider = "Microsoft.Access.OLEDB.10.0" 
    .Properties("Data Provider").Value = "SQLOLEDB" 
    .Properties("Data Source").Value = DLookup("Source", "tbl_Connection") 
    .Properties("Initial Catalog").Value = DLookup("Catalog", "tbl_Connection") 
    .Properties("Integrated Security").Value = SSPI 
    .Open 
End With 

ConnectionString = CN 

End Function 

Похоже, это должно возвращать эту связь, но вместо этого мы получаем сообщение об ошибке:

User-Defined Function not found

на линии

ConnectionString = CN

Что я делаю не так?

ответ

3

Вы должны Set возвращаемое значение:

Set ConnectionString = CN 

Plus, если это всегда то же самое соединение ADODB в любом случае, вы можете сохранить его в переменной и «перерабатывают» его оттуда, так что фактическое создание соединения происходит ровно один раз (когда функция ConnectionString вызывается в первый раз).

Private CN As ADODB.Connection 'variable in the module - NOT in the function 

Public Function ConnectionString() As ADODB.Connection 

If CN Is Nothing Then 

    Set CN = New ADODB.Connection 

    With CN 
     'do stuff 
    End With 

End If 

Set ConnectionString = CN 

End Function 
+0

Это сработало! Такое простое решение. Должен был пробовать это, но я все еще довольно новичок в этом. – SaintWacko

Смежные вопросы