2012-04-18 79 views
3

我最近已经开始与大型Access VBA/SQL Server应用程序的另一个程序员的工作。在每一个功能有相同ADODB连接,我们试图取代那些单一功能,可每次都被调用,以节省空间。下面是函数:如何从VBA函数返回一个ADODB.Connection?

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 

这样看来,应该返回连接,而是我们得到一个错误信息:上线

ConnectionString = CN

User-Defined Function not found

我究竟做错了什么?

回答

3

您需要Set返回值:

Set ConnectionString = CN 

另外,如果它总是相同的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 2012-04-19 20:43:30