【问题标题】:Excel - SQL 'INSERT INTO' Query Syntax ErrorExcel - SQL 'INSERT INTO' 查询语法错误
【发布时间】:2017-06-06 01:22:27
【问题描述】:

我正在尝试使用 Excel 中的数据对 MS Access 数据库进行简单的插入查询。我正在使用带有硬编码值的参数化查询进行测试。直接在 Access 中运行查询可以,但尝试通过 VBA 执行它会导致语法错误。该查询当前正在插入除 Access 表中自动生成的 ID 之外的所有字段。

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

【问题讨论】:

  • 您能分享您收到的确切错误消息吗?
  • '-2147217900:INSERT INTO 语句中的语法错误。'
  • 如果您打印 cmd 文本,SQL 会显示什么?
  • 如果你在你的sql语句中提供?,我想这个谜就会解开。输入值时仔细检查数据类型。

标签: sql excel vba ms-access


【解决方案1】:

该一般错误有多种原因,但同一查询在 MSAccess.exe 中有效的事实表明 保留字 是原因。

确实,Jet reserved wordsMS Access reserved word。两者都是命名函数和其他方法的参数。有时 .exe 可能比较宽松,而 ODBC 连接则比较严格。因此,请考虑使用反引号或方括号转义此类词,或完全避免此类词。

.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 (?,?,?,?,?,?,?,?);"

【讨论】:

  • 这就是问题所在。谢谢!
  • 太棒了!乐意效劳。请接受解决方案以确认解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多