OKAccess2010はこちら。
クロス集計があります。これを「TestCrosstab」と呼びます。これには、参照として使用するクエリのフォームコントロールにアクセスするためのパラメーターがあります。次のようになります。
PARAMETERS [Forms]![TestForm]![TextDaysPast] Short;
TRANSFORM max(val) AS MaxValue
SELECT col AS Criteria
FROM (SELECT [Date], 'Crosstab Column Name 0' as Col, [Query Column Name 0] as val
FROM TestQuery
UNION ALL
SELECT [Date], 'Crosstab Column Name 1' as Col, [Query Column Name 1] as val
FROM TestQuery
UNION ALL
'... etc ...
)
GROUP BY col
PIVOT [Date];
上記のように、ソースクエリは「TestQuery」と呼ばれ、次のようになります。
SELECT SourceDatabase.Date,
Count(*) AS [Query Column Name 0],
Sum(IIf(Stuff=Stuff And Stuff=Stuff,1,0)) AS [Query Column Name 1],
'... etc ...
FROM SourceDatabase INNER JOIN SecondDatabase ON SourceDatabase.ID = SecondDatabase.ID
WHERE (((SourceDatabase.Date) Between Date() And Date()-Forms!TestForm!TextDaysPast))
GROUP BY SourceDatabase.Date;
ユーザーがフォームコントロール「TextDaysPast」に数値を入力し、「ポップアップ」で手動でクエリを実行すると、どちらもうまく機能します。
私がやろうとしているのは、純粋に表示目的で、サブフォームのソースオブジェクトとして上記のクロスタブを添付することです。VBAでは、ユーザーが「TextDaysPast」に数値を入力した後、この行が呼び出され、クロスタブがサブフォームに添付されます。
Me.SubformDisplay.SourceObject = "Query.TestCrosstab"
Me.SubformDisplay.Requery
「TextDaysPast」に数値を入力し、コマンドボタンを使用してクエリを実行すると、クロスタブが表示されないことを除いて、フォームは正しく機能しているように見えます(エラーはありません)。ソースクエリを静的な「WHERE」に変更すると、クロスタブは「PARAMETERS」の必要性を失い、通常はサブフォームのソースオブジェクトとして表示されます。「PARAMETERS」を使用しているため、クロス集計を表示できません。
これを回避する方法について何かアイデアはありますか?ソースクエリとクロス集計を1つの大きなモンスターに組み合わせると、これは修正されますか?
ご意見ありがとうございます!