【Access】集計クエリでパラメーターを使用した可変列のマトリックス表でハマりまくった・・・

Access

フォームから入力された条件でクエリ集計を行い、列可変のマトリックスのレポート作成でハマりまくった。
とりあえず別の方法で回避はしたが、解決方法をご存知の方がいたら教えて頂きたい!

前提条件(作業した事)

抽出条件の無いクエリ集計から、列可変のマトリックス表を出力するレポートがある。
レポートのレコードソースは、クエリ集計を指定。
列についてはレポートを開くイベントで、ヘッダーのキャプションと値をそれぞれ個別にセット。
以下、実際に正常動作しているコード。

Set QD = DB.QueryDefs(“Q_印刷のクロス集計”)
For cnt = 1 To QD.Fields.Count – 1
Set FLD = QD.Fields(cnt)
Me(“ラベル” & cnt).Caption = FLD.Name
Me(“明細” & cnt).ControlSource = FLD.Name
Next

以上を元に、フォームから指定された条件で抽出するという改変。
上記コード内の集計クエリである”Q_印刷のクロス集計”にWhere条件を追加し、抽出条件にフォームのテキストボックスを指定。
このまま実行すると以前と同様の問題が発生するので、クエリパラメーターを指定。

フィールド数が取得できない

修正も完了し実際に実行してみる。
列可変の為に集計クエリのフィールド数を求める【QD.Fields.Count】(コード内の2行目)が、ゼロになる現象が発生。
Fieldsの戻りが返ってこないと、キャプションも値もセットできない。
コードを何ひとつ変更せず、集計クエリに抽出条件とパラメーター指定しただけだが・・・

集計クエリの条件を変えてみる

集計クエリのWhere条件を、フォームからダイレクトに値をしてしてみる→NG
集計クエリのパラメーターを、削除してみる→OK
どうやらパラメーターを指定すると、Fieldsが使用できない・・・

代替案は・・・

クエリを一度リストボックスに入れ、リストボックスからデータを抽出してレポートに反映するようにコードを書き換える事にした。

まとめ

クエリ集計の条件を追加するだけなので簡単!と思っていたが、結果的にコードを修正する事になった。
パラメーターを指定するとFieldsコレクションは使用できない・・・というのは確定なのか?
今後の為、解決方法やもっと良い回避方法があれば教えて頂きたい。

久しぶりにハマった作業で、頭から煙出た(笑)

コメント