- ベストアンサー
Access2003でのクエリ編集の方法
- クエリを使ってデータの編集を行いたい場合、Access2003では編集が制限されています。
- クエリでデータの表示や集計はできますが、編集を行うことはできません。
- データの更新や編集を行いたい場合は、テーブルを直接編集するか、フォームを使用する必要があります。
- みんなの回答 (11)
- 専門家の回答
質問者が選んだベストアンサー
「課題管理テーブル」について 課題管理テーブルのすべてのフィールドには主キー、 およびインデックスを設定しない。 主キーを設定していなくてもインデックスが 「はい(重複あり)」あるいは「はい(重複なし)」 になっていると当該のエラーが起こります。 課題管理テーブルに直接「管理No」に同じ番号を 入れて確認してみてください。
その他の回答 (10)
- piroin654
- ベストアンサー率75% (692/917)
インデックスは「いいえ」に 設定します。
- piroin654
- ベストアンサー率75% (692/917)
インデックスの確認はテーブルをデザインビュー で開き、フィールドの設定の下のフィールドプロパティの 「標準」とか「ルックアップ」とある欄の下のほうに隠れているかも しれません。フィールドをポイントする毎に各フィールドの 設定が示されます。
- layy
- ベストアンサー率23% (292/1222)
>これで突破口のヒントになりますでしょうか? 矛盾を招く構造はうまく稼働しません。 学びの支援 : Access 2007 http://www.witc.co.jp/program/education/ops/ac/index.html リレーションシップ、 参照整合性とはテーブル間で矛盾のないデータ管理をするための規則 リレーションシップ、1対1構成、1対多構成、多対多構成、テーブル正規化、 こういうのを学習するとこの問題がなぜ起きているかのヒントになると思います。 学習しておいてください。 >クエリに入力できるのは、管理No1つに対して1レコードのみしか入らないというように見受けられます。 田中-課題1での「済」が保持されて、 和田-課題1での「済」も保持される状態でなくてはならないのでは?。 「済」は顧客単位に依存する情報であって課題単位ではない。 今は顧客単位になっていません。 このあたりが原因かと思います。 ---------------- 課題管理テーブルには、 「課題No」 「課題名」 課題が変わったときしか更新されない 顧客管理テーブルには、 「管理No」 「姓」 「名」 顧客が変わったときしか更新されない 課題進捗テーブルを新規作成、 「課題No」 「管理No」 「仕掛り」 「済み」 「次回予定」 「課題No」「管理No」が主キー。 随時進捗を保持するレコード。 課題進捗参照クエリ 課題進捗参照クエリではすべての情報を表示し参照するのみ、表示・レポート用 「課題No」 「課題名」 「管理No」 「姓」 「名」 「仕掛り」 「済み」 「次回予定」 課題進捗入力フォーム 課題進捗テーブルをレコードソースにする、 「課題名」「姓」「名」の情報は非連結で参照するのみ 「課題No」 「課題名」 「管理No」 「姓」 「名」 「仕掛り」 「済み」 「次回予定」 入力 参照 入力 参照 参照 入力 入力 入力 ---------------- とりあえずこういう構成でもいいのでは、と思います。 ある項目を入力(更新)したとき、どのテーブルのどの項目が更新されるべきか、 更新されたときに次回参照したら反映されているか、 リレーションシップを中心に、こういうところを整理してみてください。
お礼
たびたびのご回答誠にありがとうございました。 結論から申し上げますと、理想の形にすることが出来ました。 layy様のテーブルをもう一つ作成する手法と、piroin654様のインデックスを「いいえ」にする方法が大きなヒントになり、結果的にお二方の案を組み合わせる形でうまくいきました。 その他にもルックアップを使ってみたり、結構自分なりにアレンジを加えたので、どこをどうしたのかという説明がしにくいのですが、理想の形に辿り着いたのはほんとに嬉しい限りです。 不具合がないか少しテストを重ねてみたいと思います。 大変お世話になりました。 本来はお二方にベストアンサーしたいのですが、一人しか選べなくてほんとに残念です・・・。 ほんとに感謝の気持ちでいっぱいです。 誠にありがとうございます。
- layy
- ベストアンサー率23% (292/1222)
事象整理すると 顧客管理に2件、課題管理に3件あり、クエリで管理NOで結合しなかったら2×3の6行表示される。済みのチェック更新ができない。 顧客管理に2件、課題管理に0件あり、クエリで管理NOで結合したら、空白行で表示される。管理NOは3豊臣秀吉とでも入力できるが課題管理NOは入力できない。済みのチェックもできない。インデックス~のエラーが出る。 顧客管理テーブルの管理NOのみ主キーである。 クエリの結合は管理NO、両方のテーブルの同じ行だけ含める、としている。 クエリで空行から2行を入力するとき、顧客管理テーブル側の管理NOの入力はあるが課題管理テーブル側の管理NOの入力欄はありますか?。インデックスエラーは1行目入れようしたらエラーですか?、管理NO入力したとき氏名は表示されませんでしたか?。 上記のような状態ですね?。 再度確認です。 クエリで 田中-課題1で済と入力 田中-課題2で済と入力 和田-課題1で済と入力 と考えていますか?。 3レコード目の済は、課題管理テーブルの既に1レコード目で入力した済を参照でいいですか?。それとも別、1レコード目は済、3レコード目は未済ですか?。 今のテーブルやクエリの状態でどう使うかがまだ整理できてなくてわかりません。 それと、今後のために、更新できるクエリと更新できないクエリがあるのでそのあたりを学習しておくと良いかと思います。
お礼
仕事の関係で返信が遅れてしまいました。 大変失礼いたしました。 ご質問の件でございますが、 >顧客管理に2件、課題管理に3件あり これはほんの一例です。実際は顧客管理に100数十件、課題管理に300件超というところです。 >クエリで管理NOで結合しなかったら2×3の6行表示される。済みのチェック更新ができない。 その通りでございます。 >顧客管理に2件、課題管理に0件あり、クエリで管理NOで結合したら、空白行で表示される。 管理NOは3豊臣秀吉とでも入力できるが課題管理NOは入力できない。済みのチェックもできない。 インデックス~のエラーが出る。 空白行が表示される所まではその通りです。 空白行にレコードを入力しますと、1件目のレコード(例:管理No.1、課題管理No.1)は入力できます。 続いて2件目のレコードに(管理No.1、課題管理No.2)で入力すると、インデックスのエラーが表示されました。 では試しに、2件目のレコードに(管理No.2、課題管理No.1)で入力してみたら入りました。 続いて3件目のレコードに(管理No.2、課題管理No.2)、 あるいは(管理No.2、課題管理No.1)と入力しても、いずれもインデックスエラーです。 ということは、クエリに入力できるのは、管理No1つに対して1レコードのみしか入らないというように見受けられます。 >顧客管理テーブルの管理NOのみ主キーである。 その通りでございます。 >クエリで空行から2行を入力するとき、顧客管理テーブル側の管理NOの入力はあるが課題管理テーブル側の管理NOの入力欄はありますか?。 あります。 >インデックスエラーは1行目入れようしたらエラーですか? 上記でもご説明しましたが、1行目というよりも、管理Noを重複して入力しようとした場合にエラー発生と見受けられます。 >管理NO入力したとき氏名は表示されませんでしたか? 入力中は表示されません。 入力後保存して一旦閉じ、再度クエリを開くと表示されているという感じです。 >クエリで 田中-課題1で済と入力 田中-課題2で済と入力 和田-課題1で済と入力 と考えていますか?。 その通りです。 管理Noも重複するし、課題管理Noも重複することになります。 >3レコード目の済は、課題管理テーブルの既に1レコード目で入力した済を参照でいいですか?。それとも別、1レコード目は済、3レコード目は未済ですか? ここがちょっと意味がよく分からないのですが、参照の仕方にこだわりはございませんので、 結果的に、 田中-課題1で済と入力 田中-課題2で済と入力 和田-課題1で済と入力 が実現できて、一覧で表示出来るようになれば、どういう形であっても構いません。 テーブルを根本的に作り直せと言われれば作り直します。 これで突破口のヒントになりますでしょうか? クエリについてももっと勉強していきます。 ありがとうございます。
- piroin654
- ベストアンサー率75% (692/917)
#4についてですが、「課題管理テーブル」のフィールドの どれかに主キーを設定していませんか。たとえば、 「課題No」あるいは、「管理No」。 また、クエリでどこか変更しましたか。 これらのどれかが関係していないと、補足のような エラーは出ないのですが。
お礼
仕事の関係で返信が遅れてしまいました。 大変失礼いたしました。 ご質問の件でございますが、 >課題管理テーブル」のフィールドのどれかに主キーを設定していませんか 確認しましたが主キーは設定されておりません。 >クエリでどこか変更しましたか 変更していません。 下記のままです。 SELECT 課題管理テーブル.管理No, 顧客管理テーブル.姓, 顧客管理テーブル.名, 課題管理テーブル.課題No, 課題管理テーブル.課題名, 課題管理テーブル.仕掛り, 課題管理テーブル.済み, 課題管理テーブル.次回予定 FROM 顧客管理テーブル INNER JOIN 課題管理テーブル ON 顧客管理テーブル.管理No = 課題管理テーブル.管理No ORDER BY 課題管理テーブル.管理No; 諦めるしかないですかね・・・?
- layy
- ベストアンサー率23% (292/1222)
Aさんが課題1を終えましたがBさんはまだです。 Bさんが課題2を終えましたがAさんはまだです。 AさんBさんとも課題3を終えました。 こんなのを管理したいですか?。 今の状態でやりたい機能は満たしてますか?。済みとかどういう使われ方ですか。その顧客が課題を終わったかどうかなのか、課題提供が終わったかどうかなのか。今の構成では後者を意図しているように思います。確認をお願いします。 課題管理クエリにある項目でもって、状態を入力するテーブルにしたほうがいいのではないでしょうか。 姓、名、課題名はダブるので除きますが。 更新入力するテーブルと1度作れば良いテーブルと分けて考えてみたらと思います。
お礼
私の中では下記のようなイメージをしています。 (例)※ □はYes/No型の意味です。 仕掛り 済み 次回予定 田中一郎 課題1 □ □ □ 田中一郎 課題2 □ □ □ 田中一郎 課題3 □ □ □ 和田次郎 課題1 □ □ □ 和田次郎 課題2 □ □ □ 和田次郎 課題3 □ □ □ ちなみに、「済み」というのは課題が終わった時点で、レ点を入れます。 そこで顧客管理テーブルには、 「管理No」 「姓」 「名」 1 田中 一郎 2 和田 次郎 課題管理テーブルには、 「課題No」 「課題名」 「仕掛り」 「済み」 「次回予定」 00001 課題1 □ □ □ 00002 課題2 □ □ □ 00003 課題3 □ □ □ という2つのテーブルを作りました。 そもそものテーブルの作り方に問題があるんですかね・・・。 データベースそのものがよくわかってないので、こんなことになるんですね。
- piroin654
- ベストアンサー率75% (692/917)
>管理Noは数値型なので、「00001」ではなく「1」です。 >課題管理テーブルの「課題No」フィールドがテキスト型で、 >「00001」となります。 >このあたりに何か解決のヒントがあるのでしょうか・・・? 数値型とテキスト型は私の読み間違いですが、これは 表示されないことの理由ではありません。 既存のデータが表示されないのは「課題管理テーブル」に まだ「管理No」が記入されていないからです。 もともとの二つのテーブル間にはデータを関連させる 項目がなかったので、関連させる項目として「管理No」 を「課題管理テーブル」を新規に付け加えたのですが、 その時点ではデータはそこには入っていません。 「顧客管理テーブル」と「課題管理テーブル」は「管理No」 によって紐つけられており、クエリの「管理No」に1と入れると 「管理No」1の氏名が表示されます。この時、記入した1は 「課題管理テーブル」の「管理No」に書き込まれます。 つまり、「顧客管理テーブル」は「管理No」と「姓」と「名」 を参照しているだけで、入力されるデータは「課題管理テーブル」 に書き込まれていきます。 既存のデータがどの学生さんのデータか、「課題管理テーブル」 の個々のレコードで判別できるのであれば、「課題管理テーブル」 の「管理No」に数値を入力すればクエリで表示されます。 あるいは、最初からクエリを開いて入力していけばデータの整合性が とれます。 既存の「課題管理テーブル」を別名にしておき、空の 「課題管理テーブル」を作り、入力して確認してみてください。
お礼
課題管理テーブルを空にして、 管理No 姓名 課題No 課題名 仕掛り 済み 次回予定 1 田中一郎 00001 課題1 □ □ □ 2 田中一郎 00002 課題2 □ □ □ クエリで上記のように入力してみようとしたのですが、 下記のエラーが出て保存が出来ませんでした。 インデックス、主キー、またはリレーションシップで値が重複しているので、テーブルを変更できませんでした。重複する値のあるフィールドの値を変更するか、インデックスを削除してください。または重複する値を使用できるように再定義してください。 となってしまいます・・・。 なかなかうまくいかないもんですね・・・。
- piroin654
- ベストアンサー率75% (692/917)
#2です。張り付けたSQL文が字数の関係で飛んでいるのですが、 SELECT 課題管理テーブル.管理No, 顧客管理テーブル.姓, 顧客管理テーブル.名, 課題管理テーブル.課題No, 課題管理テーブル.課題名, 課題管理テーブル.仕掛り, 課題管理テーブル.済み, 課題管理テーブル.次回予定 FROM 顧客管理テーブル INNER JOIN 課題管理テーブル ON 顧客管理テーブル.管理No = 課題管理テーブル.管理No ORDER BY 課題管理テーブル.管理No; ではどうですか。これを新規クエリをSQLビューにして 張り付けてみてください。
お礼
ご回答ありがとうございます。 具体的な解決法をご教示下さいまして誠にありがとうございます! さっそくやってみたのですが、クエリのデータシートビューで確認してみますと、 既存のレコードが表示されておらず、空欄の新規レコードが1行表示されてるだけです。 私のやり方がおかしいのでしょうか・・・ 顧客管理テーブルの「管理No」は数値型で主キーを設定しています。 課題管理テーブルにも「管理No」(数値型)※主キー無しを追加しました。(管理Noのレコードはブランクのままです) 新規クエリのSQLビューで、SQL文を貼り付けました。 デザインビューで見ますと、「管理No」フィールド同士が結合されていました。 ここまでは良いように思うのですが、データシートビューにしますと何もレコードが無いのです。 空欄の新規レコードはあるので、入力等の編集は出来るようですが、それぞれのテーブルにあるレコードが表示されません。 >たとえば管理Noが00001の徳川家康が複数の課題を持っていても表示されます とありますが、管理Noは数値型なので、「00001」ではなく「1」です。 課題管理テーブルの「課題No」フィールドがテキスト型で、「00001」となります。 このあたりに何か解決のヒントがあるのでしょうか・・・? もしくは、課題管理テーブルの「管理No」(数値型)※主キー無しは、レコードがブランクのままだとまずいでしょうか?
- piroin654
- ベストアンサー率75% (692/917)
「課題管理テーブル」に「管理No」を追加し、フィールドの仕様を 「顧客管理テーブル」の「管理No」と同じにします。 「課題管理テーブル」には主キーを設定しません。 クエリを以下のように設定します。 SELECT 課題管理テーブル.管理No, 顧客管理テーブル.姓, 顧客管理テーブル.名, 課題管理テー ブル.課題No, 課題管理テーブル.課題名, 課題管理テーブル.仕掛り, 課題管理テーブル.済み, 課題管理テーブル.次回予定 FROM 顧客管理テーブル INNER JOIN 課題管理テーブル ON 顧客管理テーブル.管理No = 課題管 理テーブル.管理No ORDER BY 課題管理テーブル.管理No; これで、たとえば管理Noが00001の徳川家康が複数の 課題を持っていても表示されます。
- mshr1962
- ベストアンサー率39% (7417/18945)
顧客管理テーブルと課題管理テーブルに結合する条件(フィールド)がないので無理です。 別途、課題評価テーブルを作り、課題管理テーブルと課題管理テーブルで 追加クエリ(課題作成クエリ)を作成して、課題評価テーブルに課題を作成して管理してください。
お礼
ご回答いただきましてありがとうございます。 あらたにもう1つ課題評価テーブル作成となりますと、 フィールドはどのようなものを作ればよろしいですか? あと、課題管理テーブルと課題管理テーブルで追加クエリ(課題作成クエリ)を作成というのは、 同じテーブル同士でクエリを作成するということでしょうか??
お礼
たびたびのご回答誠にありがとうございました。 お二方様のお力添えがありましたおかげで、理想の形にすることが出来ました。 お二方様がベストアンサーであることが間違いないのですが、一人しか選べません。 ほんとに残念です・・・。 ほんとに感謝の気持ちでいっぱいです。 誠にありがとうございます。