如何在 VBA 中获取 Select SQL 语句的结果

Posted

技术标签:

【中文标题】如何在 VBA 中获取 Select SQL 语句的结果【英文标题】:How do I get the result of a Select SQL statement in VBA 【发布时间】:2017-08-18 15:16:54 【问题描述】:

我希望能够使用 SQL 从表中检索数据并显示到 Access 中的即时窗口。

我是 VBA 新手,但我似乎找不到方法

Dim strSQL As String
Dim cdb As DAO.Database
Dim result As Variant

strSQL = "SELECT x, from y WHERE z;"

Set cdb = CurrentDb

Debug.Print strSQL

result = Call cdb.Execute(strSQL)

Debug.Print result 

【问题讨论】:

Execute 不是这样做的正确方法。您需要使用 Recordset 对象让它返回一组数据。此外,在您的选择语句中删除 x 之后的逗号。 msdn.microsoft.com/en-us/library/bb243789(v=office.12).aspx Execute返回一个Recordset对象,所以需要Set results = connection.Execute(sql),然后迭代返回的记录。该站点上数千个地方提供了大量帮助和示例。您是否尝试过搜索 不执行(sql),Dim result AS DAO.Recordset 然后Set result = CurrentDb.OpenRecordset(strSQL) 【参考方案1】:

仅从第一条记录打印字段值。

Dim strSQL As String
Dim result As DAO.Recordset
strSQL = "SELECT x FROM y WHERE z;"
Set result = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
Debug.Print result!x

如果您想从每条记录中打印一个值,请使用循环结构移动到每条记录,例如:

Do While Not result.EOF
    Debug.Print result!x
    result.MoveNext
Loop

查看此站点http://allenbrowne.com/tips.html - 查看大约一半的“图书馆示例”部分。

【讨论】:

【参考方案2】:

要只用一行生成结果(假设只返回一条记录),您可以使用:

Debug.Print CurrentDb.OpenRecordset("SELECT x FROM y WHERE z").Fields(0).Value

您还可以使用 DLookUp 函数,它不是 SQL,但您会识别部分:

Debug.Print DLookUp("x", "y", "z")

【讨论】:

【参考方案3】:

使用 With 语法的替代方法 ..

Dim Cnt as Long
With CurrentDb.OpenRecordset("SELECT Count(*) FROM MyTable WHERE X=2")
    If Not .EOF Then
        Cnt = .Fields(0).Value
    End If
End With

【讨论】:

以上是关于如何在 VBA 中获取 Select SQL 语句的结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询

在access中用vba如何把SQL语句查询到的一个值赋给变量?

用vba如何使用sql

VBA SQL写入语句,从一个表格写入令一个表格?

MS-Access 获取字段值,通过 VBA 函数运行,并发送到 SQL

access2013 VBA中怎样运行sql语句