?[お世話になっております。Access初心者です。
すみませんが至急で作成したいDatabaseのため、どうか以下ご教示お願い致します。
①質問内容
複数のテーブルをクエリ「Q_入力フォーム」で結合し、
そのクエリから作成した入力用のフォームがあるのですが全く動きません。
リレーションシップの結合の種類や結び方が間違っているのかなと思いますが、
素人なのでどこが違っているのか分かりません・・
図を添付しているので、正しい設定を教えて頂けますでしょうか。
●作りたいフォーム
お客様IDだけを入力すると、紐づけされた複数のテーブルのお客様情報が自動で表示され、
そこに手入力でデータを入れて保存していきたい。
フォームで保存したレコードは「T_入力用」のレコードに追加されていくようにしたい。
●テーブルについて
リレーションシップを結んでいる箇所は「データ型」「フィールドサイズ」「書式」を統一しています。
データ型は全て「短いテキスト」にしています。
【T_入力用】
→フォームで入力したレコードの保存をするところです。
【T_入力用_入力者名】
→フォームでドロップボックスに紐づける選択肢をレコードに入れています。
【T_顧客情報_日本支社】
→「T_入力用」テーブルIDと紐づけしたいマスタテーブルです。
【T_顧客情報_海外本社】
→「T_入力用」テーブルIDと紐づけしたいマスタテーブルです。
ここで紐づけに使っているIDのデータは参照照合性不可・重複あり空白ありのIDデータです。
【T_顧客情報_海外担当者】
→「T_入力用」テーブルIDと紐づけしたいマスタテーブルです。
ここで紐づけに使っているIDのデータは参照照合性不可・重複あり空白ありのIDデータです。
●クエリについて
以下テーブルを組み合わせて作っています。
フォームを作成するために作りました。
・T_入力用
・T_顧客情報_日本支社
・T_顧客情報_海外本社
・T_顧客情報_海外担当者
②質問内容
出来上がったフォームに新たにテキストボックスを追加し、
そこに別テーブルにあるフィールドを関数かなにかで表示させたいのですが
うまくいかなかったので関数式をご教示いただけますでしょうか。
初心者のため不足点あったらすみません。恐れ入りますが何卒宜しくお願い致します。](https://d.kuku.lu/077b313775)
入力用のフォームで入力できないということでしょうか。
レコードソースのクエリで入力できますか。もし、クエリでできないならクエリの設計あるいはテーブルの設計が間違っています。
テーブルを結合するとき、少なくともどちらかのフィールドは主キー(あるいは重複不可のイデックス)である必要があります。画像をみるとそうなってない結合があります。
テーブル設計から見直す必要がありまそうです。
とりあえずは主キーがないテーブルは主キーを設定しましょう。
それと一対一の関係のテーブルは一つのテーブルにまとめるべきです。
気になったのはテーブルはデータ内容を表すものすべきだと思いますが、「T_入力用」という名称では何のデータを扱うテーブルか分かりません。「T_案件」とかデータ内容を表すものに変えたほうがいいでしょう。
※先ほど間違えて投稿してしまいました。内容は無視してください。すみません。
以下が正しいお返事です↓
分かりやすいご教示をいただき、大変ありがとうございます。
確認したところクエリで入力できませんでしたので、ご指摘のとおりテーブルのデータの中身の問題なんですね‥
またご指摘頂いたテーブルなのですが、一対一ではなく、
T_顧客情報_海外本社の”担当者”と、T_顧客情報_海外担当者の”海外担当社”どちらも空白があったり重複があったりする
データのテーブルです。この2つのテーブルに関してはIDで照合して、
同じIDのものがもしあれば参照表示したい・・なければ仕方ないといった感じです。
この場合のリレーションシップはどのように紐づけたらいいか、ご教示いただけますでしょうか。
※この2つのテーブルを追加してからフォームの動作が停止することが分かりました。
また「T_入力用」という名称のテーブルは、日々の業務の中でフォームを利用してデータ登録をしていき
そのデータログを貯めていくために作成しました。
分かりにくくすみません。日々の業務内容を更新型でなく、新規レコードとして保存していき
その貯めたデータは定期的にエクスポートしたいです。
理想のフォームで入力したデータを保存する場所が欲しいのですが、正しい保存場所の作成方法をご教示頂けますでしょうか。
何度も大変恐れ入りますが、宜しくお願い致します。
理想のフォーム:https://d.kuku.lu/004bfc7c3b
この掲示板は画像をアップロードできますので、リンクではなくアップロードして表示させてください。
リンク先の画像をダウンロードしてここにアップロードしておきます。
五月雨式にすみません‥
T_顧客情報_海外本社の”担当者”と、T_顧客情報_海外担当者の”海外担当社”どちらも空白があったり重複があったりすると上記で説明しましたが間違えました。正しくはT_顧客情報_海外本社の”ID”と、T_顧客情報_海外担当者の”海外ID”です。一対一ではなく、上記IDは空白や重複などあり主キーを設定できません
テーブル名とフィールド名から推測するとデータは下記のような関係かとおもいます。
「T_顧客情報_日本支社」と「T_顧客情報_海外本社」は一対一の関係のはずです。
本社が複数あるのは考えられないので。
一対一関係のデータは一つのテーブルに纏めます。
T_顧客情報
顧客ID 主キー
会社名
英語表記
購入サイクル
海外本社名
国名
日本支社担当者、海外担当者 はそれぞれ複数ある場合があるということなので、上記のデータとは一対多の関係になります。
T_国内担当者
国内担当者ID 主キー
顧客ID
担当者名
T_海外担当者
海外担当者ID 主キー
顧客ID
担当者名
テーブルをこのように変更して、同じフィールド名同士でリレーションシップを設定してクエリを作成すれば入力可能なクエリになるはずです。
データベースのテーブルの設計には「正規化」というセオリーがあります。まずは、これについて理解をしておいてください。
下記のページの「正規化」の項目の説明が分かりやすいと思います。他にもWEB検索すると解説ページが見つかりますので分かり安そうなページを読んで理解を深めておくことをお勧めします。