VBA SQL 插入错误

VBA SQL Error in insert

我的 SQL 插入语句有误。错误是

Syntax error (missing operator) in query expression

我的SQL代码:

INSERT INTO [table1] ('Row 1', 'Row 2', 'Row 3') 
VALUES (2018-2019, Data2, Data3)

Data2Data3 是字符串

这是我用来生成 sql 字符串的代码

为了尝试让它工作,我用字符串文字替换了变量,但我想将变量移回原位。

我有几个错误

首先需要 3 个参数 第二个缺少查询运算符

调用 Functionm 我检查了数据给了我我要找的东西

createSQLforInsert tableName, pkData(0, 0), pkData(0, 1), FiscalYear

Public Function createSQLforInsert(tableName As String, dType As String, role 
As String, FiscalYear As String)
Dim SQL As String
Dim tempString As String
tableName = tableName & "$"
tempString = ""
'SQL = "INSERT INTO [" & tableName & "] ([Fiscal Year], [Type], [role]) "
SQL = "INSERT INTO [" & tableName & "] ([FiscalYear], [Type], [Role]) "
SQL = SQL & "VALUES ([" & FiscalYear & "], [" & dType & "], [" & role & "]) "

Debug.Print SQL

insertQuery SQL
End Function

这是我当前的查询

INSERT INTO [Data-People$] ([FiscalYear], [Type], [Role]) VALUES ([2018-2019], [RA], [Department Data]) 

这给了我一个错误,期望三个参数太少。

列名不是字符串(2018-2019 你的意思是 int -1):

INSERT INTO [table1] ([Row 1], [Row 2], [Row 3]) 
VALUES (2018-2019, @Data2, @Data3)

Data2 和 Data3 应作为参数传递。

如果你的意思是你想直接插入 'Data 2' 和 'Data 3':

INSERT INTO [table1] ([Row 1], [Row 2], [Row 3]) 
VALUES (2018-2019, 'Data 2', 'Data 3')

注意:如果您指的不是“2018-2019”字符串文字,请不要在 2018-2019 前后加上引号。

如果 Data2Data3 是字符串,那么它们应该用 ':

传递
CREATE TABLE table11 (
    [Row 1] varchar(255),
    [Row 2] varchar(255),
    [Row 3] varchar(255),
);

INSERT INTO table11 ([Row 1], [Row 2], [Row 3]) 
VALUES ('2018-2019', 'Data 2', 'Data 3')

注意: 很多人可能会建议不要将 space 放在列的名称中。例如。使用 CamelCase 或“_”。


关于将 sql 放入 VBA - ' 应该不是问题:

Public Sub TestMe()
    Dim sql As String
    sql = "INSERT INTO table11 ([Row 1], [Row 2], [Row 3]) " & _
                "VALUES ('2018-2019', 'Data 2', 'Data 3')"
    MsgBox sql
End Sub

正如我在其他回复中所说,使用参数,永远不要尝试创建 SQL 像连接字符串那样的语句。

Public Function createSQLforInsert(tableName As String, dType As String, role 
  As String, FiscalYear As String)
  Dim SQL As String
  Dim tempString As String
  tableName = tableName & "$"
  tempString = ""
  SQL = "INSERT INTO [" & tableName & "] ([Fiscal Year], [Type], [role]) " & _
        " VALUES (@data1, @data2, @data3)"
  Debug.Print SQL

'insertQuery SQL
End Function

我注释掉了 "insertQuery SQL",因为它的代码丢失了,如果 @data1、2 和 3 的值不是在 "insertQuery" 方法中构造的,那么您需要将它们传递给那里。恕我直言,此方法做了一件非常不必要的事情,只是构建了一个 INSERT 语句。您可以在需要的地方简单地输入它。

编辑:不管怎样,我给出了一个带有参数的样本:

    Public Function insertFiscalData(tableName As String, dType As String, role As String, FiscalYear As String)
      Dim SQL As String

      SQL = "INSERT INTO [" & tableName & "$] ([Fiscal Year], [Type], [role]) " & _
            " VALUES (@p1, @p2, @p3)"

     Dim oConnection As ADODB.Connection
     Dim oCommand As ADODB.Command
     Set oConnection = New ADODB.Connection
     Set oCommand = New ADODB.Command

    oConnection.ConnectionString = "Provider=... fill correct conn info here"

  oConnection.Open
  oCommand.ActiveConnection = oConnection
  oCommand.CommandText = SQL

  oCommand.Parameters.Append oCommand.CreateParameter("@p1", adVarChar )
  oCommand.Parameters.Append oCommand.CreateParameter("@p2", adVarChar )
  oCommand.Parameters.Append oCommand.CreateParameter("@p3", adVarChar )

  oCommand.Parameters("@p1").Value = FiscalYear
  oCommand.Parameters("@p2").Value = dType
  oCommand.Parameters("@p3").Value = role

  oCommand.execute
  oConnection.Close

    End Function