• 締切済み

更新クエリでキー違反

クエリAのあるレコードからテーブルBのレコードにデータを流そうとします。 テーブルBのレコードにデータがちゃんと入っている と上手くデータが流れて更新されるのですが、IDと 名前しか入っていなかったりするとキー違反になるのです。 とても抽象的ですが、 どうして大丈夫なときとダメなときが発生すると 考えられますか?

みんなの回答

  • KAERU_VXV
  • ベストアンサー率60% (18/30)
回答No.4

#3補足の内容を読みましたがどのような事をしようとしているのか ここからは理解できませんでした。 申し訳ないのですがこれにはアドバイスが見つかりません。

aoitorigairu
質問者

お礼

わざわざご回答ありがとうございます。 テキストの限界を感じています。 もう少し整理して報告したいと思いますのでまた閲覧頂ければ幸いです。

  • KAERU_VXV
  • ベストアンサー率60% (18/30)
回答No.3

「キー違反」になる可能性としては  (1)既にテーブルに同じキーのデータが存在する。  (2)キー項目にNull値をセットしようとしている。 が考えられます。  キーの重複しているデータをセットしようとしているためにキー違反に なるのであれば、「クエリA」と「テーブルB」を新規クエリー上でキーを している項目で紐付ければ、どのデータのためにエラーとなるのか分かる と思います。  「IDと名前しか入っていなかったりするとキー違反になるのです。」 との事でが、キーは「ID」と「名前」ですか? それ以外の項目がキーになっているのなら、Nullは入れられないので キー違反になります。 「入力規則違反」の場合、他に考えられる原因は 「テーブルB」では数値型の項目に「クエリA」では文字が含まれるデータを セットしようとしている事などが上げられるかと思います。

aoitorigairu
質問者

お礼

お礼おそくなりました。回答ありがとうございます。 主キーはIDだけです。 名前はキーにはなっていません。 Aクエリには ID(主キー、Aテーブルの主キー)、名前、コメント、分野1、数1、分野2、数2、分野3、・・・分野22、数22 Bクエリには ID、名前、コメント、分野1、数1、分野2、数2、分野3、・・・分野22、数22 A、Bクエリの内容は同じなんです。 Aクエリのレコードの内容をBクエリにコピーする更新クエリを作りました。 2つの検索ボックスでおのおのレコードを選び、A→Bでコピーします。 UPDATE Aクエリ、Bクエリ SET Aクエリ.コメント=Bクエリ.コメント, Aクエリ.分野1=Bクエリ.分野1 ・・・WHERE (((Aクエリ.ID)=[Forms]![基本フォーム]![kensaku_box2])); IDが非常に怪しいですね。IDを入れるようにすれば成功するかも知れません。また、お手数ですがわかることがあればご教授ください。

  • KAERU_VXV
  • ベストアンサー率60% (18/30)
回答No.2

メッセージの内容は、Null、キー違反、ロック違反、入力規則違反と続いていると思いますが、件数に数字が入っているのは「入力規則違反」だったりしませんか? テーブルのデザインを作成する時、テキスト型はプロパティ「空列文字の許可」の初期設定が「いいえ」で作成されます。 空白が入る項目の場合には「空列文字の許可」を「はい」にして置いてあげる必要があります。

aoitorigairu
質問者

お礼

回答ありがとうございました。お礼おそくなりました。 空文字が入るのでこれでイケると思ったのですが、同様のエラーが出続けています。1件のレコードでキー違反が出てしまいます。近づいているとは思うのですが、また心あたりがあったら教えてください。

noname#22222
noname#22222
回答No.1

うーん!プログラマでなくスーツのデザイナーですので攻め方だけ・・・。 1、1行だけでテストする。 2、フルデータでテスト。 3、1列だけヌル値にしてテスト。 4、また、別の1列のみをヌル値にしてテスト。 5、このようにした、ID以外を全てテスト。 現象の把握=>原因究明=>対策という手順を踏めば簡単に解決するかもです。

関連するQ&A

  • 更新クエリのキー違反がどれだかを調べる方法は

    更新クエリのキー違反がどれだかを調べる方法はないですか? 「更新クエリですべてのレコードを更新できません。 0個のフィールド型変換エラー、2件のレコードでキー違反、 0件レコードでロック違反、0件レコードで入力規則違反が発生したためレコードを更新できませんでした」 となるのですが、 「2件のレコードでキー違反」がどれなのかって元テーブルをじっくり眺めて探すしかないのでしょうか? 手作業と目で探してるのですが、見つけられません・・・

  • 更新クエリがわからない

    windows-xp、Access2003を使っています。 参考書に載っている更新クエリは「同一のテーブル内でデータを更新する」という内容で載っているのを見ました。 が、そうではなく・・・ 更新クエリを作成すると「レコードの更新」という欄が出てくるのですが、そこに、別のテーブルや別のクエリのデータを”ビルド”で作成することはできないのでしょうか? 試みたのですが、”パラメータの入力”というものが出てきてしまいました。 ついでにおわかりになれば、これも教えてください。 ↓↓↓ テーブルAとテーブルB(或いはクエリB)に、同じIDをもつデータがあります。そこで、テーブルAの指定するフィールドへ、テーブルBの新しいデータを入れ込みたい(更新)させたい。 すみませんが、宜しくお願い致します。

  • 【大至急お願いします!】Accessの更新クエリについて

    あるテーブルA、Bがあり、構造はまったく同じです。 AのデータをすべてBに更新するにはどうすればよいでしょうか? これらのテーブルはかなり項目が多いので、更新クエリ内のレコードの更新にすべて項目をいれないといけないのでしょうか?

  • 「キー違反」がどういう状態を指しているのか教えてく

    アクセス2010です。 更新クエリを実行しようとしたら、 「レコードでキー違反」 と言うのが発生し、実行できないのですが キー違反とは何を指しているのでしょうか? 該当のフィールドは、テキスト型でインデックスを「いいえ」にしています。 更新クエリでやろうとしていることを手作業で行うと、エラーにならずにできます。 ヘルプをクリックしても 「Access ヘルプと使い方」の画面になってしまいます。 「キー違反」がどういう状態を指しているのか教えてください。

  • Access2003の更新クエリ、レコードの更新欄のフィールド名を自動的に入力するには?

    AとBという2つのテーブルが、全く同じフィールドを30個持っています。 AとBでIDが同一のモノのみ、AにBのデータを丸々更新したいのですが [B].[フィールド名1]というように、IDを除いた残り29個のレコードの更新の欄に 手入力する方法で現在行っています。 追加クエリなどだとフィールドが同じ場合は自動的にレコードの追加欄にフィールド名が現れるのですが 同様に更新クエリでもフィールド名を自動的に出す方法はありますか? 現在上記のような更新クエリを10件以上新規で作成しなければならないのですが 各件に29個も手入力で行うのが非常に面倒でなりません。 やはりSQL等で仕組んでいくようにするのでしょうか?

  • クエリでのデータ更新について

    ACCESS2000で更新クエリの質問です。 フィールドの値の合計、カウントなどの集計値を計算するクエリから取り出された値を、更新クエリでデータを更新したいのですが、 「更新可能なクエリでありません」とエラーがでます。 LOOPする方法もあるのですが、できればクエリで一括更新したいと思います。 どなたかご教授お願いします。 やりたいことは下記のとおりです。Aテーブルを集計しBテーブルの個数にAテーブルの個数の合計値を更新する。 <Aテーブル> コード  個数 1     1 1     2 1     3 2     4 2     4 3     5 3     6 <Bテーブル> コード  個数 1      2      3    ↓↓↓更新後 <結果:Bテーブル>   コード  個数 1     6 2     8 3     11

  • 削除クエリがエラーになります。

    削除クエリがエラーになります。 Access2007です。削除クエリを作っているのですがどうしてもエラーになります。 「1件のレコードでキー違反。0件のレコードでロック違反が発生したため削除クエリでレコードを削除できませんでした。」と、表示されてしまいます。 な~ぜ???  1つのテーブルを基に作っているのにどうしてエラーになるのかわかりません。「キー違反」「ロック違反」とはどういうものですか?どうすれば治りますか? どうか、よろしくお願いいたします

  • 更新不可能のクエリの条件を教えてください。

    他の人が作ったアクセスのファイルなのですが クエリを開いてデータを編集しようとすると 音が鳴り、左下のステータスバー(?)に 「このレコードセットは更新できません」 となってしまいます。 そのクエリをデザインビューで見ると 二つのテーブルが矢印で繋がっており、 月: Month(T【家計簿】明細!取引日) のような式で作られたフォールドが10個くらいあります。 二つのテーブルそれぞれに主キーはありますが 主キー同士は繋がっていません。 他の人が作った時は2003で作り 私は2007で開いています。 どこをどういじれば、更新可能なクエリになるのか分からないので 更新不可能のクエリの条件を教えてください。 変にいじって戻せなくなりたくないので^^; アドバイスよろしくお願いします。

  • Access2000 の更新クエリでカウントアップ

    初歩的なことだと思うのですが、 Access2000を利用し、 あるテーブルのAというキーのレコードの数値項目2つを、 更新クエリを動作させるたびに、1づつカウントアップさせたいのですが、 どのように記述するのでしょうか? キー項目 項目1 項目2 タイムスタンプ A     0   1  2007・・。 ここで、更新クエリを起動して、 A     1   2  2007・・・ ここで更新クエリを起動して A     2   3  2007・・・ 更新クエリのレコードの更新欄にはどのように記述すれば、正しく動作するかお教えください。 (タイムスタンプは、Now()を設定しています) 宜しくお願いします。

  • 更新クエリでテーブルを書き換えたい

    データが0件のテーブルに、更新クエリで一つのレコードを追加したいのですが そもそもテーブルにデータが入ってない状態だから更新すらできないのですが こういう時どうすればいいでしょうか? Ttest01テーブルにaを入れたい場合、 UPDATE Ttest01 SET Ttest01.test01 = "a"; これだとうまくできません。 Ttest01のtest01フィールドの1行目にaを入れる方法を教えてください。