• ベストアンサー

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

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

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

  • ベストアンサー
  • 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

  • アクセスのフォームで入力ができない

    Accessの操作が出来る程度なのに、頑張って「社員台帳」たるものを作成し始めました。 テーブルに ・社員基本データ ・公的資格・学歴データ ・略歴・賃金データ を作成し、社員IDをキーにその3つのデータでクエリーとフォームを作成しました。 テーブルの各データではデータの編集及び追加が可能なのですが、フォーム画面で入力が出来ません。 説明不足かもしれませんが、どなたか教えてください。 宜しくお願いいたします。

  • Access2007のフォームとクエリについて

    Access2007、OSはwindows7での開発です。 フォームのレコードソースに自分で作ったクエリを張り付けているのですが、 コードの中でクエリを変更し、その変更した内容がフォームに反映のされ方がおかしくて困っています。 前の画面で年月を入力し、ボタンをクリックすることで次の画面へ移行し、前の画面の年月でクエリを書き換えています。クエリは書き変わっていますし、クエリを書き換えた後にフォームをリクエリしています。しかし、フォームに反映されているデータは直前に入力した年月ではなく、その1つ前の年月のデータが出てきます。 流れとしましては、 年月入力画面で年月入力⇒作成ボタン押下で時間テーブルを見て、データが無ければ新しく作る。あればそのデータを表示というながれです。 説明下手なので理解しにくいかもございませんが、ご協力よろしくお願いします。

  • accessのクエリとフォームの関係についてお尋ねします。

    accessのクエリとフォームの関係についてお尋ねします。 IDを主キーとした同じような構造のテーブルを3つ繋いでクエリを作成し、更にそのクエリをレコードソースとしたフォームを作成しました。 ところがフォームが動かない。テキストボックスを3つ作っていますが、何も表示してないし、レコードも移動しません。 まいった。 accessは2003、vistaを使っております。 素人です。よろしくご教授くださいませ。

  • Accessのフォーム

    Access2003を使用しています。 テーブルまたはクエリを元に作成したフォームにはテーブル・クエリに入力されているデータが表示されますよね? それらのデータをフォームから変更出来ないようにする方法はありますか? データ自体を非表示(入力用フォーム)にするのではなく、既存のデータは表示されるけど変更は出来ないという状態にしたいです。 ちなみに新規入力は行えるようにしておきたいです。 よろしくお願いします。

  • ACCESS のフォームの内容をクエリーの抽出条件にするには?

    Windows2000,Access2000です。 Accessのクエリーでデータを選択して表示する作業をしています。 現在はクエリーを自分で修正して実行しています。 でもそれではみんなで使うには使いづらいので、 フォームを作成しそのフォーム上の入力項目に入力された データをクエリーの抽出条件に指定する様にしようという事になりました。 フォーム上の入力フィールドの内容をクエリーの抽出条件に設定する方法はすぐわかりました。 でも「like」を指定する方法がわかりません。 つまりフォーム上の入力データを“xxx”とした時、クエリーの抽出条件を 「like "*xxx*"」としてクエリーを実行したいのです。 つたない文章でわかりにくいかと思いますが、ご存じの方おりましたら、 よろしくご教示ください。

  • アクセス2000でクエリーで更新できない

    アクセス2000で簡単なプログラムを作成中なのですが、2つのテーブルをリレーションで繋いでそれぞれ必要項目を抽出するクエリーを作成しました。 このクエリーをフォームに使って空欄のエリアにデータを 入力しようとしたら次のメッセージとなりました。 「このレコードセットは更新できません。」となってしまいます。根本的なミスのような気がしますが、気が焦っていて思いつきません。どこの設定を見れば良いか、どなたかご教示ください。 よろしくお願いします。

  • ACCESSのクエリの考え方

    お世話になります。 現在、アクセスを参考書片手に取り組んでいます。参考書の通りに進んでいたのですが、 クエリのことで悩んでいます。 自分なりの理解なのですが…、テーブルにあるデーターを会議などの資料のために いろんな条件で抽出したりしないかぎりは、別にクエリを作成しなくてもいい、 (要するに、「こういう条件のデーターが欲しい!」って時以外は、基本的には テーブルへのデーター入力だけでOKで、クエリは別に必要ない) という認識で正しいでしょうか? 参考書がやたらとクエリを作成させたがるために、よく分からなくなっています。 下記が、アクセスの目的ですが、自分的にはフォームは扱いやすくする必要が あると思うのですが、いまいちクエリの必要性がわからないのです。 ―――目的――― ・顧客情報・商品情報・顧客ごとの見積・問い合わせを、 社員(10名程度)で  共有したいため。(現在は各々が紙にて管理) ・データーはNASかサーバーにアクセスのデーターを入れて、各々のPCから  閲覧・書き込みができるようにする予定。 ・共有したい情報(「顧客情報」「商品情報」「見積情報」「問い合わせ情報」「クレーム情報」)は  テーブルにて作成。 ・入力・閲覧がしやすいように、フォームについては作成予定。 ・見積書などはアクセスでは作成しない。

  • Access 別フォームへの再クエリ(更新)がしたい。

    宜しくお願いします。 仕様環境:WinVISTA Access2007 別フォームから別フォームへの再クエリの仕方を教えてください。 画像を貼らせて頂きます。 まず、後ろのメインフォームから新規作成ボタンを押して、 別のフォーム(作成画面)を開きます。 そこに新しいデータを入力して、閉じますと、 そのままではメインフォームには反映しません。 (テーブルには反映していますが) 別フォーム(新規の作成画面)に再クエリをかけても そのフォームが更新させるだけで、メインフォームに変化はありません。 ちなみにメインフォームに作った更新ボタン(中身は再クエリ)を押すと反映されます。 どうしたら別フォームから後ろのメインフォームを再クエリ(更新)できるのでしょうか? やりたいことは別フォームのOKボタン(画像参照)を押すと 別フォームが閉じると同時にメインフォームが再クエリ(更新)されるとベストです。 (今のところOKボタンの中身は”閉じる”のマクロだけです) 構造は簡単で恐縮ですが、 テーブル:Tメイン フォーム:メインフォーム      作成画面フォームetc.. です。 クエリはメインフォーム自体にクエリビルダを使っていますが、 特別な施しなどはしていません、うまく動作しないところがあって、 いろいろ調べていてそうすると改善すると書いてあったので。。 ちなみにテーブルには「日付」の後順で並び替えをかけています。 当方、VBAに弱いのでマクロで操作できるのでしたらお願いします。 マクロで出来ないものでしたらVBAを教えて頂ければ、 イベントプロシージャに書き込みます。 大変恐縮ですがお知恵をお貸しください、宜しくお願いします。

  • アクセスで同じフォームを違うクエリで共用したい

     アクセスで、同じフォームでの複数人が入力作業を行うのですが、作業者によって少しづつ条件の違う検索をクエリで行っています。  このとき、フォームは作業者の数だけ作成しておかなければならないでしょうか?  フォームの手直しをする際に1回で済むように、違うクエリを使った場合も同じフォームが利用できれば、大変助かるのですが、現状では作業者の数だけフォームの修正が必要で困っております。  何か、良い解決の方法があればお教えください。

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

専門家に質問してみよう