- 締切済み
アクセスでクロス集計をレポートにする方法
一応過去質問を調べましたがうまくいかず、よろしくお願いします。 3種類のテーブルをもとに、それぞれについて3種類のクロス集計を行い、 その3つのクエリを一つのクエリにしました。この選択クエリを作る際は、 *をドラッグして全てのフィールドを表示させています。 そのクエリをレコードソースとして、 空のラベル、テキストボックスを必要数置いて以下のようにレポートを作成しましたが、うまくいきません。 どなたか、ご指導ください。 Private Sub Report_Open(Cancel As Integer) Dim db As DAO.Database Dim qd As DAO.QueryDef Dim cnt As Integer Dim fld As DAO.Field Set db = CurrentDb() Set qd = db.QueryDefs(Me.RecordSource) For cnt = 1 To qd.Fields.Count - 1 Set fld = qd.Fields(cnt) Me("Label" & cnt).Caption = fld.Name Me("Field" & cnt).ControlSource = fld.Name Next End Sub
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- hatena1989
- ベストアンサー率87% (378/433)
> また、なぜかはわかりませんが、データソースのクエリを変更したりすると「システムで予約されているエラー(-3007)です。このエラーに対するメッセージはありません」となったりもします。 Access 2000/2002 エラーメッセージ一覧 http://www.f3.dion.ne.jp/~element/msaccess/AcResErrMsgReference2000.html 上記によると、 「ライブラリ データベース <データベース名> を開くことができません。」 というエラーらしいですね。 クエリに含まれるテーブルはリンクテーブルですか。 新規のMDBファイルで、テーブル、クエリ、レポートを一らか作り直したらどうなりますか。
- hatena1989
- ベストアンサー率87% (378/433)
> 知識不足で申し訳ありませんが、「どのコードで」というのは、 > どういうことでしょうか? エラーがでたときに、エラーメッセージのダイアログの「デバッグ」ボタンをクリックするとエラーの発生したコードが選択表示されますので、その選択表示されているコードを教えてください。
補足
ありがとうございます。このメッセージの場合、「OK」と「ヘルプ」しかありません。 また、なぜかはわかりませんが、データソースのクエリを変更したりすると「システムで予約されているエラー(-3007)です。このエラーに対するメッセージはありません」となったりもします。このメッセージに対しても、なにかご存じであれば教えてください。
- hatena1989
- ベストアンサー率87% (378/433)
> 「" を有効なフィールド名、または式として認識できません」 > というエラーが起こります。 どのコードでそのエラーが発生しますか。
補足
知識不足で申し訳ありませんが、「どのコードで」というのは、 どういうことでしょうか? もとの質問に提示してあるものは、そのままの状態です。
- hatena1989
- ベストアンサー率87% (378/433)
> ”データがありません”メッセージは出ません。 > レポートヘッダーには、クエリと同じレコード数が表示されます。 これも問題なしですか。 うーん、難しい。 簡単にサンプルを作成してテストしてみましたが問題なく動作します。 ひょっとするとファイルが壊れているのかも。 新規のデータベースファイルを作成して、一から作り直してみたらどうなりますか。
お礼
hatena1989さん いろいろ親身にありがとうございます。 自分なりに、また試してみます。 また、何かありましたらよろしくお願いします。
補足
hatena1989さん いろいろ忙しく、この件について遠ざかっていました。 あらためて、クエリを作り直し、やってみたところうまく表示されました。 しかし、いろいろやっているうちに、レポートを表示させようとしたところ、 「" を有効なフィールド名、または式として認識できません」 というエラーが起こります。 申し訳ありませんが、またご教授願いますでしょうか?
- hatena1989
- ベストアンサー率87% (378/433)
> クエリを直接開いた場合は、データはただしく表示されます。 > メッセージボックスも表示されます。 うーん、ならば、 レポートの「からデータ時」のイベントプロシージャを下記のように設定して、 Private Sub Report_NoData(Cancel As Integer) MsgBox "データか有りません" End Sub レポートヘッダーにテキストボックスを配置して、コントロールソースを =Count(*) と設定して レポートを開くとメッセージは表示されますか。 また、レポートヘッダーには、クエリとレコード数と同じ値が表示されますか。
補足
何度もありがとうございます。 ”データがありません”メッセージは出ません。 レポートヘッダーには、クエリと同じレコード数が表示されます。 すみません、よろしくお願いします。
- hatena1989
- ベストアンサー率87% (378/433)
> 出力結果としては、表題とデータともに何も表示されません。 クエリを直接開いた場合は、データが表示されますか。 また、イベントプロシージャの先頭に下記のような Msgbox のコードを挿入して、レポートを開いたときに、メッセージは表示されますか。 Private Sub Report_Open(Cancel As Integer) MsgBox "レポートを開きます"
補足
クエリを直接開いた場合は、データはただしく表示されます。 メッセージボックスも表示されます。
- hatena1989
- ベストアンサー率87% (378/433)
どのようにうまくいかないのでしょうか。 希望の結果と異なる出力になるのでしょうか。 その場合は、ソースのデータはどのようなもので、希望の出力結果はどのようなもので、実際の出力結果はどのようなものだったのか説明ください。 あるいは、エラーがでるのでしょうか。 その場合は、エラーメッセージをご提示ください。
補足
ありがとうございます。 出力結果としては、表題とデータともに何も表示されません。 ソースデータは、3つのクロス集計クエリ(成績点数、成績評定、欠課時数をそれぞれ科目について集計したもの) をまとめて1つのクエリにしたものです。 このクエリを表示させると、もとのクロス集計のデータがすべて表示され、生徒ID、クラス、氏名、科目1の点数、科目2の点数、・・・、生徒ID、クラス、氏名、科目1の評定、科目2の評定、・・・、生徒ID、クラス、氏名、科目1の欠課、科目2の欠課、・・・となります。 現段階では、掲載のコードで、点数だけでも表示させてみようかとやってみたところです。 もしかして、もとのソースデータの形式がよくないのだとすれば、根本的にやり方が間違っているのでしょうか? 最終的には、クラスごとに、各生徒の点数、評定、欠課時数を各科目ごとに表示させたレポートを1枚にまとめたモノを 出力したいと思っています。 よろしくお願いします。
お礼
お返事遅くなりました。 テーブルから作り直したら、うまくいきました。 ありがとうございます。