- - PR -
VB.NET2003 ACCESS パラメータクエリで"INSERT INTO ステートメントの構文エラーです。"
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-04-23 00:06
はじめまして。
VB.NET初心者です。 パラメータクエリでACCESSにデータを挿入したいのですが、うまく行きません。 是非、皆様のお力を貸して下さい。 現象: ?を使ってパラメータクエリを作成しているが、複数のパラメータを設定して実行するとエラーとなってしまいます。 パラメータが1つの時は、エラーにならずにデータがINSERTされます。 (パターン1のSQL文) また、"INSERT INTO ステートメントの構文エラーです。"というエラーですが、 ACCESSでクエリにSQL文を貼り付けると、パラメータの入力ウィンドウが出てきて、パラメータを入力するとデータがINSERTされます。 (パターン2のSQL文) パターン1."INSERT INTO テーブル名(フィールド1) VALUES(?)" パターン2."INSERT INTO テーブル名(フィールド1,フィールド2) VALUES(?,?)" 以下がソースになります。 'SQL文の組み立て Private Function makeInsertSql(ByVal strItem() As String, _ ByVal strTblName As String) As String Dim strSql 'SQL文作成用 'SQL文の組み立て strSql = "INSERT INTO " & strTblName & "(" strSql = strSql & strItem(0) & "," & strItem(1) & ")" strSql = strSql & " VALUES(?,?)" Return strSql End Function Public Function setNewRegist(ByVal strItem() As String, _ ByVal strVal() As String, _ ByVal strTblName As String) As Boolean Dim oleCon As OleDb.OleDbConnection Dim oleCmd As OleDb.OleDbCommand Dim strSql As String setNewRegist = False Try 'コネクションOpen oleCon = New OleDb.OleDbConnection oleCon.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & PClsAppInfo.MdbPath & ";" & _ "Persist Security Info=False" oleCon.Open() 'SQL作成 strSql = makeInsertSql(strItem, strVal, strTblName) oleCmd = New OleDb.OleDbCommand(strSql, oleCon) 'パラメータセット oleCmd.Parameters.Clear() oleCmd.Parameters.Add("param1", strVal(0)) oleCmd.Parameters.Add("param2", strVal(1)) 'SQL発行 oleCmd.ExecuteNonQuery() setNewRegist = True Catch ex As Exception Throw ex Finally 'DB接続を閉じる If Not oleCon Is Nothing Then oleCon.Close() End If End Try End Function 初歩的な質問で申し訳ないのですが、よろしくお願い致します。 | ||||||||
|
投稿日時: 2006-04-23 00:13
として定義しているなら。
としたらどうなりますか? | ||||||||
|
投稿日時: 2006-04-23 00:20
かるあ様返信ありがとうございます。
としてみましたが、結果はまったく同じでした。。。 | ||||||||
|
投稿日時: 2006-04-23 00:38
makeInsertSql の引数の数が、定義と使っている箇所で違いますが、どちらが正しいですか?
_________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-04-23 00:44
囚人様
すいません。 色々と試している最中で書き込みしてしまったので、不整合がありました。
となります。 makeInsertSqlの定義の方が正しいです。 | ||||||||
|
投稿日時: 2006-04-23 01:03
は makeInsertSql の返却値を貼り付けているんですよね makeInsertSql を使わないで(静的にSQLを記述して)試してみませんか? | ||||||||
|
投稿日時: 2006-04-23 01:11
かるあ様
ご返信ありがとうございます。 はい。 makeInsertSqlの返却値を貼り付けています。 原因がわからなかった場合には、最終的にはSQLをパラメータを使わず組み立てるしかないので、一旦その方向で進めてみます。 | ||||||||
|
投稿日時: 2006-04-23 08:28
Accessは位置指定(Positional Parameter)のパラメータしかサポートして いないのでパラメータに値を代入するときアドホッククエリのパラメータ(?)と 同じ順番で値を代入する必要があります。以下の点を確認してみてください。 1)INSERTのパラメータ順とAddメソッドで値を代入する順番が対応するか。 2)Addパラメータで代入する値のデータ型が一致するか (データ型を指定して値を代入してみては) _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |