2017-04-13 4 views
1

Ich habe einige Kenntnisse von Access und VBA-Programmierung, aber ich betone einige. Ich habe Access seit der Uni nicht wirklich benutzt.Erstellen Sie Abfragen basierend auf Informationen in einer Tabelle

Ich habe eine Tabelle Location mit 2 Feldern genannt: Postcode und Group Code. Diese Liste hat 1.693.353 Datensätze.

Ich habe eine andere Tabelle namens Group mit 2 Feldern: Group Name und Group Code. Es gibt ungefähr 300 verschiedene Autorität Aufzeichnungen.

Ich muss für jede Gruppe eine Tabelle/Abfrage erstellen und die verschiedenen Position Postleitzahlen in den Tabellen haben.

Ich weiß, dass ich durch 300 verschiedene Abfragen alle mit dem Gruppencode als Kriterien und das würde sie übereinstimmen können, aber das bedeutet 300 verschiedene Abfragen machen.

Was ich gerne wissen würde, ist, wenn es eine Möglichkeit gibt, diesen Prozess zu automatisieren. Ich fordere nicht, dass die Leute es für mich erstellen (es sei denn, sie möchten es), aber wenn es Anleitungen oder Tutorials gibt, die die Leute zum Erlernen von Access VBA empfehlen könnten, würde das auch helfen.

+1

Nicht sicher 'Group' ist der beste Name - steht in Konflikt mit' Gruppe By'. Können Sie nicht eine einzelne Abfrage verwenden, um alle Gruppen zurückzugeben - 'SELECT Gruppenname, Postleitzahl FROM [Gruppe] INNER JOIN Standort ON Group.GroupCode = Location.GroupCode' und filtern Sie es dann für jeden GroupName? –

Antwort

1

Diese Abfrage enthält alle Ihre Gruppen (ich habe es SQL_Group genannt) SELECT GroupName, Postcode FROM [Group] INNER JOIN Location ON Group.GroupCode = Location.GroupCode wird Ihre Gruppen erstellen.

Dieser Code schaltet durch jede Gruppe:

Public Sub FilterQuery() 

    Dim qdf As DAO.QueryDef 
    Dim rst As DAO.Recordset 
    Dim rst_Groups As DAO.Recordset 
    Dim rst_Filtered As DAO.Recordset 
    Dim db As DAO.Database 

    Set db = CurrentDb 

    Set qdf = db.QueryDefs("SQL_Group") 
    Set rst = qdf.OpenRecordset 
    Set rst_Groups = db.OpenRecordset("Group") 

    With rst_Groups 
     If Not (.BOF And .EOF) Then 
      .MoveFirst 
      Do While Not .EOF 
       rst.Filter = "GroupName = '" & rst_Groups.Fields("GroupName") & "'" 
       Set rst_Filtered = rst.OpenRecordset 
       With rst_Filtered 
        If Not (.BOF And .EOF) Then 
         .MoveFirst 
         Do While Not .EOF 
          Debug.Print .Fields("GroupName") & " : " & .Fields("PostCode") 
          .MoveNext 
         Loop 
        End If 
        .Close 
       End With 
       .MoveNext 
      Loop 
     End If 
     .Close 
    End With 

    Set rst_Filtered = Nothing 
    Set rst = Nothing 
    Set rst_Groups = Nothing 

End Sub 
+0

Vielen Dank dafür. Es funktionierte gut, die Datensätze durchzuwühlen und ich konnte den Code so ändern, dass er eine Abfrage mit dem relevanten Namen und der SQL-Zeichenfolge erstellte. –

Verwandte Themen