前章ではマスターテーブルに直接データを登録しました。部門マスターや単位マスターのようにIDと名称のみのテーブルの場合はテーブルに直接入力しても構わないのですが、品目マスターや担当者マスターのように他のマスターに登録済のIDを入力しなければならないなど、制約が伴う場合があります。ここではフォームを作成してスムーズにマスターデータを登録する手法を学びます。
マスター入力用フォームは下記のデータベースファイル上に実装します。
Base練習_MasterData.odb
なお、マスター用フォーム作成後のデータベースファイルは下記のファイルとなります。実装時間を省きたい方は下記ファイルを開いて第7章に進んで頂いても結構です。
Base練習_MasterForm.odb
品目マスター入力用フォーム「Item」作成
フォームは[デザイン表示でフォームを作成]をクリックすることにより作成することも可能ですが、作業効率上、Base初級コースと同様、[ウィザードを使用してフォームを作成]をクリックして開始し、フォーム作成後に修正モードで詳細設定を行う手順をお勧めします。
①Base編集画面左ペインの「データベース」欄より「フォーム」を選択し、右ペイン上部の「タスク」欄で[ウィザードを使用してフォームを作成]をクリックします。
②すると、下図のように「データベースフォーム」画面が開き、さらにウインドウ「フォームウィザード」が表示されて、左ペインの「ステップ」欄には「1.フィールドの選択」フェーズであることが示されます。
③右ペインの「テーブルまたはクエリー」欄で「表:Item」を選択すると、「使用可能なフィールド」欄には品目マスター(Item)のフィールドが表示されます。ここではボタン「>>」をクリックして全てのフィールドを「フォーム内のフィールド」欄に移動します。
④下図が「フォーム内のフィールド」欄に全てのフィールドを移動した状態です。
⑤ここで[次へ]をクリックします。
⑥すると、左ペインの「ステップ」欄には「2.サブフォームの設定」フェーズであることが示されます。ここではそのまま[次へ]をクリックします。
⑦すると左ペインの「ステップ」欄には「5.コントロールの整列」フェーズであることが示されます。ここでは右ペインの「メインフォームの整列」欄で「欄で、ラベル書きは上に」の整列パターンをクリックします。
⑧すると下図のように背景の「データベースフォーム」画面こメインフォームのコントロール(フォームの各要素)が配置されているのが確認されますので、[次へ]をクリックします。
⑨すると、左ペインの「ステップ」欄には「6.データエントリーの設定」フェーズであることが示されます。ここではなにもせず[次へ]をクリックします。
⑩すると、左ペインの「ステップ」欄には「7.スタイルの適用」フェーズであることが示されます。、ここでは「灰色」を指定して[次へ]をクリックします。
⑪すると、下図のように左ペインの「ステップ」欄には「8.名前の設定」フェーズであることが示されます。右ペインの「フォーム名」欄には指定したテーブル名「Item」がデフォルトで表示されていますのでそのままにし、「フォームの変更」をONにして[完了]をクリックします。
⑫すると、フォーム「Item」が登録され、下図のように引き続き編集モードで開きます。
⑬編集モードでは「フォームナビゲーター」について学習しましょう。フォームナビゲーターの使用法を覚えるとコントロールの属性の変更作業が容易になります。
下図の赤線の囲みはツールバー上のアイコン「フォームナビゲーター」の位置を示しています。このアイコンをクリックしてみましょう。
⑭すると下図のようにウインドウ「フォームナビゲーター」が表示されます。「MainForm」と名づけられたフォルダーの配下に10のコントロールが設定されているのが確認されます。コントロール「lblID」と「txtID」が上図の「ID」とその下にあるボックス、コントロール「lblName」と「txtName」が上図の「Name」とその下にあるボックスに対応しています。
⑮ちなみに一度「フォームナビゲーター」を閉じ、下図のように「データベースフォーム」画面上の「Name」と表示されているコントロールを、WriterやCalcのオブジェクトを指定する要領でクリックし、ハンドルが表示された状態でアイコン「フォームナビゲーター」をクリックしてみて下さい。
⑯すると、下図のようにコントロール「lblName」と「txtName」が同時に青く反転して、これらが指定されているのが分かります。これは2つのコントロールがグループ化されていることを意味します。この状態では属性の編集を行うことができません。
※ フォームウィザードを使用すると入力フィールドとラベルがペアでグループ化された状態で作成されます。グループを解除した上で作業を進める方法もありますが、ここではグループ化のメリットを尊重し、このまま作業を進めることにします。
⑰それでは次に、フィールド「Unit_ID」ではIDの値を手入力する方式ではなく、リストから選択する方式に変更してみましょう。
再び「フォームナビゲーター」を閉じ、どのコントロールも指定せずにもう一度アイコン「フォームナビゲーター」をクリックして下さい。
⑱コントロール「txtUnit_ID」を右クリックします。
⑲すると、下図のようにコンテキストメニューが表示されますので、「以下に置換>リストボックス」を選択します。
(注)まれにコンテキストメニューに「以下に置換」が表示されないことがありますが、この場合は何度か右クリックをトライしてみて下さい。
⑳すると、下図のようにコントロール「txtUnit_ID」のアイコンがリストボックスの形に変わりますので、再び右クリックしてコンテキストメニューから「属性」を選択します。
㉑すると、下図のようなウインドウ「属性 リストボックス」が表示されます。
フォーム上に設定されるコントロールの属性は一般的に「全般」、「データ」、「イベント」の3つのタブで構成されています。ここでは「データ」タブを開いて下さい。
㉒下図のように「データ」タブの3番目の項目「リスト内容の種類」がデフォルトで「値リスト」になっていますので、これを「Sql」に変更します。
㉓すると、操作のタイミングによっては下図のようにウインドウが黒くなり固まってしまうことがあります。これはBaseのシステム上の不具合と思われますが、作業上特に支障ないので、一旦ウインドウを「×」ボタンで閉じ、再び、コントロール「txtUnit_ID」のアイコンを右クリックしてコンテキストメニューから「属性」を選択します。
㉔すると、下図のようにウインドウ「属性 リストボックス」が正常に開きますので、4番目の項目「リストの内容」の右端にあるボタン[…]をクリックして下さい。
㉕すると下図のように「クエリーデザイン」画面が表示され、さらにダイアログボックス「テーブルまたはクエリーの追加」が表示されますので、「テーブル」を選択し、テーブルリストから「Unit」を選択し、[追加]をクリックします。
㉖すると下図のように「クエリーデザイン」画面上方にテーブル「Unit」のテーブル設計デザインが表示されますので、[閉じる]をクリックします。
㉗「クエリーデザイン」画面下方の表1列目のフィールド行で「Name」、2列目のフィールド行で「ID」を選択して「クエリーデザイン」画面を閉じます。
㉘すると下図のようなダイアログボックス「確認」が表示されますので、[はい]をクリックします。
㉙すると下図のようにウインドウ「属性 リストボックス」の4番目の項目「リストの内容」に次のようなSQL文が設定されているのが確認されます。
SELECT “Name”,”ID” FROM “Unit”
SQL文についてはクエリーの章で詳しく述べますが、ここではSQL文が自動的に設定されていることを確認して下さい。
㉚ここまでの手順でフィールド「Unit_ID」がリストから選択する方式に変更されましたので、ウインドウ「属性 リストボックス」と「フォームナビゲーター」を閉じ、フォーム「Item」を保存します。
フォーム「Item」を使用したデータ入力
フォーム「Item」が完成しましたので、これを使って品目マスター(Item)にデータを入力してみましょう。
①Base編集画面左ペインの「データベース」欄より「フォーム」を選択し、右ペイン下部の「フォーム」欄に登録されているフォーム「Item」をダブルクリックして起動します。
②すると下図のようなフォーム画面が表示され、テーブル「Item」に既に登録されているレコードの内の1レコード目が表示されているのが分かります。
③画面下のツールバーには赤い破線で示したように「フォームのナビゲーション」が表示されています。ここに表示された各アイコンでレコード番号による検索や、前後レコードへの移動、また新規レコード作成や、レコード削除などの操作を行うことができます。
万一ツールバーに「フォームのナビゲーション」が表示されていない場合は、メニュー「表示>ツールバー>フォームのナビゲーション」を選択して表示させることができます。
④フィールド「Unit_ID」に注目して下さい。”箱”が青い色で選択されています。これはテーブル「Unit」のフィールド「Name」の値が表示されているためです。
ちなみにテーブル「Item」をダブルクリックして開き、IDが”D001”のフィールド「Unit_ID」を見ると値が”BOX”になっています。この”BOX”をIDとするテーブル「Unit」のフィールド「Name」の値が”箱”となっているため、画面上で”箱”が選択されているわけです。
※ このような他のテーブルへの参照はリストボックスの属性に設定したSQLの機能で実現しています。
⑤それでは新規レコードを追加してみましょう。下図のように「フォームのナビゲーション」よりアイコン「新しいレコード」をクリックします。
⑥すると下図のように各フィールドがブランクで、Unit_IDのみ未選択の状態になっている画面になりますので、各フィールドに新規レコードのデータを入力します。
⑦下図が各フィールドに値を入力し終わった状態です。Unit_IDではリストの中から”ダース”を選択します。
⑧「フォームのナビゲーション」よりアイコン「レコード保存」をクリックします。
⑨レコードを保存しても画面上変化はありません。ここでフォーム「Item」を閉じ、テーブル「Item」を開いて新規レコードが正しく保存されているか確認してみましょう。
⑩下図がテーブル「Item」を開いたところです。最後のレコードが新規レコードです。Unit_IDにはフォーム画面で選択した”ダース”のID”DZN”が設定されているのが確認できます。
担当者マスター入力用フォーム「Staff」作成
今回も[ウィザードを使用してフォームを作成]をクリックして開始し、フォーム作成後に修正モードで詳細設定を行う手順で作業を進めます。
①Base編集画面左ペインの「データベース」欄より「フォーム」を選択し、右ペイン上部の「タスク」欄で[ウィザードを使用してフォームを作成]をクリックします。
②すると、下図のように「データベースフォーム」画面が開き、さらにウインドウ「フォームウィザード」が表示されて、左ペインの「ステップ」欄には「1.フィールドの選択」フェーズであることが示されます。
③右ペインの「テーブルまたはクエリー」欄で「表:Staff」を選択すると、「使用可能なフィールド」欄には担当者マスター(Staff)のフィールドが表示されます。フィールド「Name」を指定すると、ボタン「>」が有効になり、これををクリックするとフィールド「Name」が「フォーム内のフィールド」欄に移動します。同様にID以外の全てのフィールドを移動します。IDは自動採番で作成されるフィールドなので手入力する必要が無いためフォーム内ではフィールドに指定しません。
④下図が「フォーム内のフィールド」欄にフィールドを移動し終わった状態です。
⑤ここで[次へ]をクリックします。
⑥これ以降、各ステップでは品目マスター入力用フォーム作成の時と同様に進め、最終ステップの「8.名前の設定」フェーズでは右ペインの「フォーム名」欄にはデフォルト値「Staff」が表示されていますのでそのままにしておきます。今回は「フォームの変更」をONにせず、デフォルトの「フォームを使用」がONのまま[完了]をクリックしてみましょう。
⑦すると、フォーム「Staff」が登録され、引き続き下図のようなフォーム画面が起動します。画面にはテーブル「Staff」に既に登録されているレコードの内の1レコード目が表示されているのが分かります。
⑧今回もフォーム「Item」作成時と同様、続けて編集モードでフォームのプロパティ変更を行いますので、ここでは「×」をクリックして一旦フォーム画面を閉じます。
⑨Base編集画面左ペインの「データベース」欄より「フォーム」を選択し、右ペイン下部の「フォーム」欄に登録されているフォーム「Staff」上で右クリックします。
⑩すると、下図のようにコンテキストメニューが表示されますので、「編集」を選択します。
⑪すると、下図のようにフォーム「Staff」が編集モードで開きます。
⑫今回はフィールド「Department_ID」をリストから選択する方式に変更してみましょう。途中で解らなくなったら品目マスター用フォーム作成の節を読み直して作業を進めて下さい。
⑬アイコン「フォームナビゲーター」をクリックしてウインドウ「フォームナビゲーター」を開きます。
⑭コントロール「txtDepartment_ID」を右クリックし、コンテキストメニューより「以下に置換>リストボックス」を選択します。
⑮コントロール「txtDepartment_ID」のアイコンがリストボックスの形に変わりますので、再び右クリックしてコンテキストメニューから「属性」を選択します。
⑯するとウインドウ「属性 リストボックス」が表示されますので「データ」タブを開きます。
⑰「データ」タブの3番目の項目「リスト内容の種類」を「Sql」に変更します。
⑱データ」タブの4番目の項目「リストの内容」の右端にあるボタン[…]をクリックして下さい。
⑲すると下図のように「クエリーデザイン」画面が表示され、さらにダイアログボックス「テーブルまたはクエリーの追加」が表示されますので、「テーブル」を選択し、テーブルリストから「Department」を選択し、[追加]をクリックします。
⑳すると「クエリーデザイン」画面上方にテーブル「Department」のテーブル設計デザインが表示されますので、[閉じる]をクリックします。
㉑「クエリーデザイン」画面下方の表1列目のフィールド行で「Name」、2列目のフィールド行で「ID」を選択して「クエリーデザイン」画面を閉じます。
㉒するとダイアログボックス「確認」が表示されますので、[はい]をクリックします。
㉓すると下図のようにウインドウ「属性 リストボックス」の4番目の項目「リストの内容」に次のようなSQL文が設定されているのが確認されます。
SELECT “Name”,”ID” FROM “Department”
㉔ここまでの手順でフィールド「Department_ID」がリストから選択する方式に変更されましたので、ウインドウ「属性 リストボックス」を閉じます。
㉕次にフィールド「Gender」もリストから選択する方式に変更してみましょう。コントロール「txtGender」を右クリックし、コンテキストメニューより「以下に置換>リストボックス」を選択します。
㉖コントロール「txtGender」のアイコンがリストボックスの形に変わりますので、再び右クリックしてコンテキストメニューから「属性」を選択します。
㉗するとウインドウ「属性 リストボックス」が表示されますので「データ」タブを開きます。
㉘「データ」タブの3番目の項目「リスト内容の種類」はデフォルトで「値リスト」になっています。
㉙「データ」タブの4番目の項目「リストの内容」の隣にあるボタン[▼]をクリックして下さい。
㉚すると下図のようにリストの値を入力するボックスが表示されますので、「m」と「f」を入力します。「m」と「f」の間は[Sift]+[Enter]で改行されます。
㉛リストの値を入力し終わったら[OK]をクリックして下さい。
㉜次に「全般」タブを開き、中ごろにある項目「リストの項目」欄の隣にあるボタン[▼]をクリックして下さい。
㉝すると、下図のようにリストの値を入力するボックスが表示されますので、「男性」と「女性」を入力します。
(注)「リストの項目」欄には残念ながら漢字入力できません。漢字を入力したい場合は予めWriterか、一般のテキストエディターに入力しておいた文字列をコピペで貼り付けてください。
㉞リストの項目を入力し終わったら[OK]をクリックして、ウインドウ「属性 リストボックス」を閉じます。
※ これらの手順により、フィールド「Gender」ではフォーム画面のリストから「男性」を選択するとコード「m」が、「女性」を選択するとコード「f」が、担当者マスター(Staff)に設定されるようになります。
㉟次にフォーム「Staff」を、もう少し見栄えのよいものにしましょう。まず、フィールドのタイトルはテーブル「Staff」のフィールド名のままになっていますので、これを分かりますいものに変えます。
㊱ウインドウ「フォームナビゲーター」を開き、コントロール「lblName」を右クリックし、コンテキストメニューから「属性」を選択します。
㊲下図のように「全般」タブの「タイトル」欄に「担当者名」と入力してウインドウ「属性 リストボックス」を閉じます。
㊳すると、下図のようにフォーム編集画面のタイトルが変更されたことが確認されます。
㊴同様に他のフィールドのタイトルも変更し終わったのが、下図です。
㊵さらに各フィールドが必要以上に長いので、調整することにしましょう。方法はフォーム編集画面上でフィールドを指定したら表示されるハンドルを使ってサイズを変更します。
㊶ただし、下図のようにフィールドを縮めすぎると、タイトルもその一部しか表示されなくなってしまう場合があります。その場合はコントロールのグループを解除します。
㊷下図のようにフィールドを指定した状態で右クリックし、コンテキストメニューより「グループ解除」を選択します。
(注)タイミングによってコンテキストメニューに「グループ解除」が表示されない場合がありますが、そういう時は右クリックを何度かトライして下さい。
㊸グループ解除されたコントロールは他のコントロールに影響されずに大きさや属性を変更することができます。下図は各コントロールの大きさを適切な状態にし、また配置を変更した結果です。特に部門のリストは沢山表示されますので、サイズを縦長に変更しました。
㊹ちなみにグループ解除されたコントロールはフォームナビゲーターを使用しなくても、下図のように直接指定し、右クリックでコンテキストメニューから「コントロールのプロパティ」を選択することにより属性ウインドウを開くことができます。
(注)なお、コンテキストメニューに表示される「フォームのプロパティ」を選択すると、指定したコントロールが何であれ、ウインドウ「フォームの属性」(フォーム全体に関わる属性)を開くことができます。
これはツールバー上のアイコン「フォームナビゲーター」の左にあるアイコン「フォームのプロパティ」をクリックするのと同じ機能です。
㊺ここまでできたら、フォーム「Staff」を保存します。
フォーム「Staff」を使用したデータ入力
フォーム「Staff」が完成しましたので、これを使って担当者マスター(Staff)にデータを入力してみましょう。
①Base編集画面左ペインの「データベース」欄より「フォーム」を選択し、右ペイン下部の「フォーム」欄に登録されているフォーム「Staff」をダブルクリックして起動します。
②すると下図のようなフォーム画面が表示され、テーブル「Staff」に既に登録されているレコードの内の1レコード目が表示されているのが分かります。
③フィールド「部門」に注目して下さい。”品川営業所”が青い色で選択されています。これはテーブル「Department」のフィールド「Name」の値が表示されているためです。
ちなみにテーブル「Staff」をダブルクリックして開き、IDが”0”のフィールド「Department_ID」を見ると値が”S101”になっています。この”S101”をIDとするテーブル「Department」のフィールド「Name」の値が”品川営業所”となっているため、画面上で”品川営業所”が選択されているわけです。
④こんどはフィールド「性別」に注目して下さい。”女性”が青い色で選択されています。テーブル「Staff」のIDが”0”のフィールド「Gender」を見ると値が”f”になっています。フィールド「性別」の属性でリスト内容が”f”の場合はリストの項目を”女性”と表示させるように設定したため、画面上で”女性”が選択されているわけです。
⑤それでは新規レコードを追加してみましょう。ツールバーの「フォームのナビゲーション」よりアイコン「新しいレコード」をクリックします。
⑥すると下図のように各フィールドがブランクで、部門と性別が未選択の状態になっている画面になりますので、各フィールドに新規レコードのデータを入力します。
⑦下図が各フィールドに値を入力し終わった状態です。部門ではリストの中から”名古屋営業所”を選択し、性別では”男性”を選択ます。
⑧「フォームのナビゲーション」よりアイコン「レコード保存」をクリックしてフォーム「Staff」を終了します。
⑨テーブル「Staff」を開いて新規レコードが正しく保存されているか確認してみましょう。
⑩下図がテーブル「Staff」を開いたところです。最後のレコードが新規レコードです。Department_IDにはフォーム画面で選択した”名古屋営業所”のID”S103”が、Genderにはフォーム画面で選択した”男性”に対応する”m”が設定されているのが確認できます。