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 находится внутри цикла поля, так что:

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

Благодарность за @Gustav обратной связи. Однако я переместил rs.movenext туда, где вы предлагаете, но он по-прежнему возвращает только первое значение в каждом поле? – mccdo

+0

Да. Я не знаю, что вы пытаетесь сделать, но для каждого fld вы просто открываете rs1, но не зацикливаете его, чтобы он никогда не двигался. – Gustav

 Смежные вопросы

  • Нет связанных вопросов^_^