【5】第八章 七日目
再び、X社の会議室。
山上君と松本さんは、PCに向かって、あくせく作業をしている。部屋には、カチャカチャ、カチカチと、キーボードやマウスの音だけが響いている。
そこに、いきなり狭山さんが「遅くなって申し訳ありません」と言いながら飛び込んできたので、二人はびっくりして飛び上がってしまった。
「うっわ、びっくりした。狭山さん、驚かさないでください」
「すみません。驚かせてしまいましたね。でも、お二人とも、何をされているのですか」
「前回の講義が終わった後で、山上君と復習してたのですが、『フォームの作成方法が分かったのならば、同じ“入出力”である、“レポート”も同様のやり方でできるのではないか』と気づいたんです。そこで、『自分たちで“顧客法人一覧表”とか“名刺一覧表”とかを作ってみよう』ということになって、前者を山上君が、後者を私が作っているんです」
「なるほど。で、いかがでしたか」
「僕の“顧客法人一覧表”は、ほぼ完成です。構成も、次の様に考えました」
「後は、クエリを作った後、“レポートウィザード”でレポート・デザインの基本まで作成して、最後に項目を配置して終わりです。フォームを作った時とほとんど変わらないですね。ただ、“グループ”という言葉が出てきたのですが、これだけが分かりませんでした」
「なるほど。では、松本さんはいかがでしたか」
「私の方は、未完成です。イメージはできているのですが、構成が決まらなくて」
「“名刺一覧表”のイメージは、どの様なものですか」
「こういったものです。これを、“名刺一覧画面”上のボタンから印刷できるようにしたいのです」
「“名刺一覧画面”で、今現在参照している顧客法人分の名刺だけを、一覧表示するものですね。ただ、この“顧客法人分の”というところは、前回お話ししたフィルタを使用すれば良いので、まずは、『名刺の一覧表を、顧客法人ごとに印刷し、顧客法人が変われば、ページ替えをする』レポートを考えてみましょう」
「さて、松本さんも悩まれた通り、フォームでの考え方をそのまま適用すると、このレポートは『顧客法人部分を表示するメインレポートと、名刺部分を表示するサブレポートで作成される』となります。もちろん、この方法で作成することはできるのですが、レポートには、さらに、フォームに無い機能“グループ化”というものがあります。この図の様に、“名刺一覧_SUB1”のクエリに、“顧客法人名”などの項目を含めたものを作成し、『顧客法人IDが等しいもののグループを作成し、このグループ・レベルの“ヘッダー・セクション”と“フッター・セクション”を作成する』ことによって、メインレポートと似たような表示を可能とするものです。前者には、グループ化した“顧客法人ID”と、それと同レベルの項目である“顧客法人名”を配置し、併せて、詳細セクションに表示される項目“名刺担当者名”、“名刺組織名”、“名刺役職名”の項目標題を配置しておきます。後者には、今回、配置はしませんが、例えば、“その(顧客法人)グループごとの名刺数”などを配置することができます。なお、“顧客法人IDヘッダー”のプロパティには、次の指定をしておきます。この指定によって、『名刺の数が多くて、複数ページに渡っても、各ページに同じ顧客法人IDヘッダーの情報を印刷する』や、『顧客法人IDの値が変われば、ページを変える』といったことになります」
顧客法人IDヘッダーのプロパティ
タブ | 項目 | 値 |
---|---|---|
書式 | セクション繰り返し | はい |
改ページ改ページ | カレントセクションの前 |
「あれ、レポートのデザインで、顧客法人IDのグループ化がされるってことは、クエリの並べ替えとの関係はどうなってしまうんだろう」
「山上さん、良いところに気づかれました。レポートでは、グループ化のために、クエリで指定した並びが無視されてしまいます。このため、レポート用のクエリには、“並べ替え”欄の指定は不要です。さらに、グループ化以外の、例えば、詳細セクションにある“名刺部分”の並び順を指定できないとまずいので、レポートのデザインには、“グループ化と並べ替え”という名前のメニューが用意されています。松本さん、こういった情報で、“名刺一覧表”を作成できますか」
「大丈夫だと思います。ただ、先程『メインレポートと似た』と言われたのが、気になったのですが」
「鋭いですね。実は、『メインレポートとサブレポートを使用したレポート』と『グループ化を使用したレポート』では、印刷した結果が同じにならない場合があります。どの様な場合に、両者の印刷結果が異なると思いますか」
「う~ん(と、しばらく考え込んでいたが、突然)あっ、分かった。『名刺が一件も登録されていない顧客法人があった』場合ですね。この場合、前者のレポートでは『その顧客法人のIDや名称は印刷されるが、名刺の情報は印刷されない』となって、後者のレポートでは『その顧客法人の情報すら印刷されない』となりますね。元となるクエリを考えたら、分かりました」
「その通りです。このため、『帳票そのものを、業務でどのように利用するのか』を良く考えて、どちらがより合っているかを検討することは忘れないで下さい」
「ハイ。ありがとうございました」
「さて、今回の講義、最初のテーマは『あくアク流での“ローカル・テーブル” 』です。今までお話ししてきた“テーブル”は、あくアク流では“データベース・テーブル”と言って、すべてAccessデータベース・ファイルに実装され、様々なプログラム・ファイルから共有されるものでした。ただ、Accessのテーブル管理機能は、その様な配置や利用に限定はしていません。そこで、あくアク流でも、その観点から、別の利用や配置も考えられています。まとめてみましょう」
あくアク流のテーブルの種類
テーブル | 利用 | 配置 |
---|---|---|
データベース・テーブル | プログラム・ファイル間で、データを共有する。 | データベース・ファイル |
ローカル・テーブル | 1つのプログラム・ファイル内の保管データ。 当該ファイル内の各クエリで共有する。 あくアク流では、テーブル名の頭に“Local”を付けること。 | プログラム・ファイル |
作業用テーブル | 1つのプログラム・ファイル内の一時データ。 当該ファイル内の一連の処理過程でデータが一時的に保管・共有される。 一連の処理が終了したところで、中のデータは全件削除される。 あくアク流では、テーブル名の頭に“Wk”を付けること。 |
「ローカル・テーブルと作業用テーブルは、共に各プログラム・ファイル内に実装されます。両者の違いは、ただ一つ、『プログラム・ファイルを閉じた時でも、テーブル内のデータを保存し続けなければならないか』という点です。保存しなければならなければ、ローカル・テーブル、そうでなければ、作業用テーブルとなります。まず、ローカル・テーブルの例を見てみましょう。松本さん、前回作成した“要員一覧2”画面を開いてください。(松本さんが開くのを見て、)この画面の“検索文字列”欄は“フォーム上の一時的なもの”となっているので、一度画面を閉じてしまえば保管がされません。ただ、業務の性格によっては、こうしたデータを保管しておきたい場合があります。そこで、このデータ保管場所として、ローカル・テーブルを作成するのです。“要員一覧2”画面で、ローカル・テーブルを使用した場合は、次の構成になります」
「そうか。“検索文字列”の値は、他の人と共有する必要がないから、プログラム・ファイル内に実装しても良いんだ」
「じゃ、早速変更してみますね。え~と。まずは、テーブルを作成して。あれ、狭山さん、テーブルの主キーはどうするんですか。このテーブルのレコードって、たった一行しかありませんよ」
「でも、あくアク流のお作法では『必ず、テーブルの主キーは作成すること』になっています。さぁ、どうすれば良いと思いますか」
「う~ん(と、今までのノートをめくりながら悩んでいたが、)あぁ、分かりました。DummyIDです。そうか、一行しかないテーブルの主キーはDummyIDにすれば良いんですね。(狭山さんが頷くのを見て)では、テーブルを作成しますね」
DummyIDが主キーのローカル・テーブル
フィールド名 | データ型 | 他の設定 |
---|---|---|
DummyID | 数値型 | フィールドサイズ:長整数型 |
規定値:1 | ||
値要求:はい | ||
検索文字列 | テキスト型 | 値要求:はい |
空文字の許可:いいえ |
「松下さん、お見事です。このテーブルには、ご自分で『主キーが“1”のレコード』を登録しておいてください。後は、クエリとフォームのデザイン変更だけです」
「分かりました。クエリ“要員一覧2_MAIN”を作成して、フォーム“要員一覧2_MAIN”のプロパティ“レコードソース”に、“要員一覧2_MAIN”を指定して。ハイ、できました」
「では、応用問題です。山上さん、あくアク流では、本格的な業務システム・ツール環境のため、“ログイン画面”や“メニュー画面”といった“共通の部品”を用意しています。この部品を利用して、ログイン画面を経由すると、そのプログラム・ファイルのローカル・テーブル“Local_共通情報”に、ログイン者名やログイン日時が保管されます。テーブル・レイアウトは次の様になります」
ローカル・テーブル“Local_共通情報”
フィールド名 | データ型 | 他の設定 |
---|---|---|
DummyID | 数値型 | フィールドサイズ:長整数型 |
ユーザーID | テキスト型 | |
ユーザー名 | テキスト型 | |
ログイン日時 | 日付/時刻型 | 書式:日付(標準) |
主キー:DummyID(“1”) |
「さて、このテーブルを利用して、フォーム“顧客法人一覧_MAIN”と、フォーム“名刺一覧_MAIN”に、ログイン時のユーザー名を表示させたいのですが、どうすれば良いかお分かりになりますか」
「“顧客法人一覧_MAIN”は、こういった構成にすれば良いと思います。問題は“名刺一覧_MAIN”ですね」
「構成は、たぶんこうなるとは思うのだけれど、クエリ・デザインが良く分からないんだよな」
「何言ってんのよ。ここまでいけば、分かるじゃないの。こうよ」
「ああ、そうか。だから、『Local_共通情報の主キーはDummyID』であり、『データベース・テーブルにはDummyIDがある』んだ。なるほど、これなら『あくアク流のお作法通り』だ」
「お分かりいただけましたか。では、次は作業用テーブルです。松本さん、一回目の講義の時に、ExcelとAccessとの違いをお話ししましたが、その際に、例を二つ出させていただきました。憶えていらっしゃるでしょうか」
「ええ、(ノートを見ながら)例1は“売上額の前月比”、例2は“売上額の構成比”でしたね」
「その例2のStep1で、『年月が同じもののグループを作り、その売上額の総額を取得する。(別のテーブルとして作成する)』とありました。この“別のテーブル”が、データベース・テーブルとして作成されない場合は、作業用テーブルとして作成されます」
「そうか。“年月”を主キーとした作業用テーブルを作成するんですね」
「そうです。ただ、この部分は、あくアク流でも上級者向けのものですので、今回の講義では対象としません。皆さんが、もっと習熟したころに、改めてお話しします」
「分かりました。あくアク流、奥が深いですね」
「さて、今回の二つ目のテーマは『要員管理システムの作成』です」
「え、それって、僕たちが使うんですか」
「いいえ。利用するのは、山本部長率いる、総務部の方たちです。将来的には、総務部の方たちにもあくアク流を習得して、ご自分たちで改良していただくことになりますが、今回は営業部側で作成し、提供します。とはいえ、今回作成するのは、“要員一覧”画面だけですが」
「あ、そうか。要員テーブルの中身は、僕たちが更新する必要は無いのでした。いつも、『他からもらってきた資料を見ながら、再度入力する』ってことばかりだったので、すっかり忘れていたよ。狭山さん、『要員テーブルのデータを、追加、変更、削除できる画面を作る』だけですよね。だったら、今日中に僕の方で作っておきます」
「山上さん、頼もしいですね。では、お願いします」
「さて、今回の三つ目のテーマは『Accessファイルへのオプション指定』です。あくアク流では、Accessファイルを新しく作成した場合は、“カレントデータベースへのオプション”画面を開き、“アプリケーションオプション”部分に、次の様に設定しておきます」
アプリケーションオプション
オプション | 値 |
---|---|
フォームの表示 | あくアク流共通部品“ログイン_MAIN”が基本。 |
ドキュメントウィンドウオプション | “ウィンドウを重ねて表示する”を選択。 |
閉じるときに最適化する | チェックを入れる |
「この内、ぜひ知っておいていただきたいのが、“フォームの表示”です。これは、『Accessファイルを開く時に、特定のフォームを、自動的に表示させる』指定ですが、皆さんが今まで使われてきた“有償版のAccess”であれば、特に指定する必要はありません。ナビゲーションウィンドウから、開きたいフォームをダブルクリックすれば良いのですから。ところが、“無償版のAccess”即ちAccessランタイムでは、このナビゲーションウィンドウが表示されません。このため、“フォームの表示”への指定が必要になるのです。あくアク流では、ここへ共通部品である“ログイン画面”を指定して、ログインが成功すると、共通部品である“メニュー画面”を表示する様にしています」
「あれ、狭山さん。『Accessランタイムには、ナビゲーションウィンドウが表示されない』って言われましたよね。とすると、僕らが今までテーブルの中のデータを確認する時にやっていた『ナビゲーションウィンドウのテーブルをダブルクリックする』ということができなくなるのじゃありませんか」
「山上さん、良いところに気づかれました。その通りです。このため、Accessランタイムを使ったシステム運用環境では、個々のテーブルの中身を参照できる画面も作成しておく必要があります。さて、次に移りましょう。今回の最後のテーマは『あくアク流の雛型を使った、プログラム・ファイルの作成手順』です。あくアク流の“お作法”では、プログラム・ファイルを新しく作成する場合は、基本的な共通部品が既にある“雛型ファイル”をコピーして、ここに、各業務画面を追加作成していきます」
「プログラム・ファイルができたら、これをオリジナルとして、運用環境の各クライアントにコピーをします。なお、データベース・ファイルは、運用環境のデータベース・ファイルに業務データが入っているため、単純にコピーをせず、極力『手作業での反映作業を行う』様にしてください」
「ということで、今回で、私の講義は終わりです。後は、皆さんで、業務システム・ツールを作り、改良をしていってください。ただ、私は、まだ、貴社にお伺いする機会が多いですので、何なりとご相談いただければと思います」
「狭山さん、ありがとうございました。本当に、こんな短い間に、僕がAccessを使えるようになるなんて、思いもよりませんでした。本当に、本当に、ありがとうございました(と、再びチワワの眼になりそうになる山上君)」
「狭山さん、ありがとうございました。私も、Excelだけの業務システム・ツール作りに限界を感じていたので、今回の講義は、とてもありがたかったです。今後とも、よろしくお願いします」
「お二人とも、良く頑張りました。私の方こそ、よろしくお願いします」
と、ドタバタと廊下を駆ける足音が聞こえたと思ったら、システム部の佐藤部長が、会議室に飛び込んできた。
「狭山さん、一大事だ。内山さんが、一駅前から歩いてウチに来ようとして、迷子になった。悪いけれど、迎えに行ってやってくれないか」
「え~! またですか! もう! 分かりました(と、二人を見やって)すみません。では、これで」
と、佐藤部長と会議室を飛び出していった狭山さんを見送り、山上君と松本さんは思わずガッツポーズをとっていた。
「がんばれ! 狭山さん」