2016-11-16 3 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

関連する問題