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查询访问数据库的主要内容,如果未能解决你的问题,请参考以下文章