- ベストアンサー
アクセスのクエリの”ここ”を理解したい。(IDの自動入力について)
アクセスでクエリだけをつかって(VBAをつかわず)簡易システムを作りたいのですが、下記のことについて教えてください。理解した上で”確信”を持ちたいのです。下図のわかりにくい質問図で申し訳ありません。 ************************************************* (クエリデザインビュー) 『備考入力クエリ』 《テーブル名:備考》.............《テーブル名:名簿》 ....... ID ...... ←----..........ID 備考1 氏名 備考2 住所 ************************************************* フィールド: ID 氏名 住所 備考1 備考2 テー ブル:名簿 名簿 名簿 備考 備考 ************************************************* とクエリを作成したときに、クエリ上で、「備考1」「備考2」に入力すると、結果的にテーブルの「備考」のIDにはクエリの連結したもの(テーブル:名簿のID)が自動入力される。このような理解にたった前提で簡易システムを構築しても間違いないでしょうか?私が試した限りではそうなるのですが、何故できたのか偶然の発見で、確信がないのです。それでこの考え方の正誤について教えてください。ここでつまづくとすべてが狂ってしまいそうで・・・。よろしくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
いまいちふたつのテーブルを作る理由がわからないのですが、とりあえず連結はされています。 ただちゃんとリレーショナルシップを設定したほうが良いと思います。この場合このクリエでは連結されていますが、他の画面では連結されません。(つまりこのクリエを元に作るのであれば連結は適応されるが、またテーブルから作ったクエリには連結が反映されず、もう一度同じ連結をしなくてはならない) 備考テーブルのIDについては同じIDが何度も出るようになっているのでしょうか? それなら1対多のリレーショナルシップを設定しないといけませんし、名簿テーブルと一対一ならなぜテーブルで一緒にしてないのかがよくわかりません。(わけないといけない理由があるんですか?) 基本的には最終的にどうしたいかで連結やテーブルの項目を作っていかなくてはいけないので、最終的にどのようにしたいのかさしさわりないあたりで聞きたいのですが。。。
その他の回答 (5)
- asuka546
- ベストアンサー率21% (21/99)
#1です。 >その上で、Bさんが、クエリで必要フィールドを加工して検索、備考の入力もれチェック(抽出)等クエリで行うつもりです。 結局Bさんがクエリを使って抽出したいのでアクセスにしたいということでしょうか。 名簿をインポートするということでしたが、名簿がエクセルデータのうちにエクセルデータとして名簿に備考を追加することは出来ないのですか? それとも備考入力をフォームにして入力しやすくしたいのでしょうか? 名簿データの横に題名だけつけた備考欄をつくりデータ自体は空欄にしておきましょう。(実際備考欄作らなくてもインポートできるかも) それでインポートし、そのテーブルを元にフォームを作っておいて入力してはいかがでしょうか? 追加のものがあればエクセルデータの名簿をコピーしていらないデータを削除するなり、エクセルのほうを加工したほうがいいと思います。 あとやはりテーブルはふたついらないですね。他のテーブルがあって連結が必要ならリレーションシップはしたほうが良いと思われます。
お礼
出張にひきつづいての年末年始のネット環境に無い状況でしたので、お礼が遅くなりました。ありがとうございます。 実は、ここでは、シンプルにして「備考」という形でご質問したのですが、実際には担当Bさんが入力する項目(フィールド)がたくさんあり、エクセルの元データの名簿担当者にさわられたくない項目なのです。(エクセルの元データには入れておきたくない項目)そこでテーブルをわけようとしていたのです。 再考してみます。私も今混乱気味^^;
- Dxak
- ベストアンサー率34% (510/1465)
#3です。 > (1)「←」は結合の方法です。クエリ上の結合だけで、 > リレーショナルは組んでいません。(リレーショナル > はやはり、したほうがよかったのでしょうか?) リレーショナルは、できれば組んだほうがよいでしょう。 検索速度等が違うそうですが・・・六千件あたりでは実質変わった気がしません。 > (2)初心者でよくわからない・・・ と、言うのは解決済みってことで?
お礼
出張にひきつづいての年末年始のネット環境に無い状況でしたので、お礼が遅くなりました。ありがとうございます。 再考してみます。 (2)については、私としては解決していると思っているのですが、不安でもあります。が、ひとまずこのまま進めてみようかと考えています。いろいろありがとうございました。
s_husky です。 エクセルに備考欄が無い場合は、空欄でインポートされます。
お礼
出張にひきつづいての年末年始のネット環境に無い状況でしたので、お礼が遅くなりました。ありがとうございます。再考してみます。
- Dxak
- ベストアンサー率34% (510/1465)
よ~く読み込めませんが・・・「←」って結合の方法? 名簿と備考を「1対多」で結合しているのでしょうか? 当結合で「VBA」なしだとすると、名簿が新規テーブルで、備考のテーブルのみ入力した時、連結すべきIDが生成できずに、浮いたデータになりそうです。 その辺は何か工夫するのでしょうか? (備考があるフォームはレコード追加不可にしておくとか・・・?) 他のところは、取得すべき名簿テーブルのIDが値を保持していれば、備考側のIDは引用する値があるので大丈夫だと思いますが・・・。
補足
お世話になります。アドバイスありがとうございます。わかりにくくて申し訳ありません^^; (1)「←」は結合の方法です。クエリ上の結合だけで、リレーショナルは組んでいません。(リレーショナルはやはり、したほうがよかったのでしょうか?) (2)初心者でよくわからないのですが、以前「教えてgoo」いただいたフォームの工夫で備考入力は浮いたデータが出ないようにできそうです。
「この考え方の正誤」の’この’が、テーブル構造全体を指すのであれば誤りです。リレーショナルデータベースの設計の根幹に関わるので敢えて指摘しておきます。文面のみで判断すると、表の分割は不要だからです。
補足
アドバイスありがとうございます。 #1さんのアドバイスでも表の分割は不要とありましたので、今、考えなおしています。 前提として、名簿はエクセルから毎月インポートで更新。備考入力は別担当者が入力というものです。 そこで、アクセスのテーブルにエクセルの名簿に無い「備考」フィールドを持ったままその他のエクセルの名簿フィールドを更新することができるのでしょうか?補足内容の表現力が稚拙で申し訳ありません。私の迷い(混乱?)に近い質問事項をご理解いただけますならば続けてご指導お願いいたします。
補足
ご回答ありがとうございます。以下補足事項についてなお、ご指導いただけますなら幸いです。よろしくお願いいたします。 (1) テーブルを2つ作る理由:名簿は、エクセルファイルからのインポートです。担当Aさんが作成したものを時々アクセステーブルでも更新する考え方です。 (2)備考IDは、一回限りの前提です。こちらは担当Bさんが入力します。 その上で、Bさんが、クエリで必要フィールドを加工して検索、備考の入力もれチェック(抽出)等クエリで行うつもりです。 ※リレーショナルシップをやはり組んだほうがよいでしょうか?