【问题标题】:Find distinct set of values using Access VBA使用 Access VBA 查找不同的值集
【发布时间】:2016-11-16 18:32:05
【问题描述】:

我想从 MS Access 中的多个表中的某些字段集合中找到不同的值列表。但是,我的 VBA 代码只返回每个字段的第一个值(而不是每个字段中不同值的完整集合)。请看下面:

Sub GetDistinctValues()

    Dim tbl As DAO.TableDef
    Dim fld As DAO.Field
    Dim rs As DAO.Recordset
    Dim rs1 As DAO.Recordset

    Set rs = CurrentDb.OpenRecordset("Fields_To_Examine")

    Do While Not rs.EOF
    For Each tbl In CurrentDb.TableDefs

        If tbl.Name = rs("Table_Name") Then
        Debug.Print tbl.Name

            For Each fld In tbl.Fields
                If fld.Name = rs("Field_Name") Then
                Debug.Print fld.Name

                    Set rs1 = CurrentDb.OpenRecordset("SELECT DISTINCT " & tbl.Name & ".Source_System, " & tbl.Name & "." & fld.Name & " FROM " & tbl.Name)
                    Debug.Print rs1(0), rs1(1)

                    rs.MoveNext

                End If
            Next
         End If
    Next
    Loop

    rs.Close
    rs1.Close

    Set rs = Nothing
    Set rs1 = Nothing

    End Sub

对我哪里出错有什么建议吗?

【问题讨论】:

    标签: ms-access vba distinct-values


    【解决方案1】:

    MoveNext 在字段循环内,所以:

    For Each tbl In CurrentDb.TableDefs
    
        If tbl.Name = rs("Table_Name") Then
        Debug.Print tbl.Name
    
            For Each fld In tbl.Fields
                If fld.Name = rs("Field_Name") Then
                Debug.Print fld.Name
    
                    Set rs1 = CurrentDb.OpenRecordset("SELECT DISTINCT " & tbl.Name & ".Source_System, " & tbl.Name & "." & fld.Name & " FROM " & tbl.Name)
                    Debug.Print rs1(0), rs1(1)
    
                End If
            Next
         End If
    Next
    rs.MoveNext
    

    【讨论】:

    • 感谢@Gustav 的反馈。但是,我将 rs.movenext 移到了您建议的位置,但它仍然只返回每个字段中的第一个值?
    • 是的。我不知道您要做什么,但是对于每个 fld,您只需打开 rs1 但不要循环它,因此它永远不会移动。
    猜你喜欢
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多