2017-06-05 22 views
0

Excelのデータを使用してMS Accessデータベースへの簡単な挿入クエリを試みています。私はテストのためにハードコードされた値を持つパラメータ化されたクエリを使用しています。 Accessで直接クエリを実行するが、VBAでクエリを実行しようとすると構文エラーが発生する。クエリは現在、Accessテーブルに自動生成されたIDを除くすべてのフィールドを挿入しています。Excel - SQL 'INSERT INTO'クエリの構文エラー

Sub Test_SQL() 
    Dim conn As ADODB.Connection 
    Dim cmd As ADODB.Command 
    Dim result 
    Dim id As Integer 

    Dim year As Integer 
    Dim month As String 
    Dim combocode As String 
    Dim credamt As Double 
    Dim qty As Integer 
    Dim itemcode As String 
    Dim sepbundleamt As Double 
    Dim prodname As String 

    '*********query variables******************** 
    year = 2017 
    month = "July" 
    combocode = "COMBCOD1" 
    credamt = 420 
    qty = 21 
    itemcode = "ITEMCOD1" 
    sepbundleamt = 12 
    prodname = "Test Product" 

    '********open DB connection and execute insertion****** 
    On Error GoTo ErrorHandler 

    Set conn = New ADODB.Connection 
    Set cmd = New ADODB.Command 
    With conn 
     .Provider = "Microsoft.ACE.OLEDB.12.0;" 
     .ConnectionString = [redacted] 
     .Open 
    End With 

    With cmd 
     .ActiveConnection = conn 
     .CommandType = adCmdText 
     .CommandText = "INSERT INTO SB_DSLR (Year, Month, ComboCode, CreditAmt, Qty, ItemCode, SepBundleAmt, ProductName) VALUES (?,?,?,?,?,?,?,?);" 
    End With 
    With cmd.Parameters 
     .Append cmd.CreateParameter("Year", adInteger, adParamInput, 4, year) 
     .Append cmd.CreateParameter("Month", adWChar, adParamInput, 10, month) 
     .Append cmd.CreateParameter("ComboCode", adWChar, adParamInput, 10, combocode) 
     .Append cmd.CreateParameter("CreditAmt", adDouble, adParamInput, 10, credamt) 
     .Append cmd.CreateParameter("Qty", adInteger, adParamInput, 10, qty) 
     .Append cmd.CreateParameter("ItemCode", adWChar, adParamInput, 8, itemcode) 
     .Append cmd.CreateParameter("SepBundleAmt", adDouble, adParamInput, 10, sepbundleamt) 
     .Append cmd.CreateParameter("ProductName", adWChar, adParamInput, 100, prodname) 
    End With 

    cmd.Execute 
    conn.Close 
    Set cmd = Nothing 
    Exit Sub 

ErrorHandler: 
    MsgBox (Err.Number & ": " & Err.Description) 
    If conn.State = adStateOpen Then 
     conn.Close 
    End If 
    Set cmd = Nothing 
End Sub 
+1

正確なエラーメッセージを共有できますか? – Mureinik

+0

'-2147217900:INSERT INTO文の構文エラーです。' –

+2

cmdテキストを印刷するとSQLには何が表示されますか? –

答えて

1

は、その一般的なエラーのために複数の理由がありますが、同じクエリがMSACCESS.EXEで働くということは、予約語が原因であることを示唆しています。

実際、Jet reserved wordsですがMS Access reserved wordです。どちらも、他のメソッドの名前付きファンクションおよびパラメータです。 ODBC接続がより限定的であるのに対し、.exeは寛容になることがあります。したがって、そのような言葉をバッククォートまたは大括弧で逃すこと、またはそのような言葉を全く避けることを検討してください。

.CommandText = "INSERT INTO SB_DSLR (`Year`, `Month`, ComboCode, CreditAmt, Qty, ItemCode, SepBundleAmt, ProductName) VALUES (?,?,?,?,?,?,?,?);" 

.CommandText = "INSERT INTO SB_DSLR ([Year], [Month], ComboCode, CreditAmt, Qty, ItemCode, SepBundleAmt, ProductName) VALUES (?,?,?,?,?,?,?,?);" 
+0

それは問題でした。ありがとう! –

+0

素晴らしい!喜んで助けてください。解決を確認するために解決策を受け入れてください。 – Parfait

関連する問題