• ベストアンサー

Accessで数値型にNULLをInsertするとエラー

AccessVBAで数値型にNULLをInsertするとエラー(3134)になりますが、 その項目は必須項目にはしたくないので、 Insertする前にNULLが飛んできます。 そういった場合は、NULLかどうか判定して明示的に0をセットしてからInsertする方法しかないでしょうか。 あくまで取扱う情報は数値なので、数値型にしたいのですが、 NULLの可能性もある場合はテキスト型にするのが一般的なのでしょうか。 何か良い方法がありましたら教えてください。 尚、まだDBにはテストデータしか入っていないので、テーブルの変更は問題ありません。

noname#258812
noname#258812

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

> AccessVBAで数値型にNULLをInsertするとエラー(3134)になりますが、 エラー(3134)は「構文エラー」ですから テーブルの問題ではありません。  INSERT INTO テーブル ( テキスト項目, 数値項目 )  VALUES ('ABC', 100); のようになるべきところ、 数値項目に代入する値が NULL のため  VALUES ('ABC', ); になっているためでしょう。  VALUES ('ABC', NULL); になるように SQL を組み立ててください。 例)  Nz(Me.テキストボックス名,'Null') とか, あるいは、このような関数をかませるとか。 Function SQLNumber(Value As Variant) As String   If IsNumeric(Value) Then     SQLNumber = Value   Else     SQLNumber = "'Null'"   End If End Function

noname#258812
質問者

お礼

標準モジュールで関数を用意してNullが飛んできたら明示的にNullをセットするようにしてエラーが出なくなりました。 ありがとうございます。

その他の回答 (1)

回答No.1

テーブルの定義で、  ・ 「値要求」が「はい」になっていませんか?  ・ 主キーにしていませんか?

noname#258812
質問者

補足

回答ありがとうございます >テーブルの定義で、 > ・ 「値要求」が「はい」になっていませんか? 「いいえ」になっています > ・ 主キーにしていませんか? 主キーにしていません テーブル定義で規定値をNullにしても同じエラー(3134)が出ます

関連するQ&A

  • 時刻型にNULLでセットしたい

    アクセスのデータベースのフィールドを日付/時刻型にしております。aspでINSERTを使用しています。テキスト型でしたら、NULLの許可がありますが、日付/時刻型にはそのような項目がありません。時刻型にNULLでセットしたいのですが、その方法がわかりません。いろいろ調べましたが…。ご伝授の程、よろしくお願い致します。 例. フィールドaにhtmlから引きわたったTimesをセットする。 ※Timesには空白("")がRequestされています。  テーブル名db_1 書き込み(##を使用していません) insert INTO db_1(a)VALUES ('"& Request("Times") &"')" 更新 update db_1 set a=#"& Request ("times") & "# where id = "&Request ("id")&"")

  • ACCESS2000でNULLの使い方が不正です

    Access 2000 のテーブルをテキスト ファイルにエクスポートする際、フィールドに十進型のデータ型が含まれていると『引数が無効です』という既知のバグが発生します。 これを回避する為に、クエリーで、CDbl、CSng、CIntなどの関数を使用してエクスポートを行ったところ、上記現象は回避できたのですが、今度は『NULLの使い方が不正です』のエラーが発生してしまいました。 対象となる数値型フィールドに格納されているデータがNULLであることが原因のようです。 現在開発環境にて試していますが、本番環境においても、必須項目でなければ、数値型フィールドにNULLが格納されている可能性は十分考えらます。 また本番環境では現象回避のためにデータリペアすることもできません。 何か回避策があれば是非教えてください。 また、不明点などがありましたら、ご指摘ください。 宜しくお願いします。

  • insertでのエラーについて

    お世話になります。 アップロードしたバイナリデータを変数に入れて、それをinsertしているのですが、DBに入りません。 テーブルでは、data mediumblob not nullと設定しています。Perlスクリプト内で、次のように書いています。 $sql="insert into data_tbl(data)"; $sql.="values('" . $datafile . "')"; 上記の$datafileにバイナリデータが入っています。 このようにして実行しているのですが、You have an error in your SQL syntax. とエラーになりDBに格納できません。ご教授よろしくお願いします。

  • null→数値にするには?

    何度も質問してすみません。 NULLが格納されているフィールドに 「0」や「1」といった値を入れる為には どういうINSERT INTO文をPHP内で記述すれば宜しいでしょうか? pg_field_is_nullを使ってみたのですが イマイチ値を変更する事ができません。 また、SQL文で「NOT NULL制約」という言葉があるのを知ったのですが、 ALTER TABLE文でテーブルを作る時に、 各フィールドにはnullではなく、「0」を最初から格納したい場合は どういった記述をすれば宜しいでしょうか? 宜しくお願い致します。

  • ACCESSの数値入力について

    テーブルのDBに数値「0001、0002、0003…」と入力させたいのですが、テキスト型ではなく、数値型として入力するにはどうしたらいいですか??

  • NOT NULL制約カラムにNULLが格納される

    SQLite3でテーブル作成する際、カラムをテキスト型にして、NOT NULL制約をつけているのですが、NULLも普通にINSERTされてしまいます なんででしょうか?

  • DBでAUTO_INCREMENTのフィールドの最新の数値を知るには

    PHP+MySQLで開発しています。 自らがDBテーブルに書き込んだレコードの、AUTO_INCREMENT指定してある項目に設定された数値を取得したいのですが、どのようにすればいいのでしょうか。 DB指定 CREATE TABLE test( no INT NOT NULL AUTO_INCREMENT, comment TEXT, PRIMARY KEY(no) ); PHP書き込み $sql = "INSERT INTO test(comment)VALUES('いろは')"; $results = mysql_query($sql,$dbid); このとき、テーブルtestのフィールドnoに設定された数値を知るために、 今はわざわざSQL select MAX(no) from test を発行しています。 これですと、確実性に欠けますし、冗長な気がします。 他に何か効率的な方法があるような気がしますので、 質問いたしました。 よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • INSERT INTOで数値型にNull代入

    Win XP Access 2003 お世話になります。 下記のコードで、 フォームのcmb性別を選択せず登録ボタンを押してINSERTするとエラーになります。 調べた所、数値型フィールドにNullを代入出来ないとありました。 性別フィールドは必須項目にせず選択しない時は空白でレコードに追加にしたいです。 過去ログを調べてほぼ同じ質問を見つけましたが本人さんが自己解決したらしく具体的なコードが記されていません・・・ アドバイス宜しくお願いいたします。 Dim adoCN As ADODB.Connection Dim strSQL As Variant Set adoCN = Application.CurrentProject.Connection strSQL = "INSERT INTO T顧客情報" _ & " (顧客コード" _ & " ,顧客名" _ & " ,性別)" strSQL = strSQL _ & "VALUES (" & Me!txt顧客コード.Value & "" _ & " ,'" & Me!txt顧客名.Value & "'" _ & " ,'" & Me!cmb性別.Value & "')" adoCN.BeginTrans adoCN.Execute strSQL If Err.Number = 0 Then adoCN.CommitTrans MsgBox Format(txt顧客コード, "0000000") & Chr(13) & txt顧客名 & Chr(13) & "を登録しました。", 64, "確認! 登録" Else adoCN.RollbackTrans MsgBox Format(txt顧客コード, "0000000") & Chr(13) & txt顧客名 & Chr(13) & "の登録に失敗しました。", 64, "確認! 登録" End If adoCN.Close Set adoCN = Nothing

  • BULK INSERTについて

    CSVをバルクインサートでitemテーブルにBULK INSERTする際に、 下記のようなSQL文を使っているのですが、CSV内のブランク文字は 実行後にNULLになってしまいます。 やりたいことはNULLではなく空白文字("")にしたいのですが、 下記のSQL文をどのように変えればよいのでしょうか。 または、CSVを変更する方法でもよいです。 BULK INSERT item FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 大変お手数ですが、 わかる方がいらっしゃいましたらよろしくお願いいたします。

  • nativecode=ERROR: relation

    PostgreSQLについて質問なのですが、サーバ移転をしておりまして別のサーバにまったく同じ環境でDBを移行しました。 そこで、テーブルには接続できてまして他のテーブルに書き込んであるレコードは参照できるのですが別のテーブルに書き込もうとすると以下のようなメッセージがでてしまいます。 [db_error: message="DB Error: no such table" code=-18 mode=return level=notice prefix="" info="INSERT INTO tenpo (tenpo,towner,tiku,created,updated,disabled,password) VALUES ('1','test','0000000000','test',NULL,'test',NULL,NULL,'0','now()','now()',TRUE,'128573') [nativecode=ERROR: relation "public.tenpo_tenpo_no_seq" does not exist]"] no such tableと表示されていますがテーブルは存在してます。 テーブルに書かれているデフォルトの記載を削除するとメッセがかわります。 [db_error: message="DB Error: null value violates not-null constraint" code=-29 mode=return level=notice prefix="" info="INSERT INTO tenpo (tenpo,towner,tiku,created,updated,disabled,password)VALUES('1','test','0000000000','test',NULL,'test',NULL,NULL,'0','now()','now()',TRUE,'258237')[nativecode=ERROR: null value in column "tenpo_no" violates not-null constraint]"] 書き込みができない理由などのお知恵をお借りできればと思います。 よろしくお願いします。