メイン コンテンツへスキップ
サポート
Microsoft アカウントでサインイン
サインインまたはアカウントを作成してください。
こんにちは、
別のアカウントを選択してください。
複数のアカウントがあります
サインインに使用するアカウントを選択してください。

以下のトピックを選択して、Northwind Developer Edition の 従業員 について学習します。 

従業員には、リストおよび詳細フォームとして機能する 1 つの分割フォームがあります。 

従業員を使用して新しい従業員を追加し、既存の従業員に関する情報を更新します。 

リボンの [ 従業員] タブを選択すると、[従業員一覧] フォームに従業員が表示されます。 frmEmployeeList は、次の機能を備えた分割フォームです。 

  • フォームの上部は、1 人の従業員の 1 つのビューです。

  • フォームの下部は、すべての従業員のデータシート ビューです。

  • どちらの部分でも従業員を選択すると、分割フォームの他の部分でその従業員にフォーカスが設定されます。

  • 分割フォームのいずれかの部分で、従業員を追加、編集、または削除できます。

  • データシート ビュー パーツで分割フォームを使用すると、フォームのレコード ソースに複数のレコードがあることを前提としています。

分割フォームの潜在的なパフォーマンスへの影響 

ほとんどの開発者は、フィルター処理されていないテーブルまたはクエリをフォームのレコードソースとして読み込 まない 方が好きです。 フォームを 1 つのレコードにフィルター処理すると、テーブルからフォームに転送されるデータの量が最小限に抑えられます。 ローカル Access テーブルでは、フィルター処理されたレコード ソースとフィルター処理されていない小さなレコードソースの読み込みの違いが目立つ可能性があります。 ただし、Access テーブルがリモートのサーバー ベースのデータベース (SQL Server など) に置き換えられると、このパフォーマンスは失われます。 

Northwind の従業員テーブルはあまり大きくなってはいけないので、フィルター処理されていないレコードソースの候補です。 ただし、注文の詳細など、他のテーブルにバインドされたフォームは、何千ものレコードに拡張される可能性があります。フィルター処理されていないレコードソースの候補ではありません。
 

従業員の編集

分割フォームでレコードを追加または編集する場合、ユーザーはフォーム ビューまたはデータシート ビューで値を入力できます。 必要なフィールドもあれば、省略可能なフィールドもあります。 フォームは、必須フィールドに値が存在していることを検証します。 以下の 「必須フィールドの検証」を 参照してください。

ルックアップ テーブル、値リスト、ドロップダウン コントロール

  • [ タイトル ] ドロップダウンは、事前に選択したタイトルの一覧にエントリを制限します。 タイトルは、タイトルと呼ばれる ルックアップ テーブル 内にあります

  • 一部の予想される選択肢は既にルックアップ テーブルに格納されていますが、ユーザーはコンボボックスまたはドロップダウン コントロールの既定の Access 動作を使用して、ルックアップ テーブルに新しいタイトルを追加できます。

    • [タイトル] コンボ ボックスの [リストに制限] プロパティが [はい] に設定され、[タイトル] の編集フォームは [リスト アイテムの編集フォーム] プロパティで識別されます。 フォームのドロップダウンを選択すると、下端に編集アイコンが表示されます。 
      ...

編集アイコンをクリックすると、 タイトル の編集フォーム frmEmployeeTitles が開きます。ここで、承認されたタイトルの一覧を変更または追加できます。 

メモ:ほとんどの運用環境では、タイトルの編集または追加は、強化された特権を持つユーザーに限定されます。
 

Self-Referential ルックアップ フィールド

従業員関数は、Self-Referential ID フィールドの概念を示しています。 従業員の上司の指定をサポートするために、テーブルには、他の従業員の EmployeeID が含まれる SupervisorIDフィールドがあります。 上司を指定するために、別の 従業員の EmployeeID がこのフィールドに入力されます。 Access では、このリレーションシップに対して参照整合性が適用されます。

SupervisorID は、ドロップダウンまたはコンボ ボックスとして従業員フォームに実装されます。その行ソースは、Employee テーブルからフィルター処理されたレコードのセットです。 これは自己参照であるため、クエリでは選択した従業員の EmployeeID を除外する必要があります。 たとえば、Employee カレン FinsterSupervisorID の行ソースには、カレン自身の EmployeeID は含まれません。 彼女は自分の上司になれない。

添付ファイルのフィールドとコントロール

従業員の画像は、テーブルの添付ファイル フィールドに格納されます。 添付ファイル フィールドの既定の Access 動作を使用して、新しいイメージを追加するか、既存のイメージを変更します。 
...

注: Access の機能を示すために 、Employee テーブルに添付ファイル フィールドを含めます。 埋め込みイメージは accdb の サイズを大きくするため、ベスト プラクティスとは見なされません。 運用環境のアプリケーションに実装する前に、環境を慎重に評価してください。 推奨される方法は、すべてのイメージを格納するネットワーク フォルダーと、添付ファイル フィールドではなく、イメージへのパスを含むテーブル内のテキスト フィールド内のリンク です

関連情報を含むサブフォーム

[受注] サブフォーム ([従業員] フォームの右側) には、従業員によって処理された最近の注文 (ある場合) が表示されます。 サブフォームには、データシート ビューの注文が一覧表示され、最新から最も古い順に並べ替えられます。 その従業員の既存の注文を編集するには、[受注] サブフォームでハイパーリンクされた注文 ID # をクリックします。

従業員フォームのレコードソース

qryEmployees というクエリは、フォーム内のレコードを返します。 通常、テーブルではなくクエリを使用することがベスト プラクティスと見なされます。 クエリは、1 つのテーブルからのみレコードを返します。 さらに、クエリをパラメーター化して、返されるレコードの数を制限できます。 

  • このクエリの Select 句では、ワイルドカード '*' を使用して Employee テーブルからすべてのフィールドを返します。

  • クエリの 2 つの計算フィールドは 、FirstName LastNameLastName、FirstName を返します
     

コントロールの計算値

注: 計算フィールドはテーブルに格納 されません 。 ただし、これらはフォームのレコードソースで使用できます

[従業員] フォームのほとんどのコントロールは [有効] であるため、マウスまたはタブで選択でき、編集できるように [ロックされていません] になっています。 

組み込みのアクセス動作に加えて、フォーム、フォームのコントロール、およびスタンドアロン モジュールの VBA サブと関数は、従業員に必要な基本的なロジックを実行します。 次のセクションでは、関数と、それらの関数を実装するコードについて説明します。 

組み込みのコントロール アクション

フォームのレコード セレクターの既定の動作: 

  • 1 つのビューでフォームの左側にあるレコード セレクターを左クリックすると、現在のレコードが編集内容と共に保存されます。 レコード セレクターを左クリックして保存すると、適切な VBA サブと関数がトリガーされます。

  • 単一ビューでフォームの左側にあるレコード セレクターを右クリックすると、メニューがポップアップ表示され、レコードの切り取り、コピー、貼り付けなどのアクションが実行されます。 レコードを削除または切断すると、以下で説明する EmployeeCanBeDeleted 関数がトリガーされます

  • この既定の動作を使用できるようにするには、フォームのレコード セレクターを有効にする必要があります。
     

フォーム内のレコードの参照整合性

参照整合性を使用すると、関連テーブルに Child レコードを持つ従業員を削除できなくなります。 そのため、ユーザーが子レコードを含むレコードを削除しようとすると、Access によってエラーが発生します。 Northwind Employee フォーム Access は、参照整合性に関する一般的な既定のエラー メッセージをカスタム メッセージに置き換えます。

フォームの Delete プロシージャのコードは、右クリック メニューから レコードを切り取るか、 Delete キーを使用してレコードを削除する試行に応答します。 

プライベート関数 EmployeeCanBeDeleted は、 注文発注書従業員、従業員特権の各テーブルで、その従業員の関連レコード チェックします。 

見つかった場合、この関数は既定のエラー メッセージを抑制し、Customer フォームが 顧客 を削除できない理由をユーザーに通知するために使用するのと同じ汎用ダイアログを使用して、レコードを削除できない 理由をユーザーに通知します。

検証

従業員は、検証と標準エラー処理を実装します。 コントロールには 2 種類の検証があります。

  • 必須フィールド

  • 標準形式

必須フィールドの検証

 すべての従業員には、次の 3 つのフィールドが必要です。

  • First Name

  • Last Name

  • 役職

この開発者バージョンでは、フォームの 更新前イベントによって必須フィールドが検証されます。 ユーザーが値検証を持たない 1 つ以上の必須フィールドの値なしで従業員レコードを保存しようとすると、保存が取り消され、値を持たない必須フィールドが強調表示されます。 Northwind の Employee フォームでは、必須フィールドの検証は、個々のコントロールではなく、フォームの Before Update イベントによって処理されます。

Employee フォームの Before Update イベントは、3 つの必須フィールドの値の存在を検証します。 新しい従業員レコードまたは編集された従業員レコードを保存すると、フォームの Before Update イベントが発生します。これは、必要な値の有無をチェックし、応答する Public Functions を呼び出します。

modValidation モジュールには、次の関数が含まれています。

  • ValidateForm

  • IsValidForm

  • HighlightInvalidControls

  • HighlightControl

  • ValidateForm_RemoveHighlights

新入社員の管理

[従業員の 追加] ボタンをクリックすると、次の目的でプライベート サブ btnNewEmployee_Clickが実行されます。 

  • 現在のレコードを保存し、

  • フォームのフォーカスを新しいレコード
    に設定する '

Select クエリのワイルドカードフィールドと名前付きフィールド

qryEmployeesSELECT 句では、ワイルドカード文字 "*" を使用して、テーブル内のすべてのフィールドを選択します。 ワイルドカード クエリデザインには、基になるテーブルから新しく追加されたフィールドが自動的に含まれます。これは、特定のフィールドの一覧では使用できません。 一方、特定のフィールドを一覧表示して、返される レコードセット を、たとえば、表示のみのフォームで必要なフィールドのみに制限する場合があります。

適切な設計の選択

設計は、要件に適したアプローチに基づいている必要があります。 ただし、可能な場合、優先設定は通常、将来のメンテナンスを必要とする可能性が最も低いアプローチ (ワイルドカードアプローチ) に進みます。 

ルックアップ テーブルにバインドされた ComboBoxes — 2 つのアプローチ

従業員の上司などの関連項目は、フォームのドロップダウンまたはコンボボックスに表示されます。 そのフィールドは外部キー フィールド ( SupervisorID ) にバインドされているため、フォームの レコードソース クエリでは SupervisorID の外部キーのみが必要です。 コンボボックスには、対応するテキスト値も表示されます。

非表示の ID 列と表示される Description 列を含む 2 列のコンボボックスを使用すると、この機能が機能します。 従業員フォームでは、Supervisor コンボボックスは単純な 2 列クエリにバインドされます。 スーパーバイザーの RowSource プロパティを参照してください。

ただし、場合によっては、ルックアップ テーブルに個別の主キーがないため、テキスト値自体が主キーになります。

従業員のタイトルなど、可能な値の一覧が小さく、非常に安定している場合は、多くの場合、クローズド ドメインと呼ばれます。 Title の値の変更や追加は一般的ではありません。 Closed Domain ルックアップ テーブルは、1 列クエリアプローチの候補です。

[従業員] フォームの [タイトル] コンボ ボックスは、タイトルの 1 列クエリにバインドされます。 タイトルの RowSource プロパティを参照してください。 

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。

この情報は役に立ちましたか?

言語の品質にどの程度満足していますか?
どのような要因がお客様の操作性に影響しましたか?
[送信] を押すと、Microsoft の製品とサービスの改善にフィードバックが使用されます。 IT 管理者はこのデータを収集できます。 プライバシーに関する声明。

フィードバックをいただき、ありがとうございます。

×