激凹みから立ち直る方法

Access初心者です。
このたび、社内のシステムが使えなくなってしまったため、急遽accessでシステムを作ることになりました。
データは各市町村から各市町村の距離(キロ数)で検索のみ使えればOKです。
例えば、大田区から水戸市までの距離とか、
千代田区からさいたま市までの距離とか、そういうデータが恐らく1万件近くあります。

都道府県、市区町村のコード化するテーブルと
各市町村から各市町村までの距離を格納するテーブル
そういう構造しかないでしょうか?
そうすると各市町村毎テーブル作らなくてはならないと思うのでテーブル数が膨大になってしまいます。

フォームの構造としては、
例えばテキストボックスに千代田区と入力すると
千代田区から各市町村のキロ数一覧が出るようにしたいのですが

テーブル構造としてはどういうテーブル構造がいいでしょうか?

よろしくお願いします。

A 回答 (3件)

>そういうデータが恐らく1万件近くあります。


↑このデータ次第のように思えます。
#1 さんの方法の他に、
たとえば、
Address1 Address2 Distance
Tokyo   Oosaka    10
Tokyo   Chiba     1
Tokyo   Kanagawa    2
Oosaka   Chiba     5

の様ならパラメータクエリで
図のようにしておけば、データが
Tokyo  Oosaka    10 でも
Oosaka  Tokyo    10 でも問題ありません。
また起点/終点どちらかを未入力なら、
入力した方の一覧が出て来るかと。
で、パラメータ部分([起点は?]、[終点は?])を
フォームのテキストボックスに変更すれば・・・。

なにはともあれ、元データ次第のような気がします。
「Accessテーブル構造について。」の回答画像3
    • good
    • 0

何か勘違いがあるようなので


各市町村から各市町村までの距離を格納するテーブル
 フィールド名
 出発地コード
 到着地コード
 距離
のひとつのテーブルです。例えば、出発地コードに 千代田区のコードを入れると
条件の一致したデータの一覧が出るように絞り込みのクエリーを作成します。
テーブルは、2つで済むはず。

>データは各市町村から各市町村の距離(キロ数)で検索のみ使えればOKです。
ネット上のMapか何かで調べた方が楽で早くないですか。
http://www.mapfan.com/routemap/routeset.cgi
などで
    • good
    • 0

>各市町村から各市町村までの距離を格納するテーブル


>そういう構造しかないでしょうか?
私がつくるならそうします。でも、
>そうすると各市町村毎テーブル作らなくてはならないと思うのでテーブル数が膨大になってしまいます。
これがよくわからないんですが、なんでそう思うのですか?
その距離を格納するテーブルにその1万件近くのレコードをただ放り込めばいいじゃないですか。

ところで余計な話になるかもしれませんが・・・・
テーブルはどうしても「AからBへの距離」というレコードの集まりになりますが、検索するときにクエリーで面倒なことをしたくなければ、「AからBへの距離」と「BからAへの距離」と必ず2レコード一組で作るようにしてもいいわけです。
ただ、これは必ず2レコード一組になるように、新規のレコードを入力するときに工夫が要ります。また、2レコードの距離が同じであるかどうかチェックする仕組みもいるかもれません。
えらく面倒でメンテナンス性も悪いと思いますが、検索するには普通の選択クエリ一発で検索できるという利点はあります。

私がやるとすれば「AからBへの距離」というレコードだけ集めて、二重にレコードは持たないように作ると思います。しかし、この場合A-B間の距離が欲しい場合は、出発点がAで行先がBのレコードを検索して、それとは別に出発点時Bで行先がAのレコードを検索するというように、二度検索する必要があります。
これをやるとすれば、一つの方法としては出力フォームに2つ窓を作って(2つのサブフォームを作って)見せる方法があります。ただ使う側からすれば多少奇妙にはみえるでしょう。東京から各地点の距離を知りたいのに、二つの窓から探さなきゃいけないのですから。
あるいは出発点がAで行先がBのレコードの集まりと出発点時Bで行先がAのレコードの集まりをユニオンクエリで一つのレコードの集まりにしてしまう方法があります。私ならこのやり方を採用します。ただ、ユニオンクエリはSQLで書かなきゃいけないんで、初心者向きかといぶかる人もいないとは限りません。でもこの場合はそこらじゅにあるユニオンクエリのお手本通りのものになるはずですから、大したことはないと思いますけどね。
    • good
    • 0

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

関連するカテゴリからQ&Aを探す