Функция фильтра набора записей DAO не может фильтровать с 2 свойствами

Я использую VBA в MS Access 2010.

В настоящее время я пытаюсь отфильтровать из набора записей с 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 и не вижу, где я ошибся. (Может быть, я что-то упустил)

2 ответа

Решение

Я немного изменил коды, и это работает. Но не уверен, почему, хотя.

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

Гораздо проще устранить неполадки, если вы предоставляете свой реальный код посредством копирования / вставки. При этом, мне просто интересно, почему вы используете два набора записей? Получаете ли вы правильный ответ, если вы действительно делаете свой цикл на реальном фильтрованном наборе записей?

Устранить линию

Set rsFiltered = rs.OpenRecordset

Используйте этот блок кода на rs вместо rsFiltered

Do While Not rs.EOF
    ' Do Something
Loop
Другие вопросы по тегам