【发布时间】: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语句中提供
?,我想这个谜就会解开。输入值时仔细检查数据类型。