我有一个大型 Access VBA/SQL Server 应用程序。每个函数中都有相同的 ADODB 连接。
如何用每次都可以调用的单个函数替换它们,以节省空间。
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
行上。
最佳答案
您需要设置
返回值:
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
关于sql-server - 如何从 VBA 中的函数返回 ADODB.Connection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10218949/