【问题标题】:VBA cannot find date field from queryVBA 无法从查询中找到日期字段
【发布时间】:2019-03-25 17:43:05
【问题描述】:

我从 3 个相关表中创建了一个查询 OrderAllQuery。其中一个字段是在原始表和名为OrdDate 的查询中具有相同名称的日期字段。

我有一个简单的子程序来运行查询,然后运行特定日期范围的报告。 OrdDate 必须在范围内。 sub(见下文)在Odate = 行上显示2465。

看不出问题。欢迎任何建议

Private Sub cmdOrders_Click()
    DoCmd.OpenQuery "OrderAllQuery"
    Dim Odate As Date
    Odate = [OrderAllQuery.OrdDate]
    DoCmd.Close acQuery, "OrderAllQuery"

    Call RunReport("Orders Report", Odate, Me.txtDateFrom, Me.txtDateTo)
End Sub

【问题讨论】:

  • 这是否给了您想要的价值? Odate = DLookup("[OrdDate]", "OrderAllQuery")

标签: ms-access vba


【解决方案1】:

注意DoCmd 对象的OpenQuery 方法只会在数据表视图中打开给定名称的查询(假设查询不是操作查询,并且未指定视图参数);然后,您无法通过代码直接从数据表视图中获取数据。

要从查询中获取值,您可以将查询作为 DAO 或 ADO 记录集打开,例如:(使用 DAO):

Private Sub cmdOrders_Click()
    With CurrentDb.OpenRecordset("OrderAllQuery")
        If Not .EOF Then
            .MoveFirst
            Call RunReport("Orders Report", !OrdDate, Me.txtDateFrom, Me.txtDateTo)
        End If
        .Close
    End With
End Sub

如果您不关心返回哪条记录,也可以使用DLookupDFirst 等域聚合函数:

Private Sub cmdOrders_Click()
    Dim odate As Date
    odate = DFirst("OrdDate", "OrderAllQuery")

    If Not IsNull(odate) Then
        Call RunReport("Orders Report", odate, Me.txtDateFrom, Me.txtDateTo)
    End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2017-04-11
    • 2011-05-30
    • 1970-01-01
    • 2012-09-10
    • 2014-03-05
    相关资源
    最近更新 更多