Form / ListBox" Insert into"语法错误

时间:2014-05-07 15:16:41

标签: insert access-vba syntax-error

我有一个数据库,当用户单击“发送”按钮时,我尝试将表单中包含的信息与列表框中的选定项目一起发送到表中。我有代码设置应该复制我的信息,但得到语法错误,我不知道为什么...我已经尝试了几个不同的东西,无法让它工作。我已经包含以下代码:

Private Sub ctrSend_Click()
Dim intI As Integer
Dim lst As ListBox
Dim varItem As Variant

Set lst = Me![lstShipping]

With lst
    If .ItemsSelected.count = 0 Then Exit Sub
        For Each varItem In .ItemsSelected
            CurrentDb.Execute "INSERT INTO ShipInv ([Order], [ShipDate], [BIN], [SKU], [Lot], [QtyProd])" _
            "VALUES ('" & Me.[ctrSOrder] & "'," & Me.[ctrSDate] & ",'" & .Column(0, varItem) & "'," & .Column(1, varItem) & "," & .Column(2, varItem) & "," & .Column(3, varItem) & ");", dbFailOnError
    Next
End With

End Sub

2 个答案:

答案 0 :(得分:0)

对于这种情况,我总是建议使用一个字符串来保存构造的SQL,以便您可以轻松地将字符串打印到即时窗口,以检查某些值如何破坏您的SQL。

所以,尝试添加

Dim strSQL As String

strSQL = "INSERT INTO ShipInv ([Order], [ShipDate], [BIN], [SKU], [Lot], [QtyProd])" _
        "VALUES ('" & Me.[ctrSOrder] & "'," & Me.[ctrSDate] & ",'" & .Column(0, varItem) & "'," & .Column(1, varItem) & "," & .Column(2, varItem) & "," & .Column(3, varItem) & ");"
Debug.Print strSQL
CurrentDb.Execute strSQL 'remove dbFailOnError temporarily so that failure will stop code

我的盲目猜测是,如果ShipDate是日期字段(而不是文本),则在将其粘贴到SQL之前,您需要使用Format(Me.[ctrSDate], "\#mm\/dd\/yyyy\#"格式化该值。

答案 1 :(得分:0)

我使用了不同的方法,效果很好......

Private Sub ctrSend_Click()
Dim intI As Integer
Dim lst As ListBox
Dim varItem As Variant
Dim rst As DAO.Recordset

Set lst = Me![lstShipping]
Set rst = CurrentDb.OpenRecordset("ShipInv", dbOpenTable)

With lst
    If .ItemsSelected.count = 0 Then Exit Sub
        For Each varItem In .ItemsSelected
            rst.AddNew
            rst!Order = Me.[ctrSOrder]
            rst!EntDate = Date
            rst!ShipDate = Me.[ctrSDate]
            rst!BIN = .Column(0, varItem)
            rst!SKU = .Column(1, varItem)
            rst!Lot = .Column(2, varItem)
            rst!QtyProd = .Column(3, varItem)
            rst.Update
    Next
End With
rst.Close

Set rst = Nothing
MsgBox "Warehouse Inventory Updated", vbOKOnly, "Inventory Confirmation"
End Sub