sql-server - 如何从 VBA 中的函数返回 ADODB.Connection?

标签 sql-server ms-access database-connection vba adodb

我有一个大型 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/

相关文章:

c# - SQL Server 2008——并行执行查询

ms-access - 从另一个数据库 Access SQL 查询

mysql - 为什么当我将网站放在 debian 服务器上时出现辣椒连接错误

sql-server - SQL Server 时区

sql-server - 使用 OPENROWSET 时如何获取列名?

ms-access - 将超过 550000 行的巨大 CSV 文件导入 Access

sql-server - 奇怪的 'returned data that does not match expected data length for column' 错误,而预期的长度要大得多 - SQL SERVER 2012

java - Java单数据库线程如何实现

c# - 如果连接已经打开,可以调用 OracleConnection.Open() 吗?

mysql - 内连接查询(sql)