ここから本文です

ACCESS Inser Into構文 実行時エラー(抽出条件でデータ型が一致しません)について

nnr********さん

2014/2/1722:59:25

ACCESS Inser Into構文 実行時エラー(抽出条件でデータ型が一致しません)について

ACCESS Inser Into構文 実行時エラー(抽出条件でデータ型が一致しません)について

宜しくお願いいたします。
ACCESSのバージョンは2000、OSはXP HEです。

Insert Into構文を使ってクエリで抽出したレコードをテーブルに渡して
います。

strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日)
Values('" & Me.商品番号 & "','" & Me.仕入価格 & "','" & Me.仕入日 & "')"
CurrentProject.Connection.Execute strSql


各フィールドに値があれば問題ないのですが、一部の商品は仕入日が不明
の物があり空白になっています。
空白があると上記のエラーが出るため、不明な物は架空の仕入日をその都度
入れているのですが、もし仕入日が無い場合でも、架空の仕入日を入れずに
空白のままテーブルに渡す方法はあるのでしょうか。

ご教授のほど、宜しくお願いいたします。

補足tkyk_hal様、kimagure_goma_neko様、早速のご回答ありがとうございました。

お陰様で空白のまま渡すことが出来るようになったですが、備考欄が必要になり
作ったのですが、こちらも空白になる可能性があります。

そこで、教えていただいた方法を元に、両方空白、どちらか空白でも出来るように
と、色々考えてみたのですが、どうしてもうまくいきません。

引き続きご教授のほど、宜しくお願いいたします。

閲覧数:
2,864
回答数:
2
お礼:
100枚

違反報告

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

kim********さん

編集あり2014/2/1902:53:44

テーブル設計で仕入日がNULL値を受け付ける様になっている場合限定ですが、

--
Dim str仕入日 As String
str仕入日 = IIF(NZ(Me.仕入日,"")="", "NULL", "'" & Me.仕入日 & "'")
strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日)
Values('" & Me.商品番号 & "','" & Me.仕入価格 & "'," & str仕入日 & ")"
CurrentProject.Connection.Execute strSql
--
で行けると思います。

---補足
備考欄がある場合下記でどうでしょう?
--
Dim str仕入日 As String
Dim str備考 As String
str仕入日 = IIF(NZ(Me.仕入日,"")="", "NULL", "'" & Me.仕入日 & "'")
str備考 = IIF(NZ(Me.備考,"")="", "NULL", "'" & Me.備考 & "'")
strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日,備考)
Values('" & Me.商品番号 & "','" & Me.仕入価格 & "'," & str仕入日 & "," & str備考 & ")"
CurrentProject.Connection.Execute strSql
--

質問した人からのコメント

2014/2/20 23:52:04

kimagure_goma_neko様、ご教授いただいた方法で問題を解決することが出来ました。誠にありがとうございました。お陰様で作業が簡素化できます。 tkyk_hal様もありがとうございました。 フィールドの型ですが、空白がなければエラーが発生しなかったため、型を気にしていませんでしたので、もう少し型について勉強していきたいと思います。 お二方とも本当にありがとうございました。

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

1〜1件/1件中

tky********さん

編集あり2014/2/1911:24:34

全てのフィールドがテキスト型というのが気になるのですが、
それでいいのでしょうか。

仕入日がフォームに入力されているかどうかでSQLを変えるのは
条件分岐すれば良いと思います。

If IsNull(Me.仕入日) Then
strSql = "Insert Into 商品テーブル(商品番号,仕入価格) Values('" & Me.商品番号 & "','" & Me.仕入価格 & "');"
Else
strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日) Values('" & Me.商品番号 & "','" & Me.仕入価格 & "','" & Me.仕入日 & "');"
End If


もしくは

strSql = "Insert Into 商品テーブル(商品番号,仕入価格" & IIf(IsNull(Me.仕入日),"",",仕入日") & ") Values('" & Me.商品番号 & "','" & Me.仕入価格 & "'" & IIf(IsNull(Me.仕入日),"",",'" & Me.仕入日 & "'") & ");"


追記
最初の回答にも書きましたが、全てのフィールドがテキスト型で良いので
しょうか。今回エラーが出ているのは、日付/時刻型の仕入日に長さ0の
文字列''を挿入しようとしているのでエラーが出ているのではないかと
思います。テキスト型であれば''を挿入してもエラーとはなりませんから。

今回の場合、備考欄はさすがにテキスト型もしくはメモ型でしょうから、
''を挿入してもエラーとはなりません。ですので、

If IsNull(Me.仕入日) Then
strSql = "Insert Into 商品テーブル(商品番号,仕入価格,備考欄) Values('" & Me.商品番号 & "','" & Me.仕入価格 & "','" & Me.備考欄 & "');"
Else
strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日,備考欄) Values('" & Me.商品番号 & "','" & Me.仕入価格 & "','" & Me.仕入日 & "','" & Me.備考欄 & "');"
End If


で問題ありません。ただ、推測のとおり仕入日が日付/時刻型であるなら、
正しくはElseの部分が

strSql = "Insert Into 商品テーブル(商品番号,仕入価格,仕入日,備考欄) Values('" & Me.商品番号 & "','" & Me.仕入価格 & "',#" & Me.仕入日 & "#,'" & Me.備考欄 & "');"


となります。他のフィールドもテキスト型で良いのかは甚だ疑問ですが。


追追記
一部"が多かったので修正しました。

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

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

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

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

閉じる

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

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

閉じる