「マスタ」テーブル(TableA、TableB、TableC)は、リンクされたテーブルセット(TableX、TableB、TableC)テーブルの各項目は、リンクを構成するために使用されるユニークな(ロング)識別子(例えば、Aid、Xid)を有し、ユニークな((例えば、Aid、Xid)文字列)ユーザーに表示されるセレクタ(例:ASelector、XSelector)。サブレポートデータソースの書き直し時にマスターレポートとサブレポートをリンクする
各マスターまたはリンクテーブルには、すべてのテーブルデータを取り出してセレクタでソートする関連するクエリ(qryA、qryXなど)があります。
「マスタ」テーブル(A/B/C)から各アイテムの詳細をすべて表示する一連のレポートを作成したいと思います。各レポートにはリンクされたセレクタのリストを示す3つのサブレポートのセットがあります。
(実際には、数十のマスターテーブルと十数のリンクテーブルがあり、一部のテーブルはコンテキストによってはマスターテーブルまたはリンクテーブルのいずれかになる可能性があるので、一般的なスケーラブルなソリューションが必要ですすべてのテーブルリンクの組み合わせがサポートされているわけではないので、どのレポートでもサポートされています。)
私の現在のデザインでは、各マスターテーブルとリンクテーブルごとに1つのサブレポートがあります。これらのサブレポートをマスターレポートのそれぞれに含まれており、サブレポートのデータソースは、このようsubrreportオープンイベントに書き換えられる(例えば、タイプXのリンクされたアイテムのサブレポートのためのものである)
Dim strMasterType As String
Dim strJunctionTable As String
Static intCallCount As Long
If intCallCount = 0 Then 'Only execute this once
strMasterType = FormItemType(CurrentMasterForm) 'returns A B or C
strJunctionTable = GetJunctionTable(strMasterType, "X") 'returns the relevant junction table name
Me.RecordSource = "SELECT " & strJunctionTable & ".*, qryX.*, " & strJunctionTable & "." & strMasterType & "id AS MasterID FROM " & strJunctionTable & " LEFT JOIN qryX ON " & strJunctionTable & ".Xid = qryX.Xid;"
End If
intCallCount = intCallCount + 1
リンクマスタフィールド助剤で。リンク子フィールドはMasterID(これらは、レポートの設計時に設定されますが、私はこれは私がいる限り、サブレポートのソースは、常にそれにMasterIDフィールドを持つように異なるマスター・レポートのサブレポートのソースを書き換えてみましょうべきだと考えている。)
- ですこの設計は合理的ですか、または問題へのより良いアプローチがありますか?
- リンク元のフィールド/リンクの子フィールドの設定やレコードソースSQLのいずれかに問題があります。リンクされたデータがマスターアイテム間で違いますが、コードに行きます - それを整理しようとする盲目。