Comments
Description
Transcript
ACCESS - 中央大学 総合政策学部
1 情報言語 II データベース ACCESS 河野 光雄 中央大学総合政策学部 2013 年 9 月 20 日 2 目次 第 1 章 データベース 5 データベースの概念 データベースの種類 構造型データベース 関係データベース データの正規化 関係データベースの用語 データベースの設計 第 2 章 ACCESS ACCESSデータベースの作成手順 データ 商品マスター 商品区分 見積もり明細 顧客マスター 社員マスター 見積データ データベース(空)の作成 テーブルの作成 クエリの作成 テーブルの関係性 関係性を定義する テーブル間の参照整合性 参照整合性の規則 連鎖更新 連鎖削除 内部結合と外部結合 クエリでのレコードの並び替え クエリからのレコードの抽出 クエリでの計算 フォーム(入力画面)の作成 単表形式のフォーム デザインビューによるフォームの作成 テキストボックスの配置 9 3 非連結コントロールの配置 コントロールの移動 コントロールのコピー・ペースト コントロールのサイズ・色・文字色・境界線・外枠の変更 複数のコントロールの配置等の調整 コンボボックスの作成 ルックアップ列からコンボボックスを作成する グラフの配置 フォーム上での計算 条件付き書式の設定 メインフォームとサブフォームの作成 レポート(帳票)の作成 レポートウィザード オートレポート データベース管理 データベースの最適化と修復 データベース管理者の設定 グループ権限の設定 ユーザーの追加と削除 ユーザーのパスワードの設定 データベースのパスワードの設定 フォームやレポートのデザイン変更を禁止 第 3 章 ACCESS VBA 24 モジュール 標準モジュール クラスモジュール VBAプロシージャ Functionプロシージャ Subプロシージャ Private Subプロシージャ 標準モジュールのプログラムの実行 引数を必要としないプログラム 引数を必要とするプログラム フォームからの実行 クエリからの実行 マクロからの実行 ACCESS 起動時の実行 オブジェクトの階層構造 Application Objects Data Access Objects Microsoft DAO3.6 Objects Libraryの組み込み 3 4 プロシージャの表現形式 Function Sub VBA文法 データ型 型の宣言 定数の宣言 配列宣言 繰り返し文 テーブルの操作 フィールドの操作 レコードの操作 第 4 章 マクロの作成 31 マクロを作る マクロをイベントに割り当てる 「顧客管理」フォーム EXCELファイルへのエクスポート 条件分岐のマクロ 第 5 章 VBA 34 VBAとフォーム フォーム上での計算 分岐条件を含むフォーム コンボボタンによる分岐 第 6 章 プロジェクト 履修登録システムの作成 テーブルの作成 クエリの作成 フォームの作成 『行データ』の『列データ』への変換 クエリの作成 クエリの実行 サブフォームのメインフォームへの割付 総単位数を表示するテキストボックスを作る 総単位数を履修条件と比較して必要なメッセージを出すマクロの作成 履修単位数の計算 フォームから入力された行データを別のテーブルの列データに変換する方法 37 5 第1章 デー ータベース ス 1.1 データベー ースの概念 念 例え えば企業で、人 人事システムとしてのデー ータファイルと と給与システム ムとしてのデ データファイル ルは、 社員に に関する情報を を格納するもの のであるが共 共通項目もあれ れば異なる項目もある。た たとえば人事フ ファイ ルは、 であり、給与計算フ ファイルは となっている場合を を考えよう。異 異なるファイ ルが独立に存 存在していると とき、変更は それぞれのフ ファイル いて矛盾が発生 生しないように に行われなけ ければならない いという問題が がある。上の 例では、扶養 養家族に におい 移動が が 発生した場合、2つのフ ファイルを同時 時に変更しな なければならな ない。またフ ァイルを生成 成するプ ログラムにおいては は、レコード長 長を定義する のが普通であ あるが、一度レ レコード長を 決めてしまう うと、途 項目の追加は不 不可能で、ファ ァイルの設計 計をはじめから らやり直さなけ ければならな ない。人事ファ ァイルと 中で項 給与計 計算ファイルを を一元化する必 必要性が途中 中で発生しても も、ままならな ないことがあ ある。したがっ って、プ ログラムごとにファ ァイルを用意す するデータの の管理方式は、データを格納 納するファイル ル形式の変更 更がプロ たらす、つまり り、データと プログラムが が独立でないこ ことが問題と なる。データ タベース グラムの変更をもた は、データの一 一元管理によ って、必要な な項目をプログ グラムによっ て自由にとり りだせる によるデータ管理は システムである。 こうし して (1) デ データとプログラムの独立 立性の確保, (2) デ データの矛盾の発生の防止 止, (3) デ データの標準化 化による管理 理・機密保持 が可能 能となる。ただ だし、標準化は はやりすぎる と、データの の統合に時間が がかかること に注意。 1.2 データベー ースの種類 類 デー ータベースには は構造型データ タベースと関 関係データベ-スがある。 階層デ データベース 次の のようなデータ タセットを 下のような階層 層構造に表現したもの。 以下 ネット トワークデータベース 次の のようなデータ タセットを 以下の のようなネット トワーク(網) )構造で表現 現したもの。リ リンクは閉じた たサイクルを を形成する。 6 1.3 関係データ タベース 関係 係データベース スは2次元の表 表形式の集合 合として表され れ、集合演算に によって必要 なデータを生 生成する もので である。階層構 構造や網構造を を前提とした 構造型データ タベースと異な なり、2次元 の表以外に構 構造上の 前提条 条件を必要とせ せず、基本的に には概念デー タに基づいて て自由に設計で できるものと なっている。以下で は関係 係データベース スを扱うことに にする。 次の のような見積書 書を発行するとして、これ れに対するデー ータベースを考 考えよう。 の見積書に現れ れるデータをテ テーブルの形 形にすると、も もう一例加えて て、 この ブルは見積書の の数に応じて てどんどん大き きくなっていくものである る。あきらかに にデー となる。このテーブ れる。したが がって顧客が名 名称を変えたりすると多くの箇所を変更 更しなければな ならな タ項目 の重複が現れ くなる。 1.4 データの正 正規化 デー ータの正規化は は、データの更 更新時に問題 題が生じないよ ようにデータの の重複を避け けることである る。上 のデー ー タファイル キー(他のレコ コードと区別す するための項 項目)が決まれ れば1通りに決 決まる項目を取 取り出すこと とによっ は主キ て、 次 次のようなデータファイル ルの組み合わせ せとして表現できる。 7 このテーブルの分離 離は次の手順で で行える。 伝 伝票番号と商品 品番号を決める る 商 商品番号と商品名を決める る 顧 顧客番号と顧客名を決める る 規化されたデー ータを結合する ることでユー ーザの要求に応 応えることがで できる。しか しデータの結 結合演算 正規 は時間 間がかかるので で、必要以上に に正規化する ことはデータ タベースの運用 用上障害とな なる。更新する ることが ないデ データ項目は正 正規化する必要 要がないので で、正規化には は十分注意して てデータベー ス設計を行う うべきで ある。 ータは正規化に によって単純な な構造を持つ つようになるが が、ユーザが必 必要とするデ ータは多くの の情報を デー 含むことが多く、あ あまり単純化す するとデータ の結合に時間 間がかかるとい いう問題が発 発生する。 1.5 関係データ タベースの の用語 8 1.6 データベースの設計 データベースの利用目的を明確にして、設計概念を十分吟味することが重要。一度作り上げると変更 はきわめて困難。 入力画面・帳票の設計 テーブルの設計 クエリの設計 9 第2章 ACCESS 2.1 データベースの作成手順 ACCESSでの作業の手順は次のとおりである。 データベース(空)の作成 テーブルの作成 クエリの作成 フォーム 入力画面)の作成 レポート(帳票)の作成 2.2 テーブルの作成 デザインビューによるテーブルの作成 2.2.1 商品マスター 2.2.2 商品区分 10 2.2.3 見積もり明細 2.2.4 顧客マスター 2.2.5 社員マスター 11 2.2.6 2.3 見積もりデ データ データベー ース(空)の作成 はじめ めに新しいデー ータベースを作 作成し、名前 前をつけて保存 存する。 2.4 テーブルの作成 (1)「オブジ ジェクト」で「テーブル」を選択して、「デザインビ ビューでテー ーブルを作成す する」を ダブルク クリック。 (2)新規テー ーブルがデザイ インビューで で表示される。フィールド名 名を入力し、キーをおすと とデータ 型に移動 動するので、データの型を を選択する。 (3)フィール ルドに対して主キーを設定 定する。 (4)名前をつ つけて保存して閉じる。 (5)ツールバーの「ビュ ューボタン」を をクリックすると、デザイ インビューから らデータシートビュ ーに切り替わるので で、データの入 入力を行う。 ー 主キー 一義 義に指定できる るフィールドに に「主キー」を 択するフィール ルドにカーソルを移 を賦与する。主キーを選択 動して て、<主キー> >をクリック。 。 フィー ールド名の変更 更 デザ ザインビューで でフィールドを を選択して、 <標題>欄で でフィールド名 名を変更。 12 フィー ールドの挿入 フィールドを挿入 入する位置の下 下の行にカー ーソルを移動し して<行の挿入 入>をクリッ ック。 フィー ールドの移動 行セレクタにポイ インタを合わせ せて(ドラッ グして複数の のフィールドを を)選択。選択 択したフィー ールドの インタを合わせ せて目的の行 行までドラッグ グ。 行セレクタにポイ ールドの削除 フィー フィールドにカー ーソルをあてて て<行の削除 除>をクリック ク。 ードの削除 レコー オートナンバー型 型のフィールドを持つレコー ードが削除され れると、そのフィールドのオ オートナンバー ーは ンビューに切り替えて、オー ートナンバー型 型 欠番となる。欠番をなくしたい場合は、いっ たんデザイン フィールドを切り取り、同じ場 場所に貼り付け けると、番号が が振りなおされ れて、欠番を解 解消する。 レコー ードの並べ替え え 基準 準となるフィー ールドを選択し、<昇順> >、<降順>を をクリック。 データの検索 選択して<検索 索>をクリッ ク。 フィールド名を選 データの置換 選択して<検索 索>をクリッ ックすると、< <検索と置換>ダイアログ グボックスの< <置換 フィールド名を選 をクリック。表 表示された<置 置換>パネル ルに検索する文 文字列と置換する文字列を を入力して、< <次を >を 索>をクリック ク。 検索 入力規 規則の設定 デザ ザインビューで でフィールドを を選択し、< 入力規則>に に条件式を入力 力して保存。 例えば > =1And <500 00を入力。( (<ビルド>を をクリックし て設定できる る。) エラー ーメッセージの の設定 デザ ザインビューで でフィールドに にカーソルを を移動して表示 示させたい文字 字列を<エラ ラーメッセージ ジ>に 入力 力。 条件に に合うレコード ドの抽出 デー ータシートビュ ューで表示し、 、フィールド ドからレコードを選択してカーソルを移 移動、<選択フィル タ>をクリックす すると、選択したレコード ドを同じレコー ードが抽出される。<フィ ィルタの解除>をク 除される。フィールドを右 右クリックして て<フィルタの対象>に抽 抽出条件を入力 力して リックすると解除 ーをおす。 キー 13 ルックアップリストの設定 データがテキスト型、数値型、Yes/No型のとき、ルックアップリストを設定できる。 1. テーブルをデザインビューで開き、データ型にカーソルを移動して選択ボタンをクリック、 「ルックアップウイザード」を選択。 2. 3. 4. 「テーブルルックアップ列に表示する」をクリック。 テーブルを選択し、テーブル名を選択。 フィールドを選択。 値要求の設定 <値要求>を設定するとデータの入力忘れに対して入力を要求するダイアログボックスが現れる。テ ーブルをデザインビューで開き、フィールドを選択してフィールドプロパティから<値要求>を選ん で右ボタンをクリックして「はい」を選択。データシートビューに切り替えて何も入力しないで多の フィールドへ移動しようとすると入力を要求されることを確かめよ。 ふりがな自動入力 <ふりがな>プロパティで自動入力を設定すると入力データのふりがなを自動的に表示する。デザイ ンビューで「氏名」フィールドを選択し、<ふりがな>を選択して「入力先」「文字種類」を選択し て「完了」。 2.5 クエリの作成 1.「オブジェクト」で「クエリ」を選択し、「デザインビューでクエリを作成する」をダブルク リックする。 2.「テーブルの表示」からテーブルを選択する。複数のテーブルを選択するにはCtrlキーを押し ながらテーブル名をクリックする。 3.テーブルの間に関係付けされていることを確認する。 4.それぞれのテーブルからクエリに含めるフィールドを選択してドラッグ&ドロップする。 5.ツールバーの実行ボタン「!」をクリックする。 6. 名前をつけて保存。 14 2.5.1 テーブルの関係性 複数のテーブルを組み合わせてクエリを作るため、テーブルの間の関係を定義しなければならない。 これは、2つのテーブルに共通するフィールドを関連付けることでなされる。この共通フィールドを 「結合フィールド」という。 1対多関係性 あるテーブルの1レコードが、他方のテーブルの複数のレコードに対応するもの。この関係が定義 されているテーブル間では、「1」側を「主テーブル」、「多」側を「関係テーブル」という。主キ ーを設定したフィールドを結合フィールドにすると、そのテーブルが主テーブルとなる。関係性が定 義されたテーブルは「結合線」によって結ばれるが、「1」側のフィールドには「1」が、「多」側 のフィールドには「∞」 が表示される。 担当社員ID 1 氏名 顧客ID tok 東京商事 担当社員ID 1 2 服部 3 浜田 kan 神奈川商事 2 sai 埼玉商事 2 4 5 清水 chi 千葉商事 4 松野 iba 茨城商事 5 6 7 小林 gun 群馬商事 6 堤 yam 山梨商事 6 渥美 1対多 会社名 1対1関係性 あるテーブルの1レコードが他のテーブルの1レコードだけに対応しているもの。主キー同士でフ ィールドを結合したものが、1対1関係性である。 担当社員ID 1 氏名 担当社員ID 1 部署 法 内線 101 2 服部 3 浜田 2 政治 102 3 経済 103 4 5 清水 4 文化 104 松野 5 広報 105 6 小林 6 政策 106 7 堤 7 法 101 渥美 1対1 多対多関係性 結合テーブルを媒介にして、そのテーブルと「1対多関係性」が定義された「1」側のテーブル同 士の関係をいう。直接関係付けられたテーブル間には「多対多関係性」は存在しない。 15 担当社員ID 氏名 担当社員ID 顧客ID 1 渥美 1 2 服部 2 3 浜田 2 tok 4 清水 4 kan 5 松野 5 chi iba 茨城商事 6 小林 6 chi gun 群馬商事 7 堤 6 yam yam 山梨商事 2.5.2 1対多 tok 顧客ID tok 東京商事 gun kan 神奈川商事 sai 埼玉商事 chi 千葉商事 多対1 会社名 関係性を定義する 1. 「リレーションシップ」(あるいは、「ツール」->「リレーション」)をクリックしてテ ーブルを表示する。 2. 複数のテーブルを選択し、「追加」をクリックして、「閉じる」をクリックする。 3. 「リレーションシップウィンドウ」に表示されたテーブルに関係性を設定する。 4. 関連付けるフィールドの片方(「1」側)を選択し、他のテーブルのフィールド(「多」側) にドラッグする。 5. 「参照整合性」をオンにして、「作成」をクリックする。 2.5.3 テーブル間の参照整合性 テーブル間を関係付けたら、テーブル間の整合性を保ち、テーブル間の関係を壊すようなデータの更 新を禁止する。連鎖更新や連鎖削除を設定すると、関係性を保ったままデータの更新ができる。参照整 合性は、フィールド名が同じである必要はないが、データ型が一致していないと設定されない。参照整 合性が設定されているときには結合線に関係性が表示されるが、整合性がオフのときは結合線だけが表 示される。 2.5.4 参照整合性の規則 1.主テーブルの主キーに存在しない値を関係テーブルの外部キーフィールド(主テーブルの主キ ーに関連付けられている関係テーブルのフィールド)に入力することはできない。 2.主テーブルの主キーフィールドの値を変更する場合、関係テーブルの外部キーフィールドに同 じ値をもつレコードが存在すると変更できない。 3. 主テーブルからレコードを削除する場合、関係テーブルに一致したレコードが存在すると削除 できない。 「顧客マスタ」と「見積データ」は「1対多関係」で結ばれ、主テーブルは「顧客マスタ」、関係 テーブルは「見積データ」となっている。ここで「見積データ」に「顧客マスタ」の主キーにないレ コードを追加すると「エラー」が表示される。また主テーブルの「顧客マスタ」のレコードを削除し ようとすると「エラー」となる。 2.5.5 連鎖更新 参照整合性によって禁止されている更新を可能にする機能のことで、主テーブルの主キーフィールド の値を変更すると関係テーブルの対応するフィールドの値も変更される。ただし、主テーブルの主キー がオートナンバー型の場合は、主キーのフィールドの値を変更することができないので、連鎖更新は意 味を持たない。 1. 「リレーションシップ」ダイアログボックスを表示して、主テーブルと関係テーブルを記入 し、「参照整合性」と「フィールドの連鎖更新」をともにオンにして、「 」をクリックす る。 2. 主テーブルの主キーフィールドの値を変更する。 16 3. 2.5.6 関係テーブルの対応するテーブルが変更されていることを確認する。 連鎖削除 参照整合性により禁止されている削除を可能にする機能。 「リレーション」ダイアログボックスで「フ ィールドの連鎖変更」をオフにし、「フィールドの連鎖削除」をオンにする。連鎖削除を設定しても関 係テーブルの他のフィールドが主キーとなっている場合は、削除できない。この場合は主キーになって いるフィールドの関係性にも連鎖削除を設定する。 2.5.7 内部結合と外部結合 関係性を定義すると共通するフィールドが結合される。この結合には内部結合と左外部結合、右外部 結合がある。クエリの実行時に抽出されるデータの範囲を決める。 内部結合 2つのテーブルの結合フィールドのデータが一致したレコードのみを抽出する処理方法。集合の積に 当たる(A & B )。結合線に矢印なし。 左外部結合 左のテーブルからはすべてのレコードが抽出され、右のテーブルからは結合フィールドのみ抽出され る処理方法。内部結合の結果に加えて、左のテーブルには含まれているが、右のテーブルに含まれてい ないレコードを抽出する場合に利用。結合線に矢印あり。 右外部結合 左外部結合と左右対称。 2.5.8 クエリでのレコードの並び替え データシートビュー フィールド名をクリックしてフィールド全体を選択し(フィールド名の上にマウスポインタを移動 し、形が「南向き矢印」に変わったらクリックする)、「並べ替え」をクリックする。並べ替えの基 準は、昇順では「0-9」、「 - 」、「アーン」の順で、漢字ではシフト コード順。降順ではこ の逆。 デザインビュー デザインビューではフィールドごとに並べ替えの条件を設定することができる。 フィールドの位置の並べ替え デザインビューでフィールドを選択し、マウスポインタの形が「北北西向き白矢印」に変わったと ころで目的の位置までドラッグ。 2.5.9 クエリからのレコードの抽出 デザインビューの抽出条件欄に条件を入力する。同じフィールドに複数の条件を入力すると” OR 条 件” となり、異なるフィールドに条件を課すと” AND条件”となる。 演算子やワイルドカードを利用した抽出条件 17 2.5.110 クエリでの計算 クエ エリではフィー ールドデータを を使って計算 算し、結果を新 新しいフィール ルドとして付 け加えること とができ る。 ザインビューで でひらく。 1. クエリをデザ されていないフ フィールドを クリック。 2. 何も入力さ *単価Dを入力 力して「Enterr」キーをおす すと、「式1: [数量] * [単 単価] 」となる る。「式 3. 式(数量* 1」はこの のフィールドの の名称である。 。 を「定価」に変 変更する。 4. 「式1」を ドをアクティヴにして「プ ロパティー」をクリックし して、書式で「 「通貨」を選択 択する。 5. フィールド 日付の の計算 日付 付に関する計算 算にはいくつか かの関数が用 用意されている る。 関数名 Date 関数 書式 引数の の指定 なし し Date ( ) DateAdd 関数 数 DateAdd d (時間単位, 数 数値, 日付) DateDiff 関数 数 DateDiiff (時間単位, 日 日付1, 日付2 [, 最初の の曜日][, 最初 初の週 ] [時間単位 位]に指定で きる文 文字列 q y yy yyy m d w ww w h n s 単位 四半期 期 年間通算 算日 現在の西 西暦 月 日 週日 週 時 分 秒 「見 見積有効期限」が「見積日」から1ヵ月後 後である場合は は、「見積デー ータ」テーブル ルから「見積日 日」を選 択し、クエリにフィールドを作成し、フィール ルド名欄に「見 見積有効期限: DateAdd(“m”, D 11, [見積日])」と ればよい。 入力すれ 18 グルー ープ化して集計 計 同じ じフィールドで で重複している る項目ごとに にグループ化し して計算する。 。デザインビ ューを表示し して<集 計>を をクリック。集 集計するフィー ールドの<集計 計>行にカー ーソルを移動し した時に表示 されるボタン ンをクリ すると、集計方 方法の一覧が表 表示されるの ので、必要なも ものを選択する る。 ックす グル ループ化の優先 先順位はデザイ インビューの の左端のフィー ールドで重複しているもの のが最優先され れ、順に 右方 向 向へ認識される。特定のフ フィールドだけ けにグループ プ化を設定する るためには、集 集計のための のクエリ を新た たに作成する。 2.5.11 1 パラメータクエリ リ クエリ リ実行時に抽 抽出条件を指 指定する 1.パ パラメータク クエリを設定 定する 同じ見 見積もり日の のレコードを を集めたいと ときは、クエ エリをデザインビューで で開き、フィールド を選択 択して抽出条 条件欄に[見積 積日を入力]を を入力する 19 2.名前をつけて保存 3.新しいクエリを選択 4.抽出条件を入力するダイアログボックスの表示 5.クエリの表示 同じ日に発行した見積書だけが選択されて表示される。 20 2.6 フォーム (入力画面)の作成 見積書フォーム フォームの基となるクエリ 21 2.6.1 単表形式のフォーム 1. 「オブジェクト」から「フォーム」を選択し、「新規作成」をクリックする。 2. 「新しいフォームダイアログボックス」から「オートファーム単表形式」を選択し、フォーム のもとになるテーブルまたはクエリを選択して、「OK」をクリックする。 3. フォームを使って既存のテーブルにデータを3つずつ追加する。 2.6.2 デザインビューによるフォームの作成 1.メニューの「作成」をクリックして、「フォームデザイン」をクリックする。 2.フォームの「プロパティシート」を表示する。 3.「プロパティシート」の「レコードソース」欄で、フォームのもととなるデータを提供するテー ブルあるいはクエリ、ここでは「見積クエリ」を選択する。 4.「既存のフィールドを追加」をクリックして、「見積クエリ」のフィールドリストを表示させる。 5. フィールドリストからフィールドをフォームにドラッグ&ドロップすると、テーブルあるいは クエリと連結したテキストボックスとラベルが配置される。 6. 複数のフィールドを一度に選択して、ドラッグ&ドロップすると、複数のテキストボックスが 一度に作成される。 2.6.3 テキストボックスの配置 1. ツールボックスのコントロールウィザードがONの状態で、テーブルやクエリをもとにした フォームをデザインビューで開く。 2. フィールドリストからフィールドをドラッグ・ドロップすると、テキストボックスが起動す る。 3. テーブルまたはクエリと連結した(連結コントロールと呼ぶ)テキストボックスとラベルが 配置される。 4.テキストボックスとラベルが対になって配置されるコントロールを複合コントロールと呼ぶ。 5. 複数のテキストボックスを一度に作成するには、フィールドリストでフィールド名を複数選 択し(Ctrlを押しながらフィールド名をクリックする)フィールドリストからフォームへド ラッグ・ドロップする。 テキストボックスウィザードを利用する場合 22 1. 2. 3. 4. 5. 2.6.4 コントロールウィザードがONの状態で、テキストボックスをクリック。 フィールドリストからフィールドをドラッグ・ドロップする。 テキストボックスの書式を設定して「次へ」。 入力モードを設定して「次へ」。 ラベルに表示する名前を入力して「完了」。 非連結コントロールの配置 「非連結コントロール」はテーブルやクエリのフィールドと連結していないコントロールで、フォー ム上 で計算などを行うときに利用する。 1. コントロールウィザードをONにして、テキストボックスをクリック。 2. 配置したい位置でクリックする。 2.6.5 コントロールの移動 1. コントロールを選択し、コントロールの左上のハンドルにマウスポインタを合わせて、ドラ ッグする 2. 複数のコントロールを選択して、コントロールを囲むふちでマウスポインタが※に変わった ところでドラッグすると、選択したコントロールが一緒に移動する。 2.6.6 コントロールのコピー・ペースト テキストボックスを選択して、「Ctrl +V」 2.6.7 コントロールのサイズ・色・文字色・境界線・外枠の変更 コントロールを選択し、プロパティをクリックすると、プロパティシートが表示されるので必要な変 更を行う。 2.6.8 複数のコントロールの配置等の調整 1. 複数のコントロールをそろえて配置する場合は、複数のコントロールを選択して「右クリッ ク」で「配置」をポイントして「左」、「右」、「上」、「下」を選択する。 2. 間隔をそろえて配置する場合は、複数のコントロールを選択し、「書式」をクリックして、 「左右の間隔」または「上下の間隔」をポイントし、「間隔を均等にする」、「間隔を広くす る」、「間隔を狭くする」を選択。 3. 複数のコントロールのサイズをそろえる場合は、複数のコントロールを選択し、「右クリッ ク」し、「サイズの変更」をポイントして必要な項目を選ぶ。 2.6.9 コンボボックスの作成 1. コントロールウィザードを「ON」にして、「コンボボックス」をクリック。 2. コンボボックスを配置したい位置でクリック。 3. 「コンボボックスウィザード」が起動するので、「テーブルまたはクエリの値をコンボボック スに表示する」をクリックして「次へ」。 4. テーブルをクリックし、一覧に表示させたいフィールドを含むテーブルを選択する。 5. 表示させたいフィールドを選択して「次へ」。 6. 「次のフィールドに保存する」をクリックして、「データを保存するフィールドを選択し、「次 へ」。 23 7. ラベルとして表示する文字列を入力し、「完了」。 8. 3で、「表示する値をここで指定する」を選択すると、自身でデータを入力できる。カーソル の移動はキーを使う。リスト列数を変えることも出来る。 9. フォームビューに切り替えて結果をチェック。 2.6.10 ルックアップ列からコンボボックスを作成する フォームをデザインビューで開き、「フィールドリスト」をクリックしてフィールドリストを開き、 ルックアップ列として定義したフィールドをドロップする。 2.6.11 サブフォームの作成 (1)「コントロールウィザード」をアクティブにした状態で「サブフォーム/サブレポート」をクリッ クして、サブフォームを配置したい位置でクリックすると、サブフォームウィザードが起動する。 (2)「既存のテーブルまたはクエリを使用する」を選択し、「次へ」をクリック。 (3)クエリ「見積クエリ2」を選択し、すべてのフィールドを選択して「次へ」。 (4)「一覧から選択する」を選択し、メインフォームと結合するフィールドの指定方法を選択する。 (5)名前をつけて保存し、「完了」をクリックする。 (6)サブフォームを選択して、 「表示(V)」をクリックして、 「新しいウインドウでサブフォームを開 く」を選択。 (7)サブフォームの「フォームフッター」の領域に「定価合計」を計算するコントロールを配置する。 「フォームフッター」を表示させるには、メニューから配置をクリックして、 「フォームヘッダー /フッター」を クリックする。 (8)フォームフッターの領域に非連結のテキストボックスを配置。 (9)ラベルに「定価合計」を入れ、テキストボックスのプロパティを開き、コントロールソースに 「=Sum([定価])」を記入し、書式から「通貨」を選択。テキストボックスの名前を「定価合計」と しておくこと。これによってメインフォームのテキストボックス「定価合計」とデータの受け渡し が行われる。 (10)「見積書サブフォーム」の名前で保存。 2.6.12 サブフォームの計算結果をメインフォームで参照 (1)メインフォームに非連結のテキストボックスを配置 (2)ラベルに「定価合計」を記入し、テキストボックスのプロパティを開き、コントロールソースに 「=[見積書サブフォーム].[FORM]![定価合計]」を入力。ここで使われるサブフォームの名前は 2.6.11 の(10)で選択した名前と同じでないと、データのやり取りが行われないので注意。 (3)フォームビューで結果を確認。 2.6.13 フォームへのグラフの配置 (1)「売り上げ実績」クエリの作成 24 (2)フォームをデザインビューで新規作成し、必要なデータを入力。 (3) 「挿入(I)」から「グラフ」を選択し、マウスポインタをフォームのグラフを描きたい領域を対 角線にドラッグする。 (4)グラフウィザードの「表示」からクエリを選択し、グラフの基になるクエリを指定。 (5)グラフで使うデータを含むフィールドを選択。 (6)グラフの種類を選択し、フィールドの配置と軸の設定を行う。関連付けるフィールドとして 「顧客 ID」を選択する。 (7)グラフタイトルを記入して「完了」。 2.6.14 条件付き書式の設定 デザインビューで表示して、コントロールを選択して右クリックすると、メニューが現れるので、 「条件付き書式」を選択する。<条件>グループで、左から順に 1. 対象を選択 2. 書式が適用される条件を選択 3. 基準となる数値や文字列を入力 4. フォントをクリックして文字色を選択 条件付き書式の設定を解除するには、コントロールを選択して<条件付き書式設定>ダイアログボッ クスの<削除>を選択する。 2.7 レポート(帳票)の作成 2.7.1 レポートウィザード 1. 「オブジェクト」から「レポート」を選択し、「ウィザードを利用してレポートを作成する」 をダブルクリック。 2. レポートのもとになるテーブルやクエリを選択し、フィールドを選択する。 3.グループレベルの設定。「グループレベル」とは、グループを作る基準となるフィールドの こと。グループレベルを設定すると、指定したフィールドを基準にしてグループごとにまと 25 められたレポート を作成できる。フィールドのグループレベルは4つまで指定できて、優勢 順位は降順。 4. レコードを並べ替えて印刷する場合は、並べ替えの基準となるフィールドを選択する。 5. フィールドに対して演算を行う場合は、「集計のオプション」をクリック。 6. レポートのレイアウトの設定。「すべてのフィールドを1ページ内に収める」をオンにし、 必要な事項を選択して「次へ」。 7. スタイル・フォントを指定して「次へ」。 8. 名前をつけて「レポートをプレビューする」をクリックして「完了」。 2.7.2 オートレポート テーブルやクエリをもとに単票形式・表形式のレポートを自動的に作るが、集計作業はできない。 1. 「オブジェクト」から「レポート」を選択し、「新規作成」をクリック。 2. 「オートレポート:単票形式」あるいは「オートレポート:表形式」を選択し、もとになる テーブルやクエリを選択して「OK」。 3. 名前をつけて保存。 26 2.8 データベース管理 2.8.1 データベースの最適化と修復 レコードやテーブルをデータベースから削除していくうちに、データを検索する速度が遅くなるこ とが ある。これは、削除が見かけ上のもので、実際にはデータベースの中で削除されずに残っている からである。このため不要なレコードやデータベースオブジェクトを完全に削除して効率的に運用で きるように「最 適化」を行う必要がある。最適化は他のユーザーがデータベースにアクセスしていな いことを確かめた上 で実行しなければならない。 1.ACCESSファイルを開く。このときファイルサイズを確認しておく。 2. 「ツール」をクリックして「データベースユーティリティ」をポイントして「最適化/修復」 を選択。 データベースを閉じるときに最適化を行うには、 1. 「ツール」をクリックして「オプション」を選択。 2. 「オプションダイアログボックス」の「全般」を選択し、「閉じる際に最適化する」をオ ンにし、「OK」をクリック。 2.8.2 データベース管理者の設定 複数のユーザーがデータベースを利用する場合、重要なデータを変更されてしまったり、データベ ースのオブジェクトを削除されてしまうなどの問題が発生する可能性がある。このため、データベー スの管理者を設定し、データベースの利用を制限する。 管理者のパスワード設定 1. 「ツール」をクリックして「セキュリティ」をポイントし、「ユーザー/グループのアカウン ト」を選択。「ユーザー/グループのアカウント」ダイアログボックスで「ログオンパスワ ードの変更」を選択。 2.「新しいパスワード」、「確認」のあと、「OK」をクリックしてACCESSを終了させる。 ファイルを開くと、パスワードを要求される。パスワードは20文字までの半角の英数字で、大文 字・小文字を区別する。 管理者のログオン 1. アクセスを起動 2. 「ファイルを開く」<ファイル>をクリック 3. ファイルの保存場所を指定し、データベースを選択して<開く>をクリック。 4. <ログオン>ダイアログボックスに「管理者」とパスワードを入力して「OK」をクリッ ク。 2.8.3 グループ権限の設定 複数のユーザーに同じ権限を設定する場合は、グループに権限を設定してから、そのグループにユ ーザーを追加する。 1.「ツール」をクリック。 2.「セキュリティ」をクリック。 3.「ユーザー/グループの権限」ダイアログボックスを表示し、「リスト」の「グループ」を オンして、「ユーザーグループ」を選択し、「オブジェクトの種類」で、権限を設定する データベースを選択。「権限」を設定して「OK」。 27 2.8.44 ユーザー ーの追加と削 削除 1 1. 「ツール ル」をクリック クして「セキュ ュリティ」をポイントし、「ユーザー//グループのア アカウン ト」を選 選択。 2 2. 「ユーザ ザー/グループの のアカウント ト」ダイアログ グボックスで「ユーザー」 を選択し-「新 新規作 成」をク クリック。 3 3. ユーザー ー名とパーソナル IDを入力 力し「OK」。 。 4 4. 「ユーザ ザー/グループ プのアカウン ト」ダイアログボックスに にユーザーの名 名前が表示されるの で「OK K」。ユーザー ーを新規に追加 加すると自動 動的に<ユーザ ザーグループ >に所属。 5 5.削除は「ユ ユーザー/グル ループのアカウ ウント」でユーザー名を選 選択して「削除 除」をクリック。 2.8.55 ユーザー ーのパスワー ードの設定 定 理者によって追 追加された直後 後のユーザー ーにはパスワー ードは設定され れていないの ので、自分で設 設定す 管理 る必 要 要がある。 スを起動。 1. アクセス 2. ファイル ルをクリック。 3. ファイル ルの保存場所 所を指定して、 データベース スを選択し<開く>をクリ リック。 4.<ログオ オン>ダイアロ ログボックス にユーザー名 名を入力して< <OK>をク リック。 5. 「ツール ル」をクリックして「セキ キュリティ」を をポイントして「ユーザー ー/グループのアカウ ント」を を選択。 6.<ログオ オンパスワード ドの変更>を選 選択してパス スワードを入力 力し<OK> をクリック。 7 7.パスワー ードを忘れた場 場合は管理者 者にパスワード ドを削除してもらい、改め めて設定する。 8 8.管理者は は「管理者」で でログオンした た後、「ツール」、「セキ キュリティ」、 、「ユーザー/グルー プのアカウント」の手 手順で、 「ユーザ ザー/グループ プのアカウント」ダイアロ グボックスを を開き、 ーを選択して「パスワードの の削除」をクリック。 ユーザー 2.8.66 データベ ベースのパス スワードの の設定 高度 度なセキュリテ ティを必要としない場合は はデータベースにパスワー ードを設定して て第3者のア アクセス から 保 保護する。データベースの のパスワードを を設定する場 場合は、あるユ ユーザーが使用 用している間 間は他の ユーザ ザー が利用できない「排他 他モード」でデ データベースを開く必要が がある。 ックして、フォ ォルダからデ データベースを を選択し、「開 開く」ボタン ンをクリ 1.「ファイル」をクリッ ドで開く」を選 選択。 ックして「排他モード ル」をクリック クして、「セキ キュリティ」をポイントし して、「データ タベースパスワード 2.「ツール の設定」を選択。 3 ードを入力して て「確認」して てから「OK」。 3.パスワー パスワードを設定 定したデータベ ベースを開こ うとすると、パスワードを を要求される る。 28 2.8.7 フォームやレポートのデザイン変更を禁止 データの入力、変更、削除、テーブルやクエリの変更・作成はできるが、フォームやレポートの変 更ができない様にするにはMDEファイルを作成する。 1.「ツール」、「データベースユーティリティ」、「MDEファイルの作成」を選択。 2.フォルダの保存場所を指定してファイル名を入力、ファイルの種類が「MDEファイル」に なっていることを確認して<保存>。 3.「ファイル名(実行専用)」をダブルクリックして開く。 29 第3章 3.1 ACCESS VBA モジュール VBAのプログラムは標準モジュールとフォームやレポートに付随するクラスモジュールがあり、それ ぞれの編集画面で実行する。モジュールはいずれも「Function」、「Sub」の宣言文で始まるプロシー ジャの集まりとして構成される。 3.1.1 標準モジュール 標準モジュールを実行するにはデータベースウインドウで「モジュール」タブを開き、「新規作成」 ボタンを押してVisual Basic標準モジュール編集画面を開く。標準モジュールは独立しているので独自 に保存しなければならない。 3.1.2 クラスモジュール フォームやレポートをデザインビューで開き、クラスモジュール編集画面を開く。 1. フォーム(レポート)を新規作成。 2. 「プロパティ」を開いて「イベント」タブをひらく。 3. 「レコード移動時」を選択してドロップダウンボタンをクリックしてリストから「イベント プロシージャ」を設定。 4. ビルドボタンをクリック。 クラスモジュールはフォームやレポートに付随しているので、フォームやレポートの保存と同時に自 動的に保存される。クラスモジュールに定義したプロシージャを編集するには、作成のサイト同様にフ ォームやレポートをデザインビューで開くことから始める。 3.2 3.2.1 VBAプロシージャ Functionプロシージャ 標準モジュールでもクラスモジュールでも定義され、別の標準モジュールやクラスモジュールに定義 したプロシージャから呼び出すことができる。Functionプロシージャは値を返すことができるので、フ ォームやレポート、クエリから呼び出して実行することができる。 3.2.2 Subプロシージャ 標準モジュールにもクラスモジュールにも定義されるが、別のモジュールに定義したプロシージャや クラスモジュールに定義したプロシージャからは呼び出すことができない。また値を返すことができな い。 3.2.3 Private sub プロシージャ イベントプロシージャとも呼ばれ、クラスモジュールの中でしか定義できない。イベントプロシージ ャはフォームやレポートのコマンドボタンコントロールやテキストボックスコントロールのイベント プロパティから定義されるので、自動的に名前がつけられてプログラムも生成される。 30 3.3 3.3.11 標準モジュ ュールのプ プログラムの の実行 引数を必 必要としない いプログラ ラム Vissual Basic 編集画面のツ 編 ツールバーの の「実行」メニ ニューの「su ub /ユーザー ーフォームの の実行」 コマン ンド、あるいは はツールバー ーの実行ボタ ンを使う。 3.3.22 引数を必 必要とするプ プログラム ム 引数 数を必要とする場合はイミ ミディエイト ウインドウを を表示させ、プロシージャ ャ名を指定し して実行 する る。 1.デバッグ グするモジュールを選択し してVisual Basic B 編集画 画面を開く。 2.「表示」コマンドを選択し「イミ ミディエイト トウインドウ」 」を選択。 3.実行した たいプロシージャを選択し し「Enter」キ キーを押す。 3.3.33 フォームからの実行 行 スモジュールに に定義したイ ベントプロシ シージャ内に標 標準モジュー ールで定義した たプロ フォームのクラス ジャを記述しておく。 シー ジ 11. データベー ースウインドウの「モジュ ュール」タブを を選択し、「新 新規作成」コ コマンドを実行 行。 22.「function Test() T as strin ng」と入力し し 「Enter」。 33. カーソル位 位置に「 Tes st= “テストプ ログラムの実 実行”」と入力。 。 4. 標準モジ ジュールのプログラムの実 実行 次に、フォーム上に配置したラ ラベルをクリ ックすると、 、プログラム ムの戻り値を表 表示させる。 1. フォーム ムタブを選択 択し「新規作成 成」コマンド ドを実行。 2. ツールバ バーから「ラ ラベル」を選び びフォームに に貼り付ける。 3. ラベルに にテキスト文 文字列(例えば ば「テスト」)を設定。 4. プロパテ ティウインド ドウから「イベ ベント」タブ ブを選択。 5. 「クリッ ック時」イベ ベントを選択 し、「イベン ントプロシージャ」を選択 択し、ビルド ドボタン をクリッ ック。 6. イベン ントプロシージ ジャの開始宣 宣言部と終了宣言部の間に に P Private Sub ラベル_Cliick() Me. ラベル0.Captionn = Test E End Sub 7. Visuall Basic 編集画面の左端に にあるAccess sデータベースウインドウ ウ表示ボタン ンをクリ ックして てフォームの のデザインビ ュー画面に戻 戻り、フォー ームビューで開 開く。 8. ラベル ルの文字列をク クリック。 ラベル 番号である。 ルの番号はラベ ベルがフォー ーム上に作ら れるときに自 自動的につけ けられる通し番 ータ」プロパ フォ ォームからプロシージャを を直接呼び出 出すにはフォー ームオブジェ ェクトの「デー パティ の「 「コントロール ルソース」に に「=Test()」 と入力する る。 31 3.3.44 クエリからの実行 行 エリから組み込み関数が同 同様に使える。 クエ テーブルを選択 択。 1. クエリを新規作成しテ ールド名:プロ ログラム名 ( ))」を入力。(テスト:Test( )) 2. 「フィー 3.3.55 マクロか からの実行 標準 準モジュールに に定義したプ プロシージャ をマクロから ら実行するに には、あらか じめ標準モジ ジュー ルのプ プロ シージャ ャを用意する。 Functionn MacroTest( ) MsgBBox “ Hello! Good Morrning!” End Fuunction 1. データベー クロ」タブを ースウインド ドウから「マク を選択し「新 新規作成」コマ マンドを実行 行。 2. 「アクショ ョン」に「プロ ロシージャの 実行」を設定 定し、 「プロシ シージャ名」に「Macro Test( )」 を入力。 3. マクロを を保存して、マ マクロの実行 行ボタンをクリック。 3.3.66 Access 起動時の実 実行 Acccess起動時に にプログラム ムを実行させ せることは、パスワードの要 パ 要求などいろ ろいろな使い い方があ って、有 用である る。このときはAutoExecマ マクロを利用 用する。このときもあらか かじめプロシ シージャ を用意 意しておく。 これを「Use ePass」として ておく。手続 続きは前と同様である。プ プロシージャ名設定 フィー ールドに「UseePass」を入力し、マクロ ロを「AutoEx xec」の名前で で保存する。 クトの階層 層構造 3.4 オブジェク VBAで でプログラムを組む上でオ オブジェクト の階層構造の の理解は必須 須である。オブ ブジェクトは はフォー ム、レ レポート、モジ ジュールを操 操作するAppllicationオブ ブジェクトと、 、テーブルや やクエリを操 操作する データ タアクセスオブ ブジェクトに に分けられる 。 32 3.4.3 Microssoft DAO3.6 6 Objects LLibraryの組 組み込み テー ーブルやクエリをVBAで で操作するに には、DAOのDB BEngineオブジ ジェクト階層 層のコレクシ ションと オブジ ジェクトを参照 照するので、Microsoft DAO 3.6 Obje ects Library y の組み込み みと参照優先 先順位を 設定し しなければならない。 1. Visual Basic B 編集画 画面を開き、 「ツール」メ メニューから ら「参照設定 定」コマンドを を選択。 2. 「Microssoft DAO 3.6 6 Objects Liibrary」にチ チェックマー ークを付けて選 選択状態とす する。 3. 「上向き矢印」をクリ リックして、 「Microsoft DAO 3.6 Ob bjects Librrary」の優先 先順位を 「Microssoft Active Data Objectts 2.1 Libra ary」より上に設定して 「OK」ボタンを押 す。 プロシージ ジャの表現形 形式 3.5 プ 33 34 分岐条件 35 36 第4章 マクロの作成 1.条件式を使うマクロ ¾ フォームの作成 コントロールウィザードを ON にして、オプショングループを配置し、オプションボタ ンの名前を登録する。 ¾ マクロの作成 マクロウィンドウを開いて、ツールバーの条件ボタンをクリックして条件列を表示。 引数にメッセージを書き込む。 作成したマクロを「条件式」という名前で保存。 ¾ フォームのコマンドボタンにマクロを割り当てる コマンドボタンのプロパティからイベントをクリックして、 「クリック時」の矢印ボタン をクリックしてマクロの一覧から「条件式」を選択する。 ¾ フォームの実行ボタンからマクロを起動する。 2.マクロを VBA に変換する 「オブジェクト」欄にあるマクロ「条件式」を選択し、 「データベースツール」から「マ クロを Visual Basic に変換」をクリックする。 こうしてマクロは VBA で表現されていることが分かる。 Option Compare Database '-----------------------------------------------------------' 条件式 '-----------------------------------------------------------Function 条件式() 37 On Error GoTo 条件式_Err With CodeContextObject If (.言語 = 1) Then Beep MsgBox "おはよう", vbOKOnly, "" End If If (.言語 = 2) Then Beep MsgBox "Good Morning", vbOKOnly, "" End If If (.言語 = 3) Then Beep MsgBox "Guten Morgen", vbOKOnly, "" End If End With 条件式_Exit: Exit Function 条件式_Err: MsgBox Error$ Resume 条件式_Exit End Function 3.VBA による制御 フォームの実行ボタンに直接 VBA を割りつけること場合をみておこう。 コンボボタンを選択して、1 列に順に日本語、英語、ドイツ語を入力し、名前を「言語」 としておく。このときラベルだけでなく、テキストボックスの名前も「言語」に書き直 しておく。コマンドボタンを作り、それに次ぎのプログラムを割りつける。 Private Sub コマンド 2_Click() If 言語 = "日本語" Then MsgBox ("おはよう") ElseIf 言語 = "英語" Then MsgBox ("Good Morning") Else MsgBox ("Guten Morgen") End If End Sub 同様にオプショングループに対する VBA は次になる。ここでもオプショングループのラ 38 ベルだけでなくグループの枠組みの名前を「言語」としておく。 Private Sub コマンド 9_Click() Select Case 言語 Case 1 MsgBox ("おはよう") Case 2 MsgBox ("Good Morning") Case 3 MsgBox ("guten morgen") End Select End Sub 4.マクロでフォームを操作する 顧客管理編集フォーム 1.最初に顧客管理フォームを作成する。顧客管理フォームは作成でフォームを選択し、 「既存のフィールドの追加」をクリックし、フィールドリストから顧客マスターを 選択して、すべてのフィールド名を顧客管理フォームにドラッグする。コマンドボ タンを作成し、 「フォームの操作」から「フォームを閉じる」を選択。顧客管理フォ ームの名で保存。 2.顧客管理編集フォームを作成し、コマンドボタンを配置して、データ編集のマクロ を割りつける。 「アクション」で「フォームを開く」を選択し、引数のフォーム名に 「顧客管理フォーム」を指定する。コマンドボタンの名前は「データ編集」とする。 39 3.顧客管理編集フォームにもう一つのコマンドボタンを配置し、新規入力のマクロを 割りつける。 「アクション」で「フォームを開く」を選択し、引数のフォーム名に「顧 客管理フォーム」を、 「データモード」に「追加」を指定する。コマンドボタンの名 前は「新規入力」とする。 4.顧客管理編集フォームに「フォームの印刷」ボタンを配置、 「フォームの操作」から 「フォームの印刷」を選択して、マクロを割りつける。 「オブジェクトの選択」から 「フォーム」を、 「オブジェクト名」には『顧客管理フォーム』を指定。次に「コマ ンドの実行」を選択し『印刷』を指定。 5.顧客管理編集フォームに「閉じる」ボタンを配置 5.外部データのインポート/エクスポート (ア) Access の別データベースからファイルをインポート (イ) Excel のデータをインポート (ウ) Access データを Excel へエクスポート 6. 数式処理 40 第5章 VBA 5.1 VBA とフォーム フォームを新規作成し、コマンドボタンを配置して、コマンドボタンの「プロパティ」から「イベ ントのビルド」を選択。「コードビルド」を選択してプログラムを書く。 フォーム上で数値を代入して結果をフォームに出力するプログラムは、フォームに テキストボックスを配置し名前を付ける(ここでは a, b, ans)。次にコマンドボックスを配置し てその「プロパティ」の「クリック時」で「イベントプロシージャ」を選んで、以下のプログラム を作成する。 41 このプログラムでは文字型(String 型)が使われているので正しい足し算にならない ことに注意。正しい計算をさせるためには数値型に変換する必要がある。 ところで、テキストボックスのプロパティから数値型を選択しておけば、単にイベントプ ロシージャには ans=a+b とするだけでよい。 5.2 分岐条件を含むフォーム (1) フォームの作成 42 フォームをデザインビューで新規作成し、ツールボックスからコンボボックスを選択し、 フォーム上でクリック。コンボボックスウィザードで「表示する値をここで指定する」を 選択。リストの列で「1」を選択し、「日本語」、「英語」、「ドイツ語」を入力。コンボボ ックスのラベルを入力し完了。 (2) フォーム上にコマンドボタンを作成し、 「プロパティ」の「イベントのビルド」から 「コードビルダ」を選択し、次のプログラムを書く。 コマンドボタンの名前を「挨拶」として保存。フォームビューを開いて確かめる。 5.3 コンボボタンによる分岐 43 44 第6章プロジェクト:履修登録システムの作成 このプロジェクトでは、学生が学籍番号、氏名を入力し、曜日・時限で指定されたコンボボ ックスにリストアップされた授業を選択すると、単位数を計算し履修条件を満たしている場 合は「OK」を、満たしていない場合は「やり直し」のメッセージを出すフォームを作成す ることである。簡単のため、週3日のカリキュラム(月・火・水)、履修可能科目は 2008 年 度前期の1年次から3年次配当科目とし、最大履修単位数は 30 とする。 履修登録システムの設計に必要なデータは次のものである。 1.授業に関するデータ 科目名、単位数、実施曜日・時限、教室番号、担当教員名 2.学生に関するデータ 氏名、学籍番号 データベースの構造は以下の通りである。 45 唐金利宏 宏「Microsoft Access を利 利用した履修登 登録フォームに についてのレポ ポート」から引 引用 46 6.1 テーブルの作成 6.1.1 科目マスタ 6.1.2 教員マスタ 47 6.1.3 時間割マスタ 6.1.4 時限テーブル 6.1.5 曜日テーブル 6.1.6 単位マスタ 48 6.1.7 開講形態テーブル 6.1.8 科目種別テーブル 6.1.9 学科コードマスタ 6.2 クエリの作成 履修登録フォームでユーザーが時間割を作成するのに必要なデータを提供するためのクエリで、コ ンボボタンに割り振られるものを考慮して、データの組み合わせを決める。 49 6.3 フォームの作成 (1)フォームを作る前に、コンボボックスで選択するデータを格納するテーブル(「個人登録テ ーブル」)を作っておく。これはコンボボックスを作成するとき、そこで選択したデータを保存す る場所を指定するからである。テーブルは次のようなものを用意しておく。 (2)「作成」から「フォームデザイン」を選択し、左上角の四角をクリックしてフォームのプロ パティを開き、 「データ」のタグを選択して、 「レコードソース」欄にコンボボックスで選択したデ ータを格納するテーブル名(「個人登録テーブル」)を指定する。 (3)コンボボタンをクリックしたときに必要なデータだけを取り出すため、曜日・時限ごとに クエリを作る。これはコンボボックスのプロパティの「データ」から集合値ソースで時間割クエリ を呼び出し、 「曜日コード」、「時限コード」の抽出条件を指定する。下の図では「曜日・時限コー ド」に抽出条件を指定している。抽出条件を指定した後、 「名前を付けて保存」 (月1)して、集合 値ソースにその名前(月1)を指定しておく。 (3) コンボボックスのプロパティの「データ」の「連結列」は「個人登録テーブル」に入れる データ( 「科目コード」)を指定するため、時間割選択クエリの科目コードのフィールド列を指定す る 50 6.4 『行データ』の『列データ』への変換 フォームから入力したデータは、行データとして格納されるので、サブフォーム作成に便利なよう に列データに変換する。コマンドボタンを作りそのイベントにプログラムを割り付ける。以下では フォームに入力したデータはテーブル名「登録テーブル_04」に保存されているので、それを読み 取って新しいテーブル「個人時間割テーブル」を作成している。このとき、 『個人時間割テーブル』 はあらかじめ作成し、1行だけ関係ないデータをいれておかなければならない。 51 このプログラムの実行結果、次のテーブルが作成される。プログラムの実行はフォームに作ったコ マンドボタン「詳細データの作成」をクリックする。 52 6.5 クエリの作成 テーブル『個人時間割テーブル』が作成された時点で、クエリを実行すれば以下のような ユーザーの時間割の詳細が表示される。 6.6 クエリの実行 53 登録フォームにコマンドボタン「クエリの実行」を配置しておく。 6.7 サブフォームのメインフォームへの割付 クエリを表示させるのではなく、サブフォームとしてフォームに組み込んでも良い。 54 6.8 総単位数を表示するテキストボックスを作る。 コマンドボタンをつくり、 「クリック時」に「イベントプロシージャ」を設定し、「コード ビルド」で次のプログラムを作成。単位数を計算してテキストボックス「テキスト 77」に 出力する。以下では「個人時間割クエリ」の7列目に「フィールド:単位」が置かれているので、 プログラム上では Fields(6)としてある。 6.9 総単位数を履修条件と比較して、必要なメッセージを出すマクロを作成する。 55 コマンドボタンを作り、標題を「登録条件チェック」 (名前は「コマンド 79」)として、 「イベント のビルド」から「コードビルド」を選択し、次のプログラムを作成する。ここで「テキスト 77」 は単位数を格納したテキストボックスの名前である。 6.10 履修単位数の計算 単位をコンボボックスに書き込むフォームの設計で、テーブルに単位データが次のように入ってい るとき。このテーブルのデータを読み取り、合計単位数を計算してフォーム上に書く手順は以下の とおり。以下では、テーブルの名前を「履修登録マスタ」としてある。 ID 学籍 氏名 月1 月2 月3 月4 月5 火1 1 w001 中央太郎 2 2 0 2 3 2 2 w002 中央次郎 0 2 2 2 3 2 フォームに次の操作を加える。 56 1. フォームにコマンドコントロールを作る。名前をつける。 2. フォームにテキストボックスを作る。名前をつける。 3. コマンドコントロールのプロパティを開いて「クリック時」を選択し、コマンドコントロー ルの名前をつける。次にロールダウンボタンをクリックして「イベントプロシージャ」を選 択してから「ビルド」ボタンをクリックしてプログラム作成のためのモジュールウインドウ を開く。次のプログラムを書き込む。ここでコマンドコントロールの名前を「履修登録単位 数」とし、テキストボックスの名前を「テキスト28」としてある。フィールドはその名前 によらず Fields(i)で参照できるが、テーブルの列番号 i に対してフィールド名は Fields(i-1) であることに注意する。 Private Sub 履修登録単位数_Click() Dim rs As Recordset Dim i As Integer Dim u As Integer Set rs = CurrentDb.OpenRecordset("履修登録マスタ") u=0 For i = 8 To 13 u = u + rs.Fields(i) Next i テキスト 28 = u End Sub 4. プログラムを保存し(アイコン「キー」をクリックする) 、フォームのビューを開き、コマン ドコントロールをクリックするとテキストボックスに「合計単位数」が出力される。 5. このとき、エラー「型が一致しない」メッセージが出たら、モジュールウインドウの「ツー ル」メニューから「参照設定」コマンドをクリックし、 「Microsoft DAO 3.6 Object Library」 にチェックマークをつけて選択し、<上向き矢印>をクリックして、「Microsoft DAO3.6 Object Library」を「Microsoft ActiveX Data Object 2.1 Library」の上に移動させ<OK>ボ タンをおす。 フォームに科目名、単位数などを書き込む場合は、テーブル上で単位数が並ぶように設計すれば上 と同じプログラムとなる。科目名と単位数が ID 学籍 氏名 月1科 月2科 月3科 月4科 月5科 月1単 目 目 目 目 目 位 1 w001 中央太郎 英語 情報 データ 犯罪 演習 2 2 w002 中央次郎 英語 なし 情報 データ 国際 2 火1科 火2科 火3科 火4科 火5科 月 2 単 月3単 月4単 月5単位 57 位 位 位 目 目 目 目 目 2 2 2 3 仏 なし 経済 演習 数学 0 2 2 2 独 関係 経済 演習 数学 火 1 単 火2単 火3単 火4単位 火5単 水1科 水2科 水3科 水4科 位 位 位 位 目 目 目 目 2 0 2 3 2 なし 経済 演習 数学 2 2 2 3 2 英語 経済 演習 数学 この場合は単位数のところだけ選択的に加算するプログラムにする。以下で土曜日まで加えるため には j を1から6までとればよい。フォームの設計に応じてプログラムを変える必要がある。 Private Sub 履修登録単位数_Click() Dim rs As Recordset Dim i As Integer Dim j As Integer Dim u As Integer Set rs = CurrentDb.OpenRecordset("履修登録マスタ") u=0 For j=1 to 2 For i = 8+10*(j-1) To 12+10*(j-1) u = u + rs.Fields(i) Next i Next j テキスト 28 = u End Sub 6.11 フォームから入力された行データを別のテーブルの列データに変換する方法 フォームから打ち込んだデータは一つのレコード(行データ)として保存されるが、個人情報は多 くのフィールドからなるので、一義的に定まる時間割コードをフォーム上に書かせることとし、こ れを列データに変換し、クエリを作成することによって個人情報をすべて再現するようにしたい。 フォームから作られるデータ(テーブル名:履修テーブル)が ID 学籍番号 氏名 月1 月2 月3 月4 月5 火1 1 w001 中央太郎 100 2 95 3 62 55 となっているとき、これを列テーブルに変換すれば、クエリを簡単に作れる。ここでは列テーブル (テーブル名:個人登録テーブル)はあらかじめ作られている場合を考える。 58 ID 学籍番号 氏名 時間割コード 1 w001 中央太郎 100 2 w001 中央太郎 2 Sub transform() Dim i As Integer Dim j As Integer Dim m(100) As Integer Dim a As String Dim b As String Dim rs As Recordset Dim rs_new As Recordset Set rs = CurrentDb.OpenRecordset("履修テーブル") a = rs.Fields(1) b = rs.Fields(2) Debug.Print a Debug.Print b For i = 1 To 10 j=i+2 m(i) = rs.Fields(j) Debug.Print m(i) Next i rs.Close Set rs_new = CurrentDb.OpenRecordset("個人登録テーブル") For i = 1 To 10 rs_new.Edit rs_new("学籍番号") = a rs_new("氏名") = b rs_new("時間割コード") = m(i) rs_new.Update Debug.Print rs_new("学籍番号") Debug.Print rs_new("氏名") 59 Debug.Print rs_new("時間割コード") Next i rs_new.Close End Sub