フォームから入力された条件でクエリ集計を行い、列可変のマトリックスのレポート作成でハマりまくった。
とりあえず別の方法で回避はしたが、解決方法をご存知の方がいたら教えて頂きたい!
前提条件(作業した事)
抽出条件の無いクエリ集計から、列可変のマトリックス表を出力するレポートがある。
レポートのレコードソースは、クエリ集計を指定。
列についてはレポートを開くイベントで、ヘッダーのキャプションと値をそれぞれ個別にセット。
以下、実際に正常動作しているコード。
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コレクションは使用できない・・・というのは確定なのか?
今後の為、解決方法やもっと良い回避方法があれば教えて頂きたい。
久しぶりにハマった作業で、頭から煙出た(笑)
コメント