dポイントプレゼントキャンペーン実施中!

Accessにて、
テーブルA(個人情報)
●個人コード
●名前
●住所
 ・
 ・

テーブルB(個人ごとの数量管理)
●個人コード
●数量

上記のようなテーブルがあるとします。
これは、1:1のリレーションシップにしたいのですが、

クエリAを作成して
●個人コード(テーブルB)
●名前(テーブルA)
●数量(テーブルB)
個人コードを入力すると、名前を参照するというふうに
したいのですが、1:1のリレーションシップだと個人コードの入力時に
参照はできないのでしょうか?
一旦閉じて、開くと参照していますが・・・。
良いご意見がありましたら、よろしくお願いします。

A 回答 (6件)

またまた#2です。



UPDATE テーブルA INNER JOIN テーブルB ON テーブルA.個人コード = テーブルB.個人コード SET テーブルA.数量 = [テーブルB].[数量];

この更新クエリーでEXCELからインポートしたデータに基づきテーブルAの数量を更新する事が
出来ると思いますよ。
ちなみにEXCELからインポートしたデータテーブルはテーブルBとしています。
    • good
    • 0
この回答へのお礼

お返事おそくなりすみません。
何度もご回答ありがとうございました。

お礼日時:2005/10/19 09:26

個人コードを入力するフォームがあると思うのですが、そのフォームのテキストボックスなどの値をクエリーの抽出条件にすればいいとおもいます。


1.デザインモードで個人コードの抽出条件のところで右クリックして
  「ビルド」を選びます。
2.フォームのテキストボックスの値を選択します。
3.保存ボタンを押して閉じてください。

再びクエリを開いたら「[Forms]![フォーム1]![テキスト0]」などが追加されていると思います。
これは、フォーム1にあるテキスト0の値を抽出条件にするということです。
忘れずにテキスト0の書式でデータの型をテーブルの型とあわせておいてくださいね。
    • good
    • 0
この回答へのお礼

お返事遅くなりすみません。
何度もご回答いただきありがとうございました。

お礼日時:2005/10/19 09:27

#2です。


つまりはEXCELで作成したデータをインポートしてテーブルAに反映したいという事でしょうか?
それであればテーブルAにやはり数量フィールドを追加してEXCELのデータをインポート後に
更新クエリーで一気に更新してしまえば入力の手間がなくなるのではないですか?
根本的な考え方がずれていたらすみません。

この回答への補足

何度もありがとうございます。
テーブルAに追加することも考えたのですが、

テーブルA
●個人コード
●氏名
 ・
 ・
のように複数のフィールドがあります。

Excelでは、
●個人コード
●数量
の2つのフィールドのみです。

テーブルAには、約7000件。
Excelのデータは、テーブルAの件数すべての数量があるというわけではなく、
1000件弱程度です。
そのため、Excelのデータを別のテーブルにインポートし、
1:1のリレーションにしようと思いました。
更新クエリではできないかと思ったのですが、いかがでしょうか?

補足日時:2005/10/12 08:57
    • good
    • 0

テーブルAとテーブルBの個人コードが一意で等価ということですね。


テーブルA(個人情報)
●個人コード [00001]
●名前 [yastak]
●住所 [Japan]
 ・
 ・

テーブルB(個人ごとの数量管理)
●個人コード [00001]
●数量 [100]
select B!個人コード,A!名前,B!数量
from テーブルA as A inner join テーブルB as B
on A!個人コード!=B!個人コード where B!個人コード="00001";
・selectの後のB!個人コード,A!名前,B!数量は
 抽出フィールド名です
・inner joinの後は等価結合するテーブル名、ONの後は
結合するフィールドを書いています
・where の後は抽出条件を書いています。入力した値を抽出条件にすれば任意のデータを取り出すことが出来ます。
データがある場合は、
where句に"00001"を設定すれば
00001,yastak,100の答えが帰ってきますよ。

この回答への補足

何度もありがとうございます。
テーブルAは、数千件のデータがあり、テーブルBは、千件程度のデータがあります。
クエリにて、個人データの入力をするのも、1件ではないので、
固定の個人コードを設定することはできません。
入力した個人コードに対して、その都度テーブルAより
名前を表示させるようにしたいのですが。

補足日時:2005/10/11 16:40
    • good
    • 0

まず、一対一なら何故テーブルAのフィールドに取り込まないのか?の疑問はあるものの・・・。



テーブルBの個人コードにコードを入力した時に、該当するコードがテーブルAにある場合
テーブルAに登録されている名前を参照したいという事でよろしいですよね?
入力後すぐに参照値を反映したいというのであれば、再クエリーが必要です。
手動で行う場合は、シフト+F9です。
クエリーから直接入力をするのであれば、手動のこの方法で再クエリーを実行するしかありません。
しかし、このクエリーをレコードソースとしたフォームから入力するのであれば、
個人コードの更新後処理でDoCmd.Requeryを実行すれば個人コードから移動する瞬間に
自動的に再クエリーされて名前を表示する事が出来ます。

でも、一般的にこういった一対一は使わないですよ?
    • good
    • 0
この回答へのお礼

ありがとうございました。
フォームにて使いたいと思います。
通常は、このようなテーブルAの中にすべて入れるべきなのでしょうが、
あるシステムで、テーブルA(個人のデータが入っているマスタ)があり
この、個人コードを利用して、Excelにて個人ごとのデータを入力したリストがあります。
テーブルAに、フィールドを追加し、手入力するには件数が多いので
この様にしてしまいましたが、
テーブルの作り方で、他に良い方法がありましたら、お願いいたします。

お礼日時:2005/10/11 16:28

クエリーの作り方で抽出がおかしくなっていませんか?


SQLのモードに変更して(画面の一番左上です)
select B!個人コード,A!名前,B!数量
from テーブルA as A inner join テーブルB as B
on A!個人コード!=B!個人コード where B!個人コード="XXXXXXXXX";

テーブルBの個人コードをWhere句に入力するように組んでやれば動くと思うのですが?(動かなかったらヘルプでデバッグしてね^^;)

それから個人コードと名前が1:1になるようにしたいなら、データの重複には十分注意してください。プライマリーキー設定をして一意にしておかなければ一つの個人コードで複数の名前がヒットしたりしますよ。
(Nullももちろんだめです。)

この回答への補足

早速、ありがとうございます。
個人コードと名前が1:1という部分がよく分からないのですが・・・。
テーブルAとテーブルBの個人コードが1:1になるようにしていて、
クエリを作成したときに、個人コードを入力(テーブルB)すると、
テーブルAより名前を参照させるようにしたいのですが、
質問の仕方が悪かったでしょうか・・・。

Where句で書いていただいている"xxxxxx"の部分もなにを書いたらいいのかよくわからないので
補足をよろしくお願いします。

補足日時:2005/10/11 14:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!