- PR -

VB.NET2003 ACCESS パラメータクエリで"INSERT INTO ステートメントの構文エラーです。"

投稿者投稿内容
K5
常連さん
会議室デビュー日: 2006/04/22
投稿数: 25
投稿日時: 2006-04-23 14:07
Access様ご返信ありがとうございます。

引用:

1)INSERTのパラメータ順とAddメソッドで値を代入する順番が対応するか。

2)Addパラメータで代入する値のデータ型が一致するか
  (データ型を指定して値を代入してみては)



1)に関しては、順番はあっています。

2)に関しては、共にACCESSのテキスト型です。
フィールドサイズは、5と4です。
実際に入る値は、1つめのパラメータが"00104"で、2つめのパラメータが"2006"になります。

パラメータの型を指定するというのは、
oleCmd.Parameters.Add("param1", cstr(strVal(0)))
の様にするということであってますでしょうか。

または、
oleCmd.Parameters.Add("@param1", OleDb.OleDbType.VarWChar)
oleCmd.Parameters("@param1").Value = strVal(0)
oleCmd.Parameters.Add("@param2", OleDb.OleDbType.VarWChar)
oleCmd.Parameters("@param2").Value = strVal(1)
(この場合、SQL文の?も@param1、@param2に変えました)
のようにするということでしょうか。

どちらも試してみましたが結果は同じでした。



[ メッセージ編集済み 編集者: K5 編集日時 2006-04-23 14:08 ]
K5
常連さん
会議室デビュー日: 2006/04/22
投稿数: 25
投稿日時: 2006-04-23 16:20
皆様ご返信ありがとうございます。

静的にSQL文を作成したところ、同じように
"INSERT INTO ステートメントの構文エラーです。" のエラーがでました。
作成したSQLをACCESSのクエリに貼り付けると実行できました。

参照(SELECT)は、出来ているので、ACCESSの設定の問題ではないかという気がしてきました。

先頭の書込みにも書きましたが、VB.NET上から
"INSERT INTO TESTTBL(KKR_NO) values('90001')"
は実行され、
"INSERT INTO TESTTBL(KKR_NO,YEAR) values('90001','2006')"
は実行されないということです。

お手上げ状態になっています。
よろしくお願いします。

[ メッセージ編集済み 編集者: K5 編集日時 2006-04-23 17:09 ]
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-23 17:27
引用:

K5さんの書き込み (2006-04-23 16:20) より:

"INSERT INTO TESTTBL(KKR_NO) values('90001')"
は実行され、
"INSERT INTO TESTTBL(KKR_NO,YEAR) values('90001','2006')"
は実行されないということです。



YEARって型はなんですか?
DATE型(ACCESSにあったっけ?)だとしたら
キャストの必要があると思うんですけど
K5
常連さん
会議室デビュー日: 2006/04/22
投稿数: 25
投稿日時: 2006-04-23 17:44
かるあ様

ご返信ありがとうございます。

引用:

YEARって型はなんですか?



テキスト型です。
かるあ様の書込みでピンと来ました。
YEARはACCESSで関数がないか調べたら、ありました・・・。
予約語のなのでダメだったということでした。
名前を"FISICALYEAR"に変更したら実行されました。

ご迷惑お掛けしました。
本当にありがとうございました。
大変たすかりました。

フィールド名が"YEAR"でも、ACCESSのクエリからは実行できる。
プログラムからは、実行できないということがわかりました。
パラメータクエリでも実行できました。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-23 17:51
引用:

フィールド名が"YEAR"でも、ACCESSのクエリからは実行できる。
プログラムからは、実行できないということがわかりました。


それだったら、Access の方からは実行できなくて、プログラムからは実行できるってなりそうですけどね。

まぁそういうことがあるので、フィールド名は[]でくくると良いですよ。
_________________
囚人のジレンマな日々
K5
常連さん
会議室デビュー日: 2006/04/22
投稿数: 25
投稿日時: 2006-04-23 17:58
囚人様

引用:

まぁそういうことがあるので、フィールド名は[]でくくると良いですよ。



ありがとうございます。
フィールド名を[]でくくることを知りませんでした。
全て[]でくくって実装しようと思います。
本当にありがとうございます。

スキルアップ/キャリアアップ(JOB@IT)