2016-05-05 4 views
0

「マスタ」テーブル(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フィールドを持つように異なるマスター・レポートのサブレポートのソースを書き換えてみましょうべきだと考えている。)

  1. ですこの設計は合理的ですか、または問題へのより良いアプローチがありますか?
  2. リンク元のフィールド/リンクの子フィールドの設定やレコードソースSQLのいずれかに問題があります。リンクされたデータがマスターアイテム間で違いますが、コードに行きます - それを整理しようとする盲目。

答えて

1

私は細かい詳細については分かりませんが、あなたは妥当なものと思います。 Link Master &のデザインビューでの設定を削除することをお勧めします。親レポートのサブレポートコントロールからサブレポート自体を削除することをお勧めします。このアプローチは同じで異なるサブフォームを表示する形式で楽しく働く

private sub report_open(cancel as integer) 
    me.recordsource = ... 
    me.childreport1.sourceobject = ... 'name of child report; 
     'this line will cause the open event of the sub report to fire; 
     'use that event to set the sub-report's record source by 
     'if me.recordsource = "" then 
     ' me.recordsource = ... 
    me.childreport1.linkmasterfield = ... 'or whatever the property is called 
    me.childreport1.linkchildfield = ... 
end sub 

:あなたはこれをしなかった場合は、レポートを開くとき(子-レポートがまだ存在しないため)、メインレポートのオープンイベントが発生しますサブフォームオブジェクトは、別のコントロールのユーザーの選択に応じて、私はあなたのアプリケーションのためにも動作すると期待しています。

関連する問題