使用'插入'带有ACE OLEDB的Excel工作表上带有列名的SQL语句失败

时间:2017-03-03 15:42:53

标签: excel vba ms-jet-ace

因此,我希望对如何将数据存储到工作表以及希望使用SQL OLEDB Provide for Excel和标准SQL语句进行训练。插入列名称不起作用,但至少对我来说。一些代码演示了这个问题。期望此处显示的两种表单都可以使用W3 Schools SQL INSERT INTO Statement

Option Explicit

Sub MinimalCompleteVerifiableExample()
    'Tools->References "Microsoft ActiveX Data Objects 2.8 Library"

    Dim wsNew As Excel.Worksheet
    Set wsNew = ThisWorkbook.Worksheets.Add

    wsNew.Cells(1, 1) = "TimeStamp"
    wsNew.Cells(1, 2) = "Path"


    Dim oConn As ADODB.Connection
    Set oConn = New ADODB.Connection

    Debug.Assert UBound(Split(ThisWorkbook.Name, ".")) > 0  '* Workbook needs to be saved

    oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ThisWorkbook.FullName & ";" & _
           "Extended Properties='Excel 12.0 Macro'"


    Dim rsTestRead As ADODB.Recordset
    Set rsTestRead = New ADODB.Recordset
    rsTestRead.Open "Select * from [" & wsNew.Name & "$] AS P", oConn, adOpenStatic

    Debug.Assert oConn.Errors.Count = 0
    Debug.Assert rsTestRead.Fields.Item(0).Name = "TimeStamp"
    Debug.Assert rsTestRead.Fields.Item(1).Name = "Path"

    Dim sSQL As String
    sSQL = "insert into [" & wsNew.Name & "$] (TimeStamp,Path) VALUES ('31-Dec-2015','C:\temp');"  'DOES NOT WORK
    'sSQL = "insert into [" & wsNew.Name & "$]  values ('25-Dec-2015','C:\temp')" 'works

    Stop
    oConn.Execute sSQL
    Debug.Assert oConn.Errors.Count = 0
    Stop
End Sub

On在INSERT INTO语句中收到"语法错误的错误消息。"

1 个答案:

答案 0 :(得分:1)

似乎在列名称

周围加了方括号
    Dim sSQL As String
    sSQL = "insert into [" & wsNew.Name & "$] ([TimeStamp],[Path]) VALUES ('31-Dec-2015','C:\temp');"