MS Access VBA:基于查询结果的 VBA 命令

Posted

技术标签:

【中文标题】MS Access VBA:基于查询结果的 VBA 命令【英文标题】:MS Access VBA: VBA command based on Query Result 【发布时间】:2015-08-26 02:24:30 【问题描述】:

有什么方法可以将查询结果用作包含动态 sql 语句的 VBA 模块中的条件??

例如

if( count(user_id) from table > 0, THEN xport and send email to a,b,c)

我试图让条件依赖于特定的查询结果。所以如果某个查询有任何结果,我会让模块对结果做出反应。

我尝试的唯一另一种方法是从 EXCEL 查询数据库,并让 excel 的 VBA 对某个单元格的值做出反应(这将包含我试图访问的相同条件..但 id 而不是 STAY in access as尽可能多)

谢谢!

【问题讨论】:

当然有; Access 是一个桌面数据库,如果您无法在代码中从该数据中检索值,那么它将毫无用处。这是非常基本的东西,看来您应该找到一个 Access 教程来学习这些基础知识。 查看 Access 帮助系统中的 Application.DCount 方法 主题。 谢谢,我正在将 90% 的报告和知识功能转换到 Access,因此 VBA 转换对于我需要完成的时间表来说有点忙 - 等待我的书进来,我很感激现场帮助人们。 【参考方案1】:

使用 DCount:

If DCount("*", "[table]") > 0 Then
    ' Insert code to export and send email to a,b,c.
Else
    ' Don't.
End If

【讨论】:

太棒了,我得到了相同的结果,但 vba 更多。我一直在使用 excel 并自动化查询特定表的宏,使用功能单元作为 VBA 之外的变量,这样编辑变量等速度要快得多。但是,我没有看到像上面的代码那样更快、更简单的东西。【参考方案2】:

DCount 显然是访问 Access 的方式。如果您不在 Access 中,则需要创建一个记录集并测试其值

Sub TestRecordCount()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set cn = New ADODB.Connection
    cn.Open msCONNSTRING

    Set rs = cn.Execute("SELECT COUNT(*) FROM table")

    If rs.Fields(0).Value > 0 Then
        'do stuff
    End If

    rs.Close
    cn.Close

End Sub

由于记录集只返回一个记录一个字段,你可以测试.Fields(0).Value 看看表中有多少条记录。

【讨论】:

以上是关于MS Access VBA:基于查询结果的 VBA 命令的主要内容,如果未能解决你的问题,请参考以下文章

使用 vba 将 MS Access 查询输出到 Excel

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075

MS Access VBA 修改 Excel 工作表而不写入 Drive

MS Access - VBA 中报告的参数

基于筛选查询的MS Access查询

使用 VBA 从 MS Access 发送电子邮件