2017-04-13 21 views
1

私はAccessとVBAプログラミングに関する知識を持っていますが、にはといういくつかの知識があります。私は大学時代からAccessを使っていません。テーブル内の情報に基づいてクエリを作成する

私はテーブルLocationPostcodeGroup Codeの2つのフィールドを持っています。このリストには1,693,353件のレコードがあります。

Group NameGroup Codeの2つのフィールドを持つGroupという別のテーブルがあります。 約300の異なる権限レコードがあります。

私はグループごとにテーブル/クエリを作成し、テーブル内の異なる場所のポストコードを作成する必要があります。

グループコードを基準にして300種類のクエリをすべて実行し、それが一致するとわかっていますが、これは300種類のクエリを作成することを意味します。

私が知りたいのは、このプロセスを自動化する方法があるかどうかです。私は人々が私のためにそれを作成するように求めているのではありませんが(もしそうでない限り)、Access VBAの学習に参考になるガイドやチュートリアルがあれば助けになります。

+1

わからない 'Group'は最高の名前である - 'グループBy'と競合する可能性があります。 'SELECT GroupName、Postcode FROM [Group] INNER JOIN Location ON Group.GroupCode = Location.GroupCode'そして、各GroupNameでそれをフィルタリングするために単一のクエリを使用できませんでしたか? –

答えて

1

このクエリにはすべてのグループが含まれます(私はSQL_Groupという名前を付けました) SELECT GroupName, Postcode FROM [Group] INNER JOIN Location ON Group.GroupCode = Location.GroupCodeはあなたのグループを作成します。各グループによる

このコード意志サイクルは:

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

ありがとうございます。レコードを解読するのにうまくいき、関連する名前とSQL文字列でクエリを作成できるようにコードを変更することができました。 –

関連する問題