1

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つの大きなモンスターに組み合わせると、これは修正されますか?

ご意見ありがとうございます!

4

2 に答える 2

1

私の知る限り、サブフォームのパラメーターでクロスタブを参照することはできません。ただし、VBA でクエリを作成すると、パラメータが不要になり、サブフォームが参照するクロス タブ クエリの sql を更新できます。

 sSQL="TRANSFORM Sum(Table1.ANumber) AS SumOfANumber " _
     & "SELECT Table1.AText FROM Table1 " _
     & "WHERE Table1.AText='" & Me.txtText & "' " _
     & "GROUP BY Table1.AText PIVOT Table1.AText2"

''Permanently change the sql for MyXtab
CurrentDB.Querydefs("MyXtab").SQL=sSQL
Me.MySubformControlName.Requery
于 2013-02-20T14:53:16.897 に答える