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

基本的なクエリーの作成方法・想定されるミス等を教えてください。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

<主テーブル>   <マスター>


   :          I D 
  部 署   ⇒  部 署 主キー
  年 数   ⇒  年 数 主キー
   :          率

ということができないとのことですが
マスタの部署と年数を2つ選択して「編集」→「主キー」で設定できます。(又は鍵のマーク)1つずつ主キーに設定すると、前のが消えてしまいますよ。

又リレーションも1つずつ線を引っ張ると2つ目で「リレーションシップが既に設定されています」とでます。
そこで「はい」を選択して。編集画面にて2つ目のリレーションを表内で組んでください。

これで完成です!

ちなみにマスタのIDは何のためにあるのでしょうか、削除したりするためのキーとして持っているのでしょうか?
そのIDが別テーブルに保存されないものであったり、削除、検索などしないのであれば、特にいらないのでは?
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
おっしゃられたようにするとマスター上で2つの主キーを設定する事が出来ました。
リレーションを設定しようとしたら2つともの主キーにエラー[主テーブルで参照されているフィールド用の固定インデックスが見つかりません]とでて設定する事が出来ません。
ちゃんと調べてないのでそこからやってみます。

それからマスターのIDは一つの部署に年数が何種類も存在するので設定しないといけないのかなと思い設定しました。(そう教えられました。会社の人に) IDを削除しても動いているので削除したままいこうと思います。

お礼日時:2001/11/01 13:13

<主テーブル>   <マスター>


  部署    ⇒  部署
  年数    ⇒  年数
  年金率      上記2条件から率を出す

別にこのようなリレーションは普通だと思います。

ところでマスターには
営業課 1年 **%
営業課 2年 **%
総務課 1年 **%
総務課 2年 **%

などというようになっているんですか?
そうであればマスタの部署と年数を2つとも主キーにしてしまえば1対多になるので通常の矛盾無しダイナセットで主テーブルは更新できる筈です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
一つ例で書き忘れていたのですが、IDを<マスター>の方に持たせていました。

教えていただいたように<マスター>のプロパティーで2つ主キーを設定しようとしたら出来ませんでした。主キーの設定は一つだけとの事で。


リレーション画面で”部署”と”年数”でそれぞれ1対多でリレーションを貼ろうとすると保存できません。

多分教えていただいている意味を私自身が理解していないからだと思うのですが。。。。

すいません。できればもう一度よろしくお願い致します。

お礼日時:2001/11/01 09:40

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対多になるので自動的にスナップショットから入力できるダイナセットになります。

わかりますかね。説明が下手ですんません。
    • good
    • 0
この回答へのお礼

解答ありがとうゴザイマス。
結論からするとこのまま入力していっても良いと言うことですね。
ただやっぱりいつかその”矛盾”に引っかかってしまった時が少し怖いです。
と言うのもこの作成しているデータベースと言うのが決算に関わる数字を算出するものだからです。 このアクセスからだした数字が間違っているとなると大変な事になるかもしれないと思うと、やはり”矛盾”のないデータベース作りをしないといけないですよね。

今のお話からいくと私のテーブル作成に問題があるように思います。
現在は下記のようなリレーションを貼っています。(例)
<主テーブル>   <マスター>
  部署    ⇒  部署
  年数    ⇒  年数
  年金率      上記2条件から率を出す

すいません。あまり良い例ではないですよね。。。。
何か良い構造案ありませんでしょうか?
よろしくお願い致します。

お礼日時:2001/10/31 17:35

ゴメンナサイ。

参考URLの追加もれです。
がんばって下さい

参考URL:http://www.people.or.jp/~Niki/
    • good
    • 0
この回答へのお礼

早々の解答ありがとうゴザイマス。
今後もつかえそうなHPアドレスで助かります。

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

お礼日時:2001/10/31 14:26

1.リレーションを張られる方のキーの有無


 同じテーブルでもキー指定を有りに指定した場合と無しに指定した場合など
2.?対?
 1対1、1対多、多対多でも変わります。

具体的には、自分で確認された方が勉強になると思います。

詳しくは、アクセスのマニュアルに書いてあります。

がんばって下さい 

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

このQ&Aに関連する人気のQ&A

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

このQ&Aと関連する良く見られている質問

QAccessでのクエリーデータ表示で重複データ非表示できますか?

Accessでのクエリー表示で重複データを非表示にする方法はありますでしょうか?

Aベストアンサー

クエリプロパティの「固有の値」を「はい」にしてください。
クエリプロパティはクエリをデザインビューで開いて右クリックで出てきます。

Q削除クエリー”更新可能なクエリーでなければなりせん”のエラー

アクセス97(W2000)
削除クエリーを実行すると、上記のようなエラーメッセージが出てきます。
行ったのは、下記のような内容です。

テーブルA:品種・商品コード
テーブルB:購入月・商品コード・単価

この2つのデーブルを、商品コードで結合します。
そして、選択クエリーで、
”購入月・品種・商品コード・単価” を表示させます。
その後、品種で”R”を設定し、抽出します。

ここまでは、抽出も出来、後は、テーブルBから”品種R”だけ、
つまり、選択した内容を削除したく、選択クエリーを削除クエリーに変更し、
実行したところ、上記のエラーが発生いたしました。

削除するテーブルを指定する、サブクエリーを使用する、
など、このままではいけない、というのはわかったのですが、
具体的な方法が、よくわかりません。

今の自分の実力では、かなりの勉強不足、と思いますが、
なにがしかのアドバイスを頂ければと、思っております。
お手数ですが、どなたか、よろしくお願い申し上げます。

Aベストアンサー

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
         ↓
購入月 品種 商品コード 単価
10    R    ABC    100
11    R    ABC    150

※テーブルBの複数件のレコードに対して、テーブルAは
 同じ1件のレコードの内容が同時に使われている

こうした 1:多 の形のクエリは「更新不可能なクエリ」になります。
(上記の例で、11月のレコードだけ消そうとしても
テーブルAのデータは10月のレコードの方にも使われているため消す事はできない
といった不整合が発生するため、更新不可とみなされる)

サブクエリを使った形にするためには
テーブルの結合は行わず、テーブルBのみを指定した削除クエリとし
商品コードの抽出条件の部分に

IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という式を埋め込んでみてください。

これならば
「テーブルAから 品種 = R の商品コードを抽出し
 テーブルBの商品コードがそれと一致するレコードを削除する」
という意味のクエリになります。

SQLビューで書くならば

DELETE FROM テーブルB
WHERE 商品コード IN(SELECT 商品コード FROM テーブルA WHERE 品種 = "R")

という形になります。

テーブルの構造からして、テーブルAには同じ商品コードを持つレコードは1件のみで
テーブルBは同じ商品コードをもつレコードが複数件存在すると思われます

この2つのテーブルを商品コードで結合すると
テーブルAとテーブルBのレコードが 1:多 の形で
繋がることになります。

 テーブルA        テーブルB
品種 商品コード   購入月 商品コード 単価
R   ABC       10    ABC    100
              11    ABC    150
       ...続きを読む

QACCESSのクエリー作成

ACCESSで別のフォルダにある
ACCESSのテーブルとリンクの設定し
クエリーを作成しました。
(同一パソコンです)

その後デザインで編集しようとすると
非常に遅くなかなかデザインが表示されず
LANケーブルを抜くと
すぐに表示されました。

ネットワークは、パソコン10台、
プリンタ2台しかなく
問題があるように思えません

早くデザインを表示させる方法
または、原因の特定する方法を
教えてください。

よろしくお願いします。

Aベストアンサー

外部のフォルダがネットワークドライブに設定されていませんか?

Q明日までに作成しないと^^; 不一致クエリー機能がついていないので困っています

こんばんは。いつもお世話になっております。Microsoft Access 2000 を使用して現在、にらめっこ状態で作業をしておりますが息詰ってしまって。。。
早速ですが、下記のような作業を【デザインビューでクエリを作成する】機能から入って処理したいと思っております。(当方のアクセスには不一致クエリウィザードが使えないのです…)

Aテーブルにある部番コードと、Bテーブルにある部番コードが一致しないレコードをテーブルとして作成したいと思っております。但し、Aテーブルのみに入っている部番コードのみ出力したいという内容です。Bテーブルに入ってる部番コードがAテーブルに無い場合は、その部番コードは必要ありません。この逆でありますAテーブルに入っていてBテーブルに無い部番コードは出力しなくてはなりません。
上手く表現できなくて申し訳ございません…。結局の所は、出力されるテーブルに入ってくる部番コードはAテーブルにしか存在しないもの、という事になります。(一致しないものを出力する)

どなたかお手すきの方、いらっしゃいましたらどうぞ宜しくお願い致します。

こんばんは。いつもお世話になっております。Microsoft Access 2000 を使用して現在、にらめっこ状態で作業をしておりますが息詰ってしまって。。。
早速ですが、下記のような作業を【デザインビューでクエリを作成する】機能から入って処理したいと思っております。(当方のアクセスには不一致クエリウィザードが使えないのです…)

Aテーブルにある部番コードと、Bテーブルにある部番コードが一致しないレコードをテーブルとして作成したいと思っております。但し、Aテーブルのみに入っている部番コードの...続きを読む

Aベストアンサー

テーブルAとBをクエリデザインに持ってきて、部番コードでリンクします。
リンクのプロパティから2番目の「Aの全部と、一致するB」を選びます。
クエリデザインで、Bの部番コードの条件に「Is Null」と入力します。
これで大丈夫だと思います。
SQL文まで必要でしたらまたおっしゃってください。
頑張ってください(^o^)丿

Qアクセス クエリーの作成

OS:98
Access Version:97
下記のようなレコードの抽出をしたいのですが、どのようにすれば
できるのか教えてください。
<テーブル1>
顧客番号 氏名   学年 曜日 時間 科目
111111 田中一郎 中1 月  A1 国語
222222 鈴木太郎 中2 水  B3 算数
111111 田中一郎 中1 月  A2 理科
222222 鈴木太郎 中2 金  B3 社会

<クエリ1>
顧客番号 氏名   学年 曜日1 時間1 科目1 曜日2 時間2 科目2
111111 田中一郎   中1 月  A1  国語  月   A2 理科
222222 鈴木太郎   中2 水  B3  算数  金   B3 社会

このようにしたいのですが、お知恵をお貸し下さい

Aベストアンサー

職業プログラマの方なら、DB設計特に正規化について、説教部屋で徹夜のお説教をするとこですが・・・・w

とりあえずやっつけデータ整理のようなので、超お手軽版をご説明します。

テーブル作成クエリで、顧客番号をユニークにしたテーブルをたくさん作成します。
つまり、
[テーブル11]
顧客番号 氏名  学年
111111 田中一郎 中1  
[テーブル12](月A1の科目)
顧客番号 科目
111111  国語
[テーブル13](月A2の科目)
顧客番号 科目
111111 理科
・・・・・・・・・・

これらのテーブルを元に、[クエリ2]を作成するのは、ご理解いただけると思います。

マクロその他のテクニックについては、別に質問されたほうがいいのではないかと思います。


人気Q&Aランキング

おすすめ情報