Accessフォームで外部キーコンボボックスをユーザーフレンドリにする方法を教えてください。
-
03-07-2019 - |
質問
2つのテーブルがあります:
Employees:
uid (number) | first_name (string) | last_name (string) | ...
Projects:
uid | project_title (string) | point_of_contact_id (FK: Employees.uid) | ...
「連絡先」を含むプロジェクト用のフォームを作成したいコンボボックス(ドロップダウン)フィールド。表示値は" first_name last_name"でなければなりません。ただし、バッキングデータはUIDです。あるものをユーザーに表示し、別のものをテーブルに保存するようにフォームを設定するにはどうすればよいですか?
full_nameフィールドを使用してビューを作成できるため、1つのフィールド(たとえば" first_name"のみ)のみを表示できれば問題ありません。
後で:
テーブルデザインレベルでこれを行う方法がある場合は、UID列ごとに設定を設定するだけでよいため(多くのテーブルがあります)、 UIDフィールドごとに1つの設定ではなく(それぞれに複数のUIDフィールドがある多くのフォームがあります)。
解決
Loesjeの答えを拡張するには、複数のフィールドを表示するときにバインドされた列プロパティと列数および列幅を使用して、データベースに書き込むフィールドをAccessに指示できるようにします。 (VBAを使用してこれを行う方法は他にもありますが、これは特定のケースで機能するはずです。)
あなたの場合、行ソースを select uid、first_name、last_name from tablename
に設定すると、行ソース(uid)の最初の列のバインド列が1になります。これはデフォルト値であるため、別のフィールドの値を保存する場合にのみ変更する必要があります。 (たとえば、上記の行ソースからlast_nameを保存する場合は、バインド列を3に設定します。)
表示している他の列の幅を設定するとき、コンボボックスのWidthプロパティは列幅の合計以上にする必要があることを忘れないでください。そうしないと、すべての列が表示されない場合があります。
テーブルに基づいたフォームが特定の列をプルする必要があること、または特定の列が外部キーであることをテーブルレベルで示す方法はありませんが、コンボボックスを他のフォームにコピーして、すべてのプロパティを保持します。行ソースクエリをコピーして、他のコンボボックスに貼り付けることもできます。
他のヒント
ドロップダウンボックスの行ソースを" select uid、first_name、lastname from tablename 'に設定し、列幅を0に設定します。これにより、最初の列の幅がゼロに設定されるため、ユーザーには表示されません。 (セミコロンで区切る他の列の幅を指定できます。つまり、0cm; 4cm; 4cm)