次のセクションでは、従業員フォームの使用方法とプログラム方法を示します。 オブジェクト名は、Northwind 2.0 Starter Edition データベースで容易に調べることができるように提供されています。
従業員フォームの使用
従業員リスト フォームの使用に関する重要な詳細は次のとおりです。
- メイン メニューから、左側のメニューから [従業員] を選択すると、右側のワークスペースに従業員 (sfrmMainMenu_EmployeeList) の一覧が表示されます。
- 各従業員の ID は、その従業員のレコードをポップアップ フォームで開いて詳細を編集するためのハイパーリンクです。
- 新しい従業員を追加するには、ヘッダー行の右端にある [ 従業員の追加 ] ボタンをクリックします。これにより、新しい従業員レコードがポップアップ フォーム (sfrmEmployeeDetail_OrderList) で開き、詳細が追加されます。
[従業員の詳細] ポップアップ フォームの使用
従業員の詳細ポップアップ フォームの使用に関する重要な詳細は次のとおりです。
[従業員の詳細] ポップアップ フォーム (frmEmployeeDetail) では、従業員レコードを編集および追加できます。
すべての従業員には、名、姓、役職の 3 つのフィールドが必要です。
既定のアクセスのエラー メッセージは、従業員レコードを保存する前に 1 つ以上が完了していない場合に警告します。 メール アドレスや電話番号など、他のフィールドには検証は適用されません。 ユーザーは、(000) 000-000 のような適切な書式設定の責任を負います。 [タイトル] のドロップダウン コントロールの既定のアクセス検証では、事前に選択された値のリストのみにエントリが制限されます。 これも、値フィールド コントロールの既定のアクセス動作を使用して、新しいタイトルを追加できます。 フォームのドロップダウンを選択すると、編集アイコンが表示されます。
従業員の写真は、添付ファイル フィールドとしてテーブルに保存されます。 添付ファイル フィールドの既定の Access 動作を使用して、新しい画像を追加したり、既存の画像を変更したりします。
従業員が注文を作成した場合、[従業員詳細] ポップアップの右側にあるサブフォームに、それらの注文がデータシート ビューに一覧表示されます。
その従業員の既存の注文は、[受注] サブフォーム (sfrmOrderDetails) のハイパーリンクされた [受注 ID] # をクリックすると編集できます。
従業員フォームのプログラミング
従業員フォームでは、VBA とフォーム上のコントロールの埋め込みマクロの両方を使用して、基本的なロジックを実行します。 2 つのスタンドアロン マクロと複数の埋め込みマクロが含まれています。
従業員リスト
従業員名簿フォーム (sfrmMainMenu_EmployeeList) は、単純なクエリ qryEmployeeList ( RecordSource プロパティから) からデータを取得します。 1 テーブル クエリに基づいてデータ入力フォームを作成することをお勧めします。
従業員リスト フォームのコントロールは有効になっているので選択でき、ロックされているので読み取り専用です。
複数値を持つフィールドに基づく [タイトル] フィールドは、ドロップダウンまたはコンボ ボックスです。 行のソースは値リストです。つまり、使用可能なオプションの項目はそのフィールドに直接含まれます。 このリストは編集を目的としていないため、リストの "リストに制限 " プロパティが "はい" に設定されています。 複数値を持つフィールドは、機能の例としてのみ含まれており、推奨としては含まれません。
従業員リスト (sfrmMainMenu_EmployeeList) では、 キー アップ イベントと キー ダウン イベントの 2 つのサブ プロシージャが、データシート ビューでのユーザーのカーソルの移動に応答します。 カーソルの移動方向 (左、右、上、または下) を検出し、フォーカスを適切なコントロールに移動する VBA 関数を呼び出します。
既存の従業員レコードを編集し、詳細フォーム (frmEmployeeDetail) で新しいレコードを追加します。
従業員リストから従業員の詳細フォームを編集可能なポップアップ フォームとして開くには、次の 2 つの方法のいずれかがあります。
- ハイパーリンクとして表示されるように書式設定された EmployeeID を選択し、[従業員の詳細] フォームを開き、その従業員レコードのみにフィルター処理します。
- フォーム ヘッダーで [ 従業員の追加 ] ラベルを選択して [従業員の詳細] フォームを開き、フォーカスを新しいレコードに移動します。 現在のすべてのレコードは、フォームのレコード ソースにあります。
2 つの方法は、パフォーマンスに異なる影響を与える可能性があることに注意してください。 フォームを 1 つのレコードにフィルター処理すると、テーブルから転送されるデータの量を最小限に抑えることができます。 レコードセットが小さい場合、違いは顕著にならない場合があります。
従業員の詳細
従業員詳細フォーム (frmEmployeeDetail) は、単純なクエリ qryEmployeeDetails (フォームの RecordSource プロパティから) からデータを取得します。 単一テーブルのクエリに基づいてデータ入力フォームを作成することをお勧めします。
qryEmployeeDetails の SELECT 句は、アスタリスク ワイルドカード文字 (*) を使用してテーブル内のすべてのフィールドを選択しますが、qryEmployeeList の SELECT 句は特定のフィールドを一覧表示します。 ワイルドカード文字を使用すると、クエリの追加編集を行わなくても、基になるテーブル内の新しいフィールドを取得できます。 これは、特定のフィールドのリストでは不可能です。 特定のフィールドの一覧では、表示のみのフォームで必要なフィールドのみにレコードセットが制限されます。 設計は、要件により適したアプローチの検討に基づいて行う必要がありますが、将来のメンテナンスが必要になる可能性が最も低いアプローチ (ワイルドカード文字の使用) を優先する必要があります。
従業員詳細フォームのコントロールは有効になっており、ロックされていないため、選択や編集もできます。
複数値を持つフィールドに基づく [タイトル] フィールドは、ドロップダウンまたはコンボ ボックスです。 行のソースは値リストです。つまり、使用可能なオプションの項目はそのフィールドに直接含まれます。 このリストは編集を目的としているため、リストには "リストへの制限 " プロパティが "No" に設定されています。 タイトルの追加または編集には組み込みの Access メソッドが使用されるため、コードは必要ありません。 複数値を持つフィールドは、機能の例としてのみ含まれており、推奨としては含まれません。
詳細フォームでは、既存の従業員レコードと新しい従業員レコードを編集できます。
従業員リストから従業員の詳細フォームを編集可能なポップアップ フォームとして開くには、次の 2 つの方法のいずれかがあります。
- ハイパーリンクとして表示されるように書式設定された EmployeeID を選択し、[従業員の詳細] フォームを開き、その従業員レコードのみにフィルター処理します。
- フォーム ヘッダーで [ 従業員の追加 ] ラベルを選択して [従業員の詳細] フォームを開き、フォーカスを新しいレコードに移動します。 現在のすべてのレコードは、フォームのレコード ソースにあります。
フォームを 1 つのレコードにフィルタリングすると、テーブルからフォームに転送されるデータの量を最小限に抑えることができます。 サンプル データのような小さなレコードセットでは、違いが顕著にならない場合があります。
[個人情報] の右側にあるサブフォーム コントロール (sfrmEmployeeDetail_OrderList) には、現在選択されている従業員 (該当する場合) の受注が表示されます。 サブフォーム コントロールのサブフォームは、[ 受注 ] セクションから再利用されます。 サブフォーム コントロールの組み込み Access LinkMasterFields/LinkChildFields プロパティは、各従業員に表示されるレコードを同期およびフィルター処理します。
従業員の詳細 (frmEmployeeDetail) では、フォームの On Current Event と On Close Event の 2 つのサブ プロシージャがこれらのイベントに応答します。
- On Current は、現在のレコードが既存のレコードかどうか、または開始されたがまだ保存されていない新しい従業員のレコードである場合に応じて、Add Employee ラベルを表示または非表示にします。
- On Closeは、2つのメンテナンス操作を実行します。 従業員詳細サブフォームの Recordset を再クエリして、詳細フォームで行われた追加または変更を更新します。 このマクロを呼び出して、メイン メニューの従業員数の表示を再同期します。
マクロ
macMainMenu_UpdateSubs このマクロはスタンドアロンで、従業員フォームなど、特定のイベントが発生したときに実行されます。 macMainMenu_UpdateSubs内では、サブマクロは、適用される機能に従ってグループ化されます。 従業員の場合、サブマクロは従業員レコード数をメイン メニューに表示される数と同期させます。
埋め込みマクロ 従業員フォームは、主にフォームに埋め込まれたマクロによって駆動され、フォームからのみ編集できます。 従業員リスト (sfrmMainMenu_EmployeeList) の場合:
- EmployeeID ハイパーリンク 従業員リスト フォームで [従業員 ID] をクリックすると、[従業員詳細] フォームが開き、選択した従業員レコードにフォーカスが設定されます。
- 従業員ラベルの追加 [ 従業員の追加 ] ボタンをクリックすると、従業員詳細フォーム (frmEmployeeDetail) が開き、フォーカスが新しいレコードに設定されます。
- 従業員の詳細 ヘッダーの [ 従業員の追加 ] ボタンをクリックすると、現在のレコードが保存され、新しいレコードにフォーカスが設定されます。