【先着1,000名様!】1,000円分をプレゼント!

INSERT INTOステートメント構文エラーについての質問です

VB6.0+Access2003で開発を行っていますがInsert文の発行で上記のエラーメッセージが表示されます。

エラーとなっている部分は
Set rst = Ado_connect.Execute(strINS)
です。
rstはDim rst As ADODB.Recordsetと宣言しています。

Debug.Print strINSでinsert文を取得し、クエリでSQLを実行したところ、正常に追加されました。

様々なサイト等を調べて単純にSQLがおかしいだけだと思って修正をしていたのですがクエリでSQLが正常に実行できたということはSQLに問題がないということでしょうか?

正直手詰まりといった感じでSQL以外に何を修正すれば良いかわからないというのが現状でこちらに質問させていただきました。

皆様の知恵を貸してください。どうかよろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

参考URLと同じでしょうか?



参考URL:http://okwave.jp/qa/q4640669.html
    • good
    • 0
この回答へのお礼

marlights様>
その通りでした。
無事に追加できました。
ありがとうございます。

お礼日時:2010/05/20 09:45

SQL文はパラメータを含んでいるので


パラメータを宣言しておく必要が
あるのでは。

http://support.microsoft.com/kb/181782

また、Parameters.Addメソッドでググってみてください。

Parameters.Add()の設定は単に
obj.Parameters.Add(パラメータ名、データ型)
です。
設定は単純なものですが、設定には少し
とまどうものがあるかもしれません。

参考 VB.NETでのやりとりです。OKWAVEでも過去ログにあるでしょう。
http://bbs.wankuma.com/index.cgi?mode=al2&namber …
    • good
    • 0
この回答へのお礼

piroin654様>
詳しく説明していただきありがとうございます。
今後の参考にさせていただきたいと思います。

お礼日時:2010/05/20 09:48

通勤時間の最後のカンマは不要です。



strINS = strINS + "'" & .Combo(1).Text & "',"

strINS = strINS + "'" & .Combo(1).Text & "'"


あと、数値型に文字型を代入しても大丈夫だったっけ?

'年齢
strINS = strINS + .Combo(0).Text & ","
'通勤時間
strINS = strINS + .Combo(1).Text

としたほうがいいのでは?
    • good
    • 0
この回答へのお礼

nag0720様>
回答ありがとうございます。

>通勤時間の最後のカンマは不要です
ご指摘ありがとうございます。カンマは消し忘れていました。

>あと、数値型に文字型を代入しても大丈夫だったっけ?
ACCESSのDBをテキスト型に変更しました。


ご指摘いただいた点を変更し、再度実行してみましたが、やはり同じところで同じメッセージがでてきます。
もうちょっと過去ログやプログラムを洗い直して検証しなおしてみます。
ありがとうございました。

お礼日時:2010/05/19 17:53

その「上記のエラー」やSQLそのものを書いてくれないと、答えようがないんですけど・・・



確かに、SQLを直接実行して成功するが、プログラムからだと失敗する、というケースはあります。

たとえば、SQLに余計な区切り文字(Oracleなら;)を書いているとか・・・

この回答への補足

kotoby2003様>
早速の回答ありがとうございます。
>その「上記のエラー」やSQLそのものを書いてくれないと、答えようがないんですけど・・・
申し訳ございません。記述を忘れていました。

SQLはこのように記述しています。
With aaa
strINS = "INSERT INTO TEST1 ("
strINS = strINS + "NAME,"
strINS = strINS + "INITIAL,"
strINS = strINS + "COUNTRY,"
strINS = strINS + "AGE,"
strINS = strINS + "JIKAN"
strINS = strINS + ") VALUES ("
'名前
strINS = strINS + "'" & .Txt(0).Text & "',"
'名前(イニシャル)
strINS = strINS + "'" & .Txt(1).Text & "',"
'国籍
strINS = strINS + "'" & .Txt(2).Text & "',"
'年齢
strINS = strINS + "'" & .Combo(0).Text & "',"
'通勤時間
strINS = strINS + "'" & .Combo(1).Text & "',"
strINS = strINS + ")"

Set rst = Ado_connect.Execute(strINS)の部分で
「INSERT INTOステートメントの構文エラー」です。とエラーメッセージが表示されます。

>確かに、SQLを直接実行して成功するが、プログラムからだと失敗する、というケースはあります。
勉強になりました。エラーメッセージでもそう言っているのでやはりinsert文がどこかプログラムから実行する上でおかしいのかなと思います。

もう一つ補足ですが、Combo()は年齢(18~60)、通勤時間(5,10,15,20....)とコンボボックスで作成し、DBは数値型にしています。

補足日時:2010/05/19 17:04
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccess2010 「演算子がありません」エラー

フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。

実行時エラー 3075
クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。

コードを数値型からテキスト型に変更したのが原因だと思います。
エラーが出ない方法を教えていただければ助かります。
よろしくお願いいたします。

Dim rst As Recordset
Dim strWhere As String

Set rst = Me.RecordsetClone
With rst
If .RecordCount = 0 Then
Beep
Exit Sub
End If
.MoveFirst
strWhere = ""
Do Until .EOF
strWhere = strWhere & IIf(Len(strWhere) > 0, ",", "") & !コード
.MoveNext
Loop
.Close
strWhere = "コード IN (" & strWhere & ")"
End With

DoCmd.OpenForm "フォーム", , , strWhere

フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。

実行時エラー 3075
クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。

コードを数値型からテキスト型に変更したのが原因だと思います。
エラーが出ない方法を教えていただければ助かります。
よろしくお願いいたします。

Dim rst As Recordset
Dim strWhere As String

Set rst = Me.RecordsetClone
With rst
If .RecordCount = 0 Then
Beep
Exit Sub
End If
...続きを読む

Aベストアンサー

補足をよんでいなかったので、In句の中身の使い道
がわかりませんでした。

コード IN(○○,××)

○○,××は、元フォームに表示されているレコードになりますので


ということならば、No3の方の回答の、

strWhere = ",'" & !コード & "'"



strWhere = strWhere & ",'" & !コード & "'"

にすればよろしいかと。

Q抽出条件でデータ型が一致しません。のエラーメッセージが出る

フォームで入力された値を、
次のファイルでクエリを読み込むときに代入するASPを作成しましたが、実行しようとすると、
「データ型が一致しません。」のエラーメッセージが出ます。
DBはACCESSを使用しています。ACCESSの対象テーブルで、
データ型を「テキスト型」にすると問題ないのですが、
「数値型」にすると、「データ型が一致しません」の
エラーメッセージになります。
フォームでは、プルダウンで「数値」を選択するようになっています。
宜しくお願いします。

Aベストアンサー

Where区に指定した条件のフィールドが数値なら『'』でくくる必要がありません

Set rs = db.Execute("SELECT テーブル3.* FROM テーブル3 WHERE (テーブル3.番号)=" & bangou)
といった具合に修正してみましょう

『'』でくくる必要があるのは対象のフィールドが文字列の場合です

Qaccessの SQL文 INSERT命令

次のような命令文でを実行すると [INSERT INTOステートメントの構文エラーです。] と エラーメッセージがかえってきます。
文中 介護メモはテーブル名、()内の項目名はフォーム上に定義したテキスト項目名です。テーブルのフィールドは()内のほかデータ型がオートナンバー形式のIDが定義されています。

DoCmd.RunSQL "insert into 介護メモ value(,利用者,日付,身体単位,生活単位,開始時刻)", -1

Aベストアンサー

質問に書かれている、「フォーム上に定義したテキスト項目」とあるのが、フォームのモジュールに定義してあるものなのか、フォーム上のテキストボックスなのか?
フォーム上とありましたので、テキストボックスと判断し最初の回答をしたのですが、実際のテーブルの項目のデータ型が不明なので、詳細は書きませんでしたが、混乱されてもいけませんので フォーム上のテキストボックスの場合の時の参考までに。

利用者:テキスト
日付:日付型
ほかは、数値扱い(開始時刻はたぶん数値ではないと思いますが)
とした場合 No2さんの回答の様に
Dim Sqlstr As String
Sqlstr = "insert into 介護メモ (利用者,日付,身体単位,生活単位,開始時刻) " & _
"values ("" & Me!利用者 & "",#" & Me!日付 & "#," & Me!身体単位 & _
"," & Me!生活単位 & "," & Me!開始時刻 & ")"
DoCmd.RunSQL Sqlstr

QVBAのAccessでDATE型のINSERT

テーブルに今日の日付でインサートしたいのですが、なぜか、まったく違う日付になってしまいます。
わかる方教えてください。
よろしくお願いします。

INSSQL = "INSERT INTO aaa(test)" _
& " Values(" & Format   (Date, "yyyy/mm/dd") & ");"

Aベストアンサー

INSSQL = "INSERT INTO aaa(test)" _
& " Values(#" & Format(Date, "mm/dd/yyyy") & "#);"

こうかな?

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。

Q「Nullの使い方が不正です」のエラー

AccsessとVB間でデータの参照・登録・削除を行うプログラムを作成中です。
テキストボックスにデータを入力せずに更新するとAccess側はNull値が入るので、参照をした際に
「Nullの使い方が不正です」のエラーが表示されます。

Null値が表示可能ならその方法を教えてください。

Aベストアンサー

読み込んだ際にIsNull()で判断してみては?
If IsNull(Fields) Then
Text1.Text = ""
Else
Text1.Text = Fields
End If

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

したいことはレコードの挿入をSQL文で変数を使用して処理したいのですがうまく動作してくれません

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'(変数1)','(変数2)','(変数3)')"

変数の部分が置き換わりません、いろいろ調べてみたのですがどうもわかりませんvaluesでは変数を使えないのでしょうか?

もしそうだとするとどのようにすればレコードを挿入するSQL文で変数を利用できるのかをおしえていただけないでしょうか

Aベストアンサー

文字列なんで、&で連結すればOKです。

StrSQL_1 = _
"insert into 行先情報テーブル (社員ID, 行先, 帰社予定時刻, 備考)" & _
"values (7,'" & 変数1 & "','" & 変数2 & "','" &(変数3)& "')"

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

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

尚、まだDBにはテストデータしか入っていないので、テーブルの変更は問題ありません。

Aベストアンサー

> 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

> AccessVBAで数値型にNULLをInsertするとエラー(3134)になりますが、

エラー(3134)は「構文エラー」ですから
テーブルの問題ではありません。

 INSERT INTO テーブル ( テキスト項目, 数値項目 )
 VALUES ('ABC', 100);
のようになるべきところ、
数値項目に代入する値が NULL のため
 VALUES ('ABC', );
になっているためでしょう。
 VALUES ('ABC', NULL);
になるように SQL を組み立ててください。
例)
 Nz(Me.テキストボックス名,'Null')
とか,
あるいは、このような関数をかませると...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QAccessのテーブルデータを一気にVBAで追加したい・・

Accessのテーブルデータを一気にVBAで追加したい・・

Accessに一時商品登録データというテーブルがあり、
問題なければ商品登録データにデータを流し込みたいと思っています

テーブルのデータ構造は全く同じです

VBAで一時商品登録のテーブルから一件ずつデータを読み取って
商品登録データに追加することは出来るのですが
一気にデータを追加する方法があれば教えていただけないでしょうか?

よろしくお願いいたいます

Aベストアンサー

本当にいろいろな方法があります。

一番簡単なのは、
あらかじめ「追加クエリ」を作成しておき

 Docmd.OpenQuery "追加クエリ名"

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute "追加クエリ名"

追加クエリを使用しない場合は
追加クエリの SQL文 に相当するSQL を 実行。

 strSQL="INSERT INTO 商品登録データ SELECT 一時商品登録データ.* FROM 一時商品登録データ"

 Docmd.RunSQL strSQL

あるいは DAO で

 Set dbs = CurrentDB
 dbs.Excute strSQL

とか。

直書き、間違いがあったら御免。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング