ここから本文です

【Access】初心者です。SQL文のINSERT文を作ったらエラーが出て追加できません。

eri********さん

2011/12/1523:05:38

【Access】初心者です。SQL文のINSERT文を作ったらエラーが出て追加できません。

フォームにデータを入力し、新規登録ボタン(cmd_新規登録)でレコードに追加できるように作りたいのですが、「追加クエリですべてのレコードを追加できません。1件のレコードでキー違反」というエラーが出てしまうのはなぜですか?
登録年月日、更新年月日は追加した現在の日付を入れたいです。

Private Sub cmd_新規登録_Click()

Dim d As Date
d = Format(Now, "yyyy/mm/dd")
Debug.Print

If MsgBox("表示内容を登録します。よろしいですか?", vbYesNo, "確認") = vbYes Then
DoCmd.RunSQL "INSERT INTO M_ユーザ (ユーザID,ユーザ名,パスワード,削除フラグ,登録年月日,更新年月日) VALUES (cmb_ユーザID,txt_ユーザ名,txt_パスワード,chk_削除,#" & d & "#,#" & d & "# )"
End If
End Sub

閲覧数:
1,373
回答数:
2

違反報告

ベストアンサーに選ばれた回答

mah********さん

2011/12/1523:35:24

追加しようとするテーブルに主キーが定義してあって、
いざインサートしようとする主キー項目がすでに存在していれば当然エラーです。
主キーはそのテーブル内に1つしか存在しないもの。
(主キー)ユーザ:0001、佐藤さん、・・・・
という状態に
(主キー)ユーザ:0002、佐藤さん、・・・・
はインサートできるが、
(主キー)ユーザ:0001、鈴木さん、・・・・
はできません。
こういうときの回避としては、
事前にインサートしようとするキーと同じものが存在しないかをDCOUNTで確認しておいて、
=0件とわかった上でINSERT処理をする。
>0件であれば、INSERT処理をするとはいってもエラーになってしまうので中断させるか更新モードにさせる。

ついで、ですが、
テーブルには空値許可、の設定がありますから、
空値を新規レコードとして認めない設定のときに、空値で書き込みをしようとするとエラーです。

論理的に見るのは大きく2つ。

あとは、
この記載した処理が正しいかどうか。
SQLの妥当性、VALUEで記載した値の妥当性、などを見る。
SQLが合っていれば、クエリデザイン画面から直接実行しても同じ結果になるのでは?。

DEBUG.PRINTをするのであれば、できる限り情報を表示してみること。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

lll********さん

2011/12/1523:28:11

「ユーザID」テーブルの主キーはなんでしょうか?

主キーの重複は許されません。

主キーが同じデータを追加しようとしたと思いますが、どうでしょうか。

または、主キー以外のフィルドでも「インデックス(重複なし)」を設定している場合、主キーでなくとも同じデータは追加できません。

または、参照整合性(リレーションシップ)を設定し、整合性の取れないデータを追加しようとしていませんか?

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる