• ベストアンサー

VBでACCESS(アクセス)にSQLを発行したときのエラーについて

VBでアクセスのデータにSQLを発行してテーブルに更新等の処理をしています、削除や検索では該当するレコードがないとエラーコードが返りますが、挿入の場合はすでにあるデータに重複するデータを登録する(二重登録)処理をしてもエラーになりません? なにもメッセージがないので登録されたのか、だめだったのかを判断することができません、このような場合に二重登録の判定をするには先に検索をして当該データの有無を調べた後に登録処理にを行うようにするしかないのでしょうか?(同じことが更新についてもあてはまります) データの挿入にはjetSQLのinsert intoステートメントを使用しています データの更新には同updateステートメントを使用しています

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

  • ベストアンサー
noname#3345
noname#3345
回答No.1

キーの設定などはどうなっているのでしょう? 二重登録ができないようなキー設定になっていれば、エラーは返ると思いますが。 ただ、普通は存在チェックをかける方が確実だと思いますけど。 一度セレクトでSQLをまわして、該当レコードが0件だったらinsertを行う、という風にした方がいいと思いますよ。

unname1
質問者

お礼

イミディエイトで確認したところエラーが表示されていました、エラーメッセージの処理の記述間違いでメッセージが表示されませんでした。 アドバイスをいただいた存在チェックもするようにしておきます。 ありがとうございました

その他の回答 (1)

  • mfuku
  • ベストアンサー率50% (173/345)
回答No.2

いえ、INSERTする際、主キーが重複したレコードが既に存在する場合、エラーが返ってきます。 従って、おそらく、主キーが設定されてない、あるいは、設定されていたとしても違ったフィールドに設定されているのではないでしょうか? もう1度、主キーの設定を確認してみて下さい(ACCESSのテーブルを選択してデザインボタンを押し鍵マークを確認してみて下さい)。

unname1
質問者

お礼

イミディエイトで確認したところエラーが表示されていました、エラーメッセージの処理の記述間違いでメッセージが表示されませんでした。 主キーの見直しをしていてとんでもない間違い(この件とは無関係なので詳細は省略します)にも気づきました、アクセスのキーの設定については考えてもみませんでした、いろいろな角度から調査をする必要性を再認識しました ありがとうございました。

関連するQ&A

  • アクセスのエラーについて。。。

    アクセスでデータを入力して、登録ボタンを押すと 「INSERT INTO ステートメントに認識できないフィールド"○○○○"があります。」 というエラーがでて、登録ができなくて困ってます。。。 この場合どのようにしたらいいでしょうか? 宜しくお願いします。

  • VB6でのSQLでのアクセスデーターの追加について

    abc = "insert into 社員テーブル(コード,名前) values ('0002','Takeda')" c1.Execute abc 上記のようにプログラムで直接データーを入力すると データーは追加で登録できるのですが 下記のように、テキストボックス1(tx1.Text)とテキストボックス2(tx2.Text)にデーターを入力して、入力した 内容を追加しようとするとエラーになります。 どこが間違っているのでしょうか? abc = "insert into 社員テーブル(コード,名前) values (tx1.Text,tx2.Text)" c1.Execute abc

  • VBとアクセスでSQL文に変数を使いたいのですが

    したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません StrSQL_1 = _ "insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _ "values (7,'(変数1)','(変数2)','(変数3)')" 変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか? もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

  • SQLのインサートでヌルを挿入できないというエラー

    SQLサーバーで、INSERT INTO・・・selectで抽出した列の値を入れたいのですが、主キーのところで下記のエラーが出ます。 テーブル ・・・の列 '・・・' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 selectで抽出するテーブルの該当列を確認しても値はあるはずですが・・。 原因は何が考えられますか? お願いします・・・。

  • Access2000でDAOを使用したときエラーにならない

    Access2000のVBAでプログラムを組んでいて、一見うまく処理されているように見えるのに、実際データが登録されていないということがあり、どうすればエラーを起こせるのか悩んでいます。 Dim db As DAO.Database Set db = CurrentDb db.Execute "insert into TEST values ('10','AAAAAAAAAA')" db.Execute "insert into TEST values ('10','AAAAAAAAAA')" 1つ目のフィールドが主キーになっており、2回目のInsert文はエラーになるはずですが、何も起こりません。 On Error Goto等は全く記述していません。 テーブルには最初の1行のデータだけが登録されています。 これ以外にも、2桁のフィールドに3桁のデータをInsertしても無視されるだけでエラーになりません。 潜在バクになる可能姓があるので、エラーを発生させたいのですが何か設定があるのでしょうか? 因みに、SQL文をいじって文法エラーにすると、ちゃんと実行時エラーは発生します。 SQLの文法が正しくて、テーブルの定義に反している時のエラーが拾いたいのです。 よろしくお願いします。

  • addslashesによるエスケープ

    フォームからのデータをデータベースに登録する際、addslashesを使用して登録データをエスケープしています。 SJISでデータを処理しているのですが、addslashesでエスケープする際に最後がエスケープされるデータの時困っています。 例えば登録したいデータが「サンプル表」などの時、addslashesすると INSERT INTO ・・・・, 'サンプル表\', ・・・ とINSERT文ができるのですが、これだとエラーが出ます。 こういう場合、皆さんはどのような処理をされているのでしょうか? 今は、エスケープする必要のあるデータ処理には INSERT INTO ・・・・, 'サンプル表\ ', ・・・ のように半角スペースを入れて、データを抽出した際、末尾の半角スペースを取り除いています。 他に思いつくのは、登録するデータをエスケープした際に末尾が「\」かどうか調べて、「\」の場合半角スペースなどを挿入するという方法などです。 もっといい処理があれば、ご教授いただければと思います。 よろしくお願いいたします。 長文ですみません。

    • ベストアンサー
    • PHP
  • accessの SQL文 INSERT命令

    次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。 文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。 DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

  • JDBC:ODBCでaccess db にデータをInsertするとき、構文エラーがでました

    insert into InMoneys(Source,Money) values('1',99) java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO ステートメントの構文エラーです。

    • ベストアンサー
    • Java
  • VB6からADOを介してACSESS2000MDBへのアクセスエラー

    VB6からADOを使用しACSESS2000MDBにデータを登録すると INSERT 文でエラーになってしまいます。 エラーコード:-2147217833です。 何が原因か分かる方教えて下さい。

  • PHP Mysqli関数でエラー情報を取得する

    はじめまして。 PHPから、Mysqli関数を使用して、5000件のinsert文をMySQLサーバーに投げる処理で困っています。 insert文をセミコロン;で接続して、1つのSQL文にして、executeしています。 あるinsert文でエラーが発生した場合、それ以降のSQL文が実行されずに、PHPに戻ってきてしまいます。マルチクエリの挙動としては、この動きはしょうがないのでしょうか? 5000件のうち、複数のエラー(キー重複や、外部参照キーエラー)があった場合、エラーが起きたデータについてはどのようなエラーであったかが取得でき、それ以降のデータについてはinsertが実行できると言う処理をしたいのですが、このような処理は不可能でしょうか。 ちなみにupdateの場合は、更新対象のデータがなかった場合でもエラーとはならないので5000件文の処理が行われます。 環境は、以下です。 OS:FreeBSD6 PHP:PHP5 MySQL:MySQL5.2 よろしくお願いいたします。

    • ベストアンサー
    • PHP