【问题标题】:DAO recordset filter function cannot filter with 2 propertiesDAO 记录集过滤器功能无法使用 2 个属性进行过滤
【发布时间】:2023-03-24 18:30:01
【问题描述】:

我在 MS Access 2010 中使用 VBA。

我目前正在尝试从具有 2 个字段的记录集中进行过滤。 然而我累了,它不会按照我想要的过滤。

但如果我只基于一个字段进行过滤,则记录集能够进行相应的过滤。

这就是我现在所拥有的。

Private Function getCheckedRecordsFromDB(ByVal cmNum As String) As Boolean
    Dim rs As Recordset
    Dim rsFiltered As Recordset
    Dim iSeral As Integer

    'Gets different fields from different tables and store them into rs
    Set rs = CurrentDb.OpenRecordset("QueryMemoOutFrm")

    ' Its not working during the filtering, keeps returning nothing found
    rs.Filter = "Doctype='Outgoing' AND DocumentRef='" & cmNum & "'"
    Set rsFiltered = rs.OpenRecordset

    Do While Not rsFiltered.EOF
        ' Do Something
    Loop

    rs.Close
    Set rs = Nothing
    rsFiltered.Close
    Set rsFiltered = Nothing
End Function

我已阅读 MSDN 上的文档,但没有看到我哪里出错了。 (也许我错过了什么)

【问题讨论】:

  • 你有一个错字:rs.Filter 不是rs.Fliter。那是实际代码的代表吗?
  • 抱歉,已经纠正了这个错误。该错误不代表实际代码
  • DocumentRef字段的字段类型是什么?
  • 只使用一个或其他过滤器是否有效?
  • 哎呀,输入错误。改正了

标签: vba ms-access-2010 dao


【解决方案1】:

我已经稍微更改了代码并且它可以工作。但不知道为什么。

Private Function getCheckedRecordsFromDB(ByVal cmNum As String) As Boolean
    Dim rs As Recordset
    Dim rsFiltered As Recordset
    Dim dSerial As Double

    'Gets different fields from different tables and store them into rs
    Set rs = CurrentDb.OpenRecordset("QueryMemoOutFrm")

    rs.Filter = "Doctype='Outgoing' AND DocumentRef='" & cmNum & "'"
    Set rsFiltered = rs.OpenRecordset

    ' newly added
    rsFiltered.MoveFirst

        Do While Not rsFiltered.EOF
            dSerial = rsFiltered!SerialNo
            rsFiltered.MoveNext
        Loop

    rs.Close
    Set rs = Nothing
    rsFiltered.Close
    Set rsFiltered = Nothing
End Function

【讨论】:

  • 奇怪。 Option Explicit?为什么 2 个记录集而不是在 rs 中使用 where 条件?当然使用parameters
【解决方案2】:

如果您通过复制/粘贴提供实际代码,则更容易排除故障。 话虽如此,我只是想知道您为什么要使用两个记录集? 如果您真的在真实过滤的记录集上执行循环,您会得到正确的答案吗?

删除线

Set rsFiltered = rs.OpenRecordset

rs 上使用此代码块,而不是 rsFiltered

Do While Not rs.EOF
    ' Do Something
Loop

【讨论】:

  • 你认出了 rs 和 Filter 之间的点吗?但在哪里情况会更常见。
  • 它提供的实际代码。我无法复制和粘贴,因为我正在另一台不应该是气隙的笔记本电脑上开发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 2022-10-14
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多