🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

2回答

2525閲覧

accessのレポートを複製、ページ分割する方法

programer

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/12/08 01:20

編集2020/12/08 01:24

DBから取得したレコード数によってレポートを複数出力するか、データ数分だけページを分割したいと考えています。

作成しているレポートはヘッダ付きの一覧形式のものです。
レポートヘッダ部分にテキストボックスを配置してDBから取得したヘッダ情報を表示しています。明細の一覧部分にはヘッダにぶら下がる子データを表示しています。

DBから取得してくるヘッダ情報が複数存在する場合があるため、レポート出力時にヘッダ情報分レポートを複製するか、ひとつのレポート内でbページを分割して出力できないかと考えています。

調べてみましたが、上記二つの案とも解決につながる具体的な実現方法が見つからなかったため、わかる方がいましたら教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

DBから取得してくるヘッダ情報が複数存在する場合があるため、レポート出力時にヘッダ情報分レポートを複製するか、ひとつのレポート内でbページを分割して出力できないかと考えています。

レポートの「グループ化と並べ替え」機能でヘッダー情報のキーフィールドでグループ化してグループヘッダーを表示させます。
そこに、レポートヘッダーに配置したヘッダー情報を移動させます。
グループヘッダーセクションの「改ページ」プロパティを「カレントセクションの前」に設定すると、ヘッダー情報毎に改ページされて出力できます。

レポートでのグループ化 - もう一度学ぶMS-Access


saziさんの回答へのコメントより

子データ部分はワークテーブルにしてそれをレポートのレコードソースに設定して、

ヘッダ情報はレポートヘッダのフォーマット時にDBから取得してヘッダのテキストボックスに設定しています。

ヘッダー情報のテーブル、子データのテーブルの2つがあると推測します。
この2つのテーブルをリンクフィールドで結合したクエリを作成してそれをレポートのレコードソースとします。(レポートの「レコードソース」プロパティに直接SQLを記述しても可)

このレポートを元に上記のグループ化機能を使えばワークテーブル無しで、ご希望の結果が得られると思います。

投稿2020/12/08 02:11

編集2020/12/08 02:21
hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2020/12/08 02:35 編集

私がワークテーブルを勧めているのは、DBから情報取得するという事なので、レポートからDBへアクセスするとアクセス頻度はAccess任せになるので、低速になる可能性があるからです。
programer

2020/12/08 02:34

回答ありがとうございます。 ヘッダー情報のテーブル、子データのテーブルの2つがあります。 画面への入力値を出力条件としてSQL実行し、それから得られたデータを元にレポートを出力したいのですが、プロパティでSQLを指定する際に画面からの入力値を条件として設定することは可能なのでしょうか?
programer

2020/12/08 02:39

>DBから情報取得するという事なので、レポートからDBへアクセスすると低速になる可能性があるからです。 正確にはORACLEの親子二つのテーブルのリンクテーブルを結合したクエリにアクセスしているという状況です。
sazi

2020/12/08 03:09

> 親子二つのテーブルのリンクテーブルを結合したクエリ ODBCリンクテーブルを結合したクエリーだと、データ1行ごとの結合でトラフィックが発生しますので、 パススルークエリーをお薦めしておきます。
hatena19

2020/12/08 03:21 編集

まずは、レポートのグループ化の機能を理解して使えるようなることですね。 > プロパティでSQLを指定する際に画面からの入力値を条件として設定することは可能なのでしょうか? パラメータクエリにすればいいでしょう。 ■T'sWare Access Tips #586 ~フォーム参照のパラメータクエリをVBAで扱う方法~ https://tsware.jp/tips/tips_586.htm あるいは抽出条件なら、レポートを開く時に、Where条件引数に設定すればいいでしょう。 遅くなるようなら、 ワークテーブルを使う、パススルークエリを使うなどの対策が必要になってきますね。 その辺は私はあまりわからないので、saziさんにお任せします。
sazi

2020/12/08 03:23

単票を希望のようなので、グループ化はこの際関係ないのでは?
hatena19

2020/12/08 03:31

「作成しているレポートはヘッダ付きの一覧形式」というのが希望なので、単票で作成するよりグループ化の機能を利用したほうが楽だと思いますので、クループ化の機能を理解することをお勧めしています。 一覧形式を単票で実現するのはかなり面倒なのでは。
programer

2020/12/08 03:44

>saziさん、hatena19さん ありがとうございます。 accessの経験がなく、理解が足りていないことがありそうなので、まずは教えていただいたURLの内容を理解するところからしてみようと思います。 とはいえ納期もあるので、もしわからないことがまたあればここで質問させていただくかもしれません。
guest

0

ACCESSではレコードソースが可変(カラムの数や内容や属性が異なる)になるような作りは非効率ですので行いません。

取得する情報が可変なら、統一された内容のワークテーブルに編集を行い、そのワークテーブルをレコードソースにしたレポートを作成するようにするのが良いと思います。

投稿2020/12/08 01:27

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programer

2020/12/08 01:37

早急な回答ありがとうございます。 子データ部分はワークテーブルにしてそれをレポートのレコードソースに設定して、 ヘッダ情報はレポートヘッダのフォーマット時にDBから取得してヘッダのテキストボックスに設定しています。 出力したレポートが複数ある場合でも、プレビュー表示ですべて表示させたいのですが、 レコードソースに設定したワークテーブルを更新するとすべて表示できなくなってしまわないでしょうか?
programer

2020/12/08 01:48

念のため付け加えさせさせていただきますと、 属性やカラム数は可変ではありません。 DBから取得してくるデータ数が可変で、その分だけヘッダ情報を持ったレポートを出力したいと考えています。
sazi

2020/12/08 01:58 編集

> ヘッダ情報はレポートヘッダのフォーマット時にDBから取得してヘッダのテキストボックスに設定しています。 それはレコード毎に行うものですか? データ1件毎の単票レイアウトなら、改ページの単位を変更するだけです。 https://dekiru.net/article/15512/
sazi

2020/12/08 02:16

ヘッダー情報毎に複数のデータがあるなら、ヘッダー情報のワークテーブルを作成し、レコードソースに従来のものにワークテーブルを加えてやれば、レポートヘッダのフォーマット時に処理する事は無くなりますから高速化されると思います。 若しくは、ヘッダーのパターンを全てワークテーブルに取り込んでおいて、レコードソースでパターンを選択するようにすれば、DBにアクセスする回数を減らすことができます。
programer

2020/12/08 02:28

ヘッダ情報毎にぶら下がる子データが複数件あり、データシート形式の帳票です。 今考えるとレポートヘッダのフォーマット時にヘッダ情報を取得してヘッダに設定するのはヘッダ情報が複数件あった場合に、対応できなそうですね。 レコードソースにヘッダ用のワークテーブルと明細用のワークテーブルを設定するということでしょうか?
sazi

2020/12/08 04:08 編集

ヘッダーの情報とデータ情報がどのような内容なのか不明なので分かりませんが、親子関係にあるならワークテーブルも親子関係にして、リレーションしたものをレコードソースに指定すれば良いと思います。 その上で、ヘッダーをグループ化してそこで改ページすれば良いですね。
hatena19

2020/12/08 04:16

> その上で、ヘッダーをグループ化してそこで改ページすれば良いですね。 まずは、グループ化の機能の理解ですよね。
sazi

2020/12/08 04:25 編集

> ヘッダ付きの一覧形式 というのを何故だか単票と思い込んでました。 ※「ワークテーブルを使用しなくても」とか「臨機応変」という記述は書き換えられたのですね。
hatena19

2020/12/08 04:31

コメントのことですね。 「遅くなるようならワークテーブルを使えばいいでしょう。その辺は臨機応変に。」というのは削除しました。書いてからちょっと適切でないと感じましたので。
sazi

2020/12/08 04:42 編集

回答する人本人だと臨機応変に対応する部分についての記述には注意を払って欲しいと思っています。 注意書き無しに書かれると、そのまま鵜呑みでの実装をして、後で痛い目見る事が想像されるので。 特に称号を持たれている方のその分野の発言は信頼されると思いますから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問