Excel自定义函数中如何使用ADO查询访问数据库

Posted

技术标签:

【中文标题】Excel自定义函数中如何使用ADO查询访问数据库【英文标题】:How can I use ADO to query access db in Excel custom functions 【发布时间】:2017-05-08 14:44:58 【问题描述】:

我几乎正在尝试使用自定义函数复制 VLOOKUP 功能,以将数据从 Access DB 提取到 Excel 电子表格中。以前从未这样做过,但我的理解是这应该可行:

Function query(lookup_value)

    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sQRY As String
    Dim strFilePath As String

    strFilePath = "Z:\filepath\database.accdb"

    Set cnn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " & strFilePath & ";Jet OLEDB:Database Password=password;"
    cnn.Open

    sQRY = "SELECT TOP 1 Ethnic FROM central_reference_table WHERE LearnerCode = '" & lookup_value & "'"

    rs.Open sQRY, cnn

    query = rs.Fields(0).Value

    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing


End Function

代码运行,但返回一般 #VALUE 错误。我可以在带有Sheet1.Range("A1").CopyFromRecordSet 的Sub 中使用相同的连接字符串,它会按预期运行,将数据库中的第一行放到我的工作表中。所以问题一定是query = rs.Fields(0).Value,但我在网上找到的所有内容都表明这是正确的方法,所以我很茫然。

【问题讨论】:

我很难相信代码会作为子代码工作,因为它应该是:Set rs = New ADODB.RecordSet 而不是 Set rs = New ADODB.Record 我的调整中的错字就是全部,当我说“我让它作为一个子工作”时,我没有撒谎。 好吧,如果你更正了,它也可以作为一个函数工作——假设数据库路径是正确的并且实际上有匹配输入条件的记录。 headdesk。啊,上帝,我讨厌生活。谢谢 - 作为答案发布,您将获得代表:) 【参考方案1】:

如果你纠正这个:

Set rs = New ADODB.Record

到这里:

Set rs = New ADODB.RecordSet

那么它将作为一个函数工作,前提是 db 路径是正确的并且实际上有匹配输入条件的记录。你真的应该为此添加一些错误处理。

【讨论】:

以上是关于Excel自定义函数中如何使用ADO查询访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

自定义 ADO.NET 提供程序以拦截和修改 sql 查询

Excel 的 NETWORKDAYS 函数与 Jet ADO 的等效项

VBA Excel ADO SQL 更新查询不起作用

使用 Delphi 检索 ADO 错误

Excel VBA中的ThisCell属性如何使用?

帆软自定义函数其他系统也要用怎么做