- ベストアンサー
Access2000のレポートでフィールドリストにない値を表示できるか?
- Access2000で作成したレポートで、フィールドリストに存在しない値を表示することはできるのでしょうか?質問NO.217579のデータベースでは、選択クエリでT_グループ名の印刷フィールドをチェックボックスで設定し、T_個人名簿のグループIDが同じレコードも抽出しています。レポートの詳細セクションには目的のグループIDに該当するすべてのデータが表示されていますが、レポートのグループIDヘッダーにはT_個人名簿の代表者フィールドのチェックボックスがonになっている人も表示させたいです。
- Access2000のレポート作成での問題です。選択クエリで取得したデータを基にレポートを作成していますが、レポートのヘッダーにフィールドリストに存在しない値を表示することは可能でしょうか?具体的には、T_グループ名の印刷フィールドがonになっているデータを抽出し、T_個人名簿のグループIDが同じレコードも表示させています。しかし、代表者フィールドがonになっている人もレポートのグループIDヘッダーに表示させたいです。
- Access2000のレポート作成についての質問です。選択クエリでフィールドリストに存在しない値を抽出し、レポートに表示させたいです。具体的には、T_グループ名の印刷フィールドがonになっているデータを抽出し、T_個人名簿のグループIDが同じレコードも表示させていますが、代表者フィールドがonになっている人もレポートのグループIDヘッダーに表示させたいです。フィールドリストにない値を表示する方法があれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
御疲れ様です >複数グループ選択しても、それぞれのグループの代表者が表示されるように そうですね、前回のコードでは複数グループは考慮していませんでした。 複数グループの場合も考慮するとなると多少のカスタマイズが必要になってきます。 まず「グループヘッダー0」のエリアに「T_グループ名.グループID」テキストボックスを配置して下さい。 配置したテキストボックスの名前を「TxtGrpID」に変更します。(名前は任意です) ※配置したテキストボックスは、可視不可にしてもかまいません コード上の「印刷するグループの代表者のみを抜き出すSQL」を下記SQLに更新します。 stSQL = "SELECT T_個人名簿.氏名 " & _ "FROM T_グループ名 INNER JOIN T_個人名簿 ON T_グループ名.グループID = T_個人名簿.グループID " & _ "WHERE (((T_グループ名.印刷)=True) " & _ "AND ((T_グループ名.グループID)=" & Me.TxtGrpID.Value & ") " & _ "AND ((T_個人名簿.代表者)=True));" これで希望するものができると思います。 たぶん、テキストボックスをなぜ配置するのか疑問に思われると思いますが、それには理由があります。 レポートの場合、フォームと違ってレコードソースに設定したフィールドデータを取得できない為、 取得したいフィールドのデータは、レポートのどこかに配置してあげる必要があるからです。 参考になれば...
その他の回答 (3)
- how-do-you-do
- ベストアンサー率56% (59/104)
御疲れ様です 前回の補足を元に記述します > 残念ながら上手く表示されませんでした。 これはどのように出来なかったのですか? 処理が出来なかったのですか? 処理のどこかにブレークポイントを設定して、ちゃんと実行されているか確認することをオススメします もし、実行されていなければ、「グループIDヘッダー」というオブジェクト名は無いということになります もう一度、オブジェクト名を確認してみましょう 実行されているにもかかわらず、表示されないのであればSQL文に不具合があると考えられます 一度、クエリにて確認してみましょう >代表者は1グループにつき1名です これを元に簡潔にコードをまとめました。参考程度に... '~~~~~~~~~~~~~~~~~~~~ Private Sub グループIDヘッダー_Print(Cancel As Integer, PrintCount As Integer) Dim RS As DAO.Recordset Dim stSQL As String '印刷グループの代表者の氏名データを展開 stSQL = "SELECT T_個人名簿.氏名 " & _ "FROM T_グループ名 INNER JOIN T_個人名簿 ON T_グループ名.グループID = T_個人名簿.グループID " & _ "WHERE (((T_グループ名.印刷)=True) " & _ "AND ((T_個人名簿.代表者)=True));" Set RS = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot) 'データがあれば、代表者名更新 If RS.EOF = False Then Me.代表者名.Value = RS![氏名] 'レコードセット解放 Set RS = Nothing End Sub '~~~~~~~~~~~~~~~~~~~~ '参照設定にて「Microsoft DAO 3.6 Object Library」をチェックして下さい 印刷するグループの代表者のみを抜き出すSQLを実行し、 もし代表者のデータがあれば、 「代表者名」テキストボックスに「氏名」データを代入する処理です。
補足
お世話になります。 昨日実行した時には、代表者名欄に何も表示されなかったのですが、、、 >もう一度、オブジェクト名を確認してみましょう 「グループIDヘッダー」ではなく「グループヘッダー0」でした。失礼しました。 >参照設定にて「Microsoft DAO 3.6 Object Library」をチェックして下さい 先にも書いていただいていたのに、見落として忘れてました。 これを訂正して実行してみましたが、レポートのプレビューを繰り返すたびに代表者の氏名が重複して表示されていったり、複数のグループを選択した場合、グループごとの代表者を表示したいのに代表者にチェックが入っている人すべてが各グループの代表者欄に表示されます。 今回教えていただいたコードは、1つのグループを選択した場合は上手くいくのですが、複数のグループを印刷選択した場合、早い番号の代表者がすべてのグループの代表者名欄に表示され、それぞれの代表者が表示出来ませんでした。 先に教えていただいたコードではなく、今回のコードの方が私のやりたかったことに近いものが出来てとてもうれしいのですが、複数グループ選択しても、それぞれのグループの代表者が表示されるように、後もう少しだけご指導いただけますか? よろしくお願いします。
- how-do-you-do
- ベストアンサー率56% (59/104)
コードに抜けがありました >'代表者指名欄に追加 >Me.代表者の氏名.Value = Me.代表者の氏名.Value & RS![氏名] 上記文の次に下記コードを追加してください '次のレコードへ RS.MoveNext どうも失礼致しましたm(_ _)m
- how-do-you-do
- ベストアンサー率56% (59/104)
御疲れ様です レポートの種類が記述されていませんが... 「単票形式」、「帳票形式」なのでしょうか? また「帳票形式」である場合には、一枚のレポートに何件くらいのデータが表示されるのでしょうか? やりたいことはレポートのヘッダーに「代表者の氏名」を表示したいということですよね で、表示するデータのキーになるのは、 > T_個人名簿の代表者フィールドのチェックボックスがonになっている人 ということですが、複数人数いた場合はどうするのでしょうか? ちょっと曖昧な部分が多すぎますね 現状でできる解決策をコードを下記に記します '~~~~~~~~~~~~~~~~~~~~ 'レポートのグループIDヘッダー印刷時の処理です 'グループIDヘッダー部に非連結の「代表者の氏名」テキストボックスがあることを前提とする '参照設定にて「DAO」をチェックする '~~~~~~~~~~~~~~~~~~~~ Private Sub グループIDヘッダー_Print(Cancel As Integer, PrintCount As Integer) Dim RS As DAO.Recordset Dim stSQL As String '印刷グループの代表者のデータを展開 stSQL = "SELECT T_グループ名.*, T_個人名簿.* " & _ "FROM T_グループ名 INNER JOIN T_個人名簿 ON T_グループ名.グループID = T_個人名簿.グループID " & _ "WHERE (((T_グループ名.印刷)=True) " & _ "AND ((T_個人名簿.代表者)=True));" Set RS = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot) 'データはあるか? Do Until RS.EOF = True '複数人数いるときの対処 If IsNull(Me.代表者の氏名.Value) = False Then Me.代表者の氏名.Value = Me.代表者の氏名.Value & "/" End If '代表者指名欄に追加 Me.代表者の氏名.Value = Me.代表者の氏名.Value & RS![氏名] Loop 'レコードセット解放 Set RS = Nothing End Sub '~~~~~~~~~~~~~~~~~~~~ 参考になれば...
補足
お世話になります。わかりにくい質問にもかかわらず、アドバイスありがとうございます。コピーして貼り付けてみましたが、残念ながら上手く表示されませんでした。非連結のテキストボックス名は、「代表者名」なので、ご指導いただいたコードの中の「代表者の氏名」は一応「代表者名」に訂正したのですが…。 さて、レポートですが、帳票形式です。で、一枚のレポートに表示されるデータの件数は、T_グループ名の印刷フィールドのチェックをonにした数なので、その時によりまちまちです。代表者は1グループにつき1名です。基になるクエリを何て説明すればいいのかわからないので、下にSQLを貼り付けます。 SELECT T_グループ名.グループID, T_グループ名.グループ名, T_グループ名.活動内容, T_グループ名.保険, T_グループ名.印刷, T_個人名簿.個人ID, T_個人名簿.氏名, T_個人名簿.フリガナ, T_個人名簿.出欠, T_個人名簿.代表者, T_個人名簿.活動保険, T_住所一覧.郵便番号, T_個人名簿.住所ID, T_個人名簿.番地, T_個人名簿.電話番号 FROM T_住所一覧 RIGHT JOIN (T_グループ名 INNER JOIN T_個人名簿 ON T_グループ名.グループID = T_個人名簿.グループID) ON T_住所一覧.住所 = T_個人名簿.住所ID WHERE (((T_グループ名.印刷)=True) AND ((T_個人名簿.代表者)=True)) ORDER BY T_グループ名.グループID; 説明の方法すらわからない素人ですが、ご指導お願いします。
お礼
出来ました!すごいです!!カンペキです!!!ありがとうございました。 私の未熟さと説明不足で遠回りをして、いっぱいお手数をおかけしてしまいましたが、本当にお世話になりました。これに懲りずにまたご指導いただければと思います。本当にありがとうございました。