2016-11-16 1 views
2

MS Access의 여러 테이블에서 특정 필드 컬렉션의 고유 한 값 목록을 찾고 싶습니다. 그러나 내 VBA 코드는 각 필드의 첫 번째 값만 반환하며 각 필드의 고유 한 값의 전체 컬렉션은 반환하지 않습니다. 아래를 참조하십시오 :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 

내가 잘못하고있는 부분에 대한 제안 사항이 있으십니까?

답변

1

MoveNext는 너무 필드 루프 내부 : 피드백 용 @Gustav

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 
+0

감사합니다. 그러나 rs.movenext를 제안한 위치로 옮겼지만 각 필드의 첫 번째 값만 반환합니다. – mccdo

+0

예. 나는 당신이 무엇을하려고하는지 모르지만, 각 fld에 대해 rs1을 열었지만 반복하지 않으므로 결코 움직이지 않을 것입니다. – Gustav

관련 문제