• ベストアンサー

アクセス クエリー・フォーム作成について

今アクセスで”台帳”なるものを作成しています。 クエリーで式等を入れ込んで、それを用いてフォームで入力画面を作成したのですが、テストデータはその場面で見れるものの新しいデータを入力する事が出来ません。 クエリー構造にどうやら問題があるみたいなのですが、色々試してみたものの答えが出ません。 基本的なクエリーの作成方法・想定されるミス等を教えてください。 お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • klub
  • ベストアンサー率36% (14/38)
回答No.5

<主テーブル>   <マスター>    :          I D    部 署   ⇒  部 署 主キー   年 数   ⇒  年 数 主キー    :          率 ということができないとのことですが マスタの部署と年数を2つ選択して「編集」→「主キー」で設定できます。(又は鍵のマーク)1つずつ主キーに設定すると、前のが消えてしまいますよ。 又リレーションも1つずつ線を引っ張ると2つ目で「リレーションシップが既に設定されています」とでます。 そこで「はい」を選択して。編集画面にて2つ目のリレーションを表内で組んでください。 これで完成です! ちなみにマスタのIDは何のためにあるのでしょうか、削除したりするためのキーとして持っているのでしょうか? そのIDが別テーブルに保存されないものであったり、削除、検索などしないのであれば、特にいらないのでは?

yn501215
質問者

お礼

アドバイスありがとうございます。 おっしゃられたようにするとマスター上で2つの主キーを設定する事が出来ました。 リレーションを設定しようとしたら2つともの主キーにエラー[主テーブルで参照されているフィールド用の固定インデックスが見つかりません]とでて設定する事が出来ません。 ちゃんと調べてないのでそこからやってみます。 それからマスターのIDは一つの部署に年数が何種類も存在するので設定しないといけないのかなと思い設定しました。(そう教えられました。会社の人に) IDを削除しても動いているので削除したままいこうと思います。

その他の回答 (4)

  • klub
  • ベストアンサー率36% (14/38)
回答No.4

<主テーブル>   <マスター>   部署    ⇒  部署   年数    ⇒  年数   年金率      上記2条件から率を出す 別にこのようなリレーションは普通だと思います。 ところでマスターには 営業課 1年 **% 営業課 2年 **% 総務課 1年 **% 総務課 2年 **% などというようになっているんですか? そうであればマスタの部署と年数を2つとも主キーにしてしまえば1対多になるので通常の矛盾無しダイナセットで主テーブルは更新できる筈です。

yn501215
質問者

お礼

ありがとうございます。 一つ例で書き忘れていたのですが、IDを<マスター>の方に持たせていました。 教えていただいたように<マスター>のプロパティーで2つ主キーを設定しようとしたら出来ませんでした。主キーの設定は一つだけとの事で。 リレーション画面で”部署”と”年数”でそれぞれ1対多でリレーションを貼ろうとすると保存できません。 多分教えていただいている意味を私自身が理解していないからだと思うのですが。。。。 すいません。できればもう一度よろしくお願い致します。

  • klub
  • ベストアンサー率36% (14/38)
回答No.3

ACCESSのヘルプでもわかります。 (2000だったら「質問」で「クエリからのデータ更新について」で出ると思います。) ダイナセットは動的に表示されているもので スナップショットは静的に結果だけ表示しているものです。 要するにスナップショットは一回別なノートに書き写したようなもので、書き写したノートを更新しても元データは変わりませんよね。 逆にダイナセットは元データをそのまま表示しているので更新すればそのまま元データに反映されます。 わかりやすいのがダイナセットで設定されたクエリー結果を表示しておいて、別PCよりその元テーブルを書き換えると、時間がたつと自動的にクエリー結果に反映されます。 スナップショットだと別PCから書き換えられても、最初の表示状態のままです。 ダイナセットの矛盾を許すというのは、名前に「矛盾」とついているのでDBが矛盾したものになりそうだと感じてしまいますが、特に平気だと思いますよ。 確かに矛盾が発生するのですが・・・ この矛盾というのは例えば個人テーブルと趣味テーブルがそれぞれインデックス無しでIDという項目で繋がっているクエリーがあるとします。 1対1に見えますがインデックス無しなので多対多になるので入力できません。 趣味テーブルには様様な趣味の名前が入っていて、個人テーブルは個人の名前が入っています。 個人テーブルのIDには趣味テーブルのIDがあらかじめ入力されているとします。 名  前 ID       ID 趣  味  鈴木さん 3 -------- 3 サッカー 坂本さん 4 -------- 4 ゴルフ 後藤さん 1 -------- 1 釣 り こんな感じで趣味テーブルのゴルフのIDを1にしてしまうと後藤さんは2つの趣味を持つことになります。 更に坂本さんのIDを1にすると・・・もう繋がりがわけわかんなくなります。こんな矛盾を許さないようにしているのです。 でもどちらかのIDを主キーやインデックス(重複なし)にすれば1対多になるので自動的にスナップショットから入力できるダイナセットになります。 わかりますかね。説明が下手ですんません。

yn501215
質問者

お礼

解答ありがとうゴザイマス。 結論からするとこのまま入力していっても良いと言うことですね。 ただやっぱりいつかその”矛盾”に引っかかってしまった時が少し怖いです。 と言うのもこの作成しているデータベースと言うのが決算に関わる数字を算出するものだからです。 このアクセスからだした数字が間違っているとなると大変な事になるかもしれないと思うと、やはり”矛盾”のないデータベース作りをしないといけないですよね。 今のお話からいくと私のテーブル作成に問題があるように思います。 現在は下記のようなリレーションを貼っています。(例) <主テーブル>   <マスター>   部署    ⇒  部署   年数    ⇒  年数   年金率      上記2条件から率を出す すいません。あまり良い例ではないですよね。。。。 何か良い構造案ありませんでしょうか? よろしくお願い致します。

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.2

ゴメンナサイ。参考URLの追加もれです。 がんばって下さい

参考URL:
http://www.people.or.jp/~Niki/
yn501215
質問者

お礼

早々の解答ありがとうゴザイマス。 今後もつかえそうなHPアドレスで助かります。 ところで試した中でクエリーのプロパティーにある≪レコードセット≫を【ダイナセット(矛盾を許す)】にするとクエリーからデータを入力する事ができるようになりました。 訂正前は【ダイナセット】だったんですが・・・。 ≪レコードセット≫【ダイナセット】等調べてみたんですけど、今の状態でこれから入力をしていく際に何か不都合になるような事はあるのでしょうか? よろしくお願いします。

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.1

1.リレーションを張られる方のキーの有無  同じテーブルでもキー指定を有りに指定した場合と無しに指定した場合など 2.?対?  1対1、1対多、多対多でも変わります。 具体的には、自分で確認された方が勉強になると思います。 詳しくは、アクセスのマニュアルに書いてあります。 がんばって下さい 

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=152658

関連するQ&A