查询表达式插入语句中的VBA Excel语法错误缺少运算符

时间:2012-11-29 02:02:23

标签: database vba access-vba

此程序背后的前提是获取几个不同的Excel工作表并将其输入到访问数据库中。一切正常,直到我的执行语句产生以下错误:

Run-time error '-2147217900 (80040e14)':
Syntax error (missing operator) in query expression 'Alabama AM University'

问题似乎出现在我的执行语句中处理“school”变量的部分。 下面是代码。

Sub updateData()

Dim cn As New ADODB.Connection
Dim row As Integer
Dim col As Integer
Dim srcRow As Integer
Dim srcCol As Integer
Dim filename As String
Dim targetWorkbook As Workbook
Dim targetSheet As Worksheet
Dim reportYear As String
Dim state As String
Dim school As String
Dim campus As String
Dim dataLabel As String
Dim dataValue As Long


On Error Resume Next ' these lines should allow you to connect.  Depending on your version of windows, only one will execute without error.
  cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\universityCrime.mdb" & ";"
  cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.Path & "\universityCrime.mdb" & ";"
On Error GoTo 0

'Starting here!
row = 6
col = 3
srcRow = 1
srcCol = 1

Application.ScreenUpdating = False

filename = Dir(ThisWorkbook.Path & "\data\*.xls")

'Loops through all the file names in the data directory
Do Until filename = ""

    Set sourceWorkbook = Application.Workbooks.Open(ThisWorkbook.Path & "\data\" & filename)
    Set sourceSheet = sourceWorkbook.Sheets(1)


    reportYear = Right(sourceSheet.Range("A4").Value, 4)
    state = Left(sourceSheet.Range("A2").Value, 1) & LCase(Mid(sourceSheet.Range("A2").Value, 2))

    Do Until sourceSheet.Cells(row, 1).Borders(xlEdgeBottom).LineStyle = 1
        school = sourceSheet.Cells(row, 1).Value
        campus = sourceSheet.Cells(row, 2).Value

        Do Until sourceSheet.Cells(row, col) = ""
            dataLabel = sourceSheet.Cells(5, col).Value
            dataValue = sourceSheet.Cells(row, col).Value

            If campus = "" Then
                cn.Execute "insert into crimedata(reportYear, state, school, campus, dataLabel, dataValue)values(" _
                & reportYear & ", " _
                & state & ", " _
                & school & ", " _
                & campus & ", " _
                & dataLabel & ", " _
                & dataValue & ")"
            Else:
                cn.Execute "insert into crimedata(reportYear, state, school, campus, dataLabel, dataValue)values(" _
                & reportYear & ", " _
                & state & ", " _
                & school & ", " _
                & "NULL, " _
                & dataLabel & ", " _
                & dataValue & ")"
            End If

            srcCol = 1
            srcRow = srcRow + 1
            col = col + 1
        Loop

        col = 3
        row = row + 1
    Loop

    row = 6
    sourceWorkbook.Close
    filename = Dir
Loop

cn.Close
Application.ScreenUpdating = True

End Sub

谢谢!

1 个答案:

答案 0 :(得分:0)

所以@Omnikrys和@patrick choi通过帮助我做了一件好事。事实证明,我需要的只是执行语句的单引号。因此,而不是我的执行语句看起来像这样:

cn.Execute "insert into crimedata(reportYear, state, school, campus, dataLabel, dataValue)values(" _
            & reportYear & ", " _
            & state & ", " _
            & school & ", " _
            & campus & ", " _
            & dataLabel & ", " _
            & dataValue & ")"

我必须在所有恰好是文本变量的东西之间添加单引号:

cn.Execute "insert into crimedata(reportYear, state, school, campus, dataLabel, dataValue) values(" _
                & reportYear & ", '" _
                & state & "', '" _
                & school & "', '" _
                & campus & "', '" _
                & dataLabel & "', " _
                & dataValue & ")"

感谢提示家伙们!它有所帮助。