【问题标题】:StrSQL Insert into throwing an error in VBAStrSQL插入在VBA中引发错误
【发布时间】:2017-11-16 04:12:42
【问题描述】:

我正在尝试向 access 数据库中插入一些新记录。

这是我的代码,

' OPEN ACCESS APPLICATION
    Set objAccess = CreateObject("Access.Application")
    objAccess.OpenCurrentDatabase DatabasePath

 ' OPEN INTERNAL DATABASE
    Set db = objAccess.CurrentDb


BuName = Ws.Sheets("Config").Range("T1").Value
RepName = Ws.Sheets("Config").Range("T2").Value
NumberofUniqueSheets = Ws.Sheets("Config").Range("T3").Value

For i = 1 To NumberofUniqueSheets

    CmpValue = Ws.Sheets("Config").Range("U1").Value
    ShtNamedec = Split(CmpValue, "$")(0)
    HeadRow = Split(CmpValue, "$")(1)
    AddInfo = Split(CmpValue, "$")(2)
    DateInfo = Split(CmpValue, "$")(3)
    
    ' PREPARE STATEMENT
    strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
               & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo]);"

    ' BUILD TEMP QUERYDEF
    Set qdef = db.CreateQueryDef("", strSQL)

    ' BIND PARAMS TO VARIABLES
    qdef!BusinessUnitparam = BuName
    qdef!ReportNameparam = RepName
    qdef!SheetNameparam = ShtNamedec
    qdef!HeaderRowparam = HeadRow
    qdef!AdditionalInfoparam = AddInfo
    qdef!DateRequiredinfoparam = DateInfo

    ' EXECUTE ACTION QUERY
    qdef.Execute
    
Next

    Set qdef = Nothing
    Set db = Nothing
    Set objAccess = Nothing

我在 Build Temp QueryDef 语句中遇到错误,错误提示为 `

插入语句中的语法错误。

` 我将值添加到插入语句中,如下所示

strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
               & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo]) VALUES (BuName, RepName, ShtNamedec, HeadRow, AddInfo, DateInfo);"

但它给出了另一个关于执行操作查询的语句,说预期的参数太少 12. 这是供参考的表结构 -

【问题讨论】:

  • 好吧,你错过了声明的后半部分。 See here
  • 我认为您需要在插入后添加一个值声明,例如:stackoverflow.com/questions/1783486/…
  • @majjam 随意将其写为答案,这样我们就可以看到问题已得到解答。
  • 更新了问题。向其中添加值会在下一行引发另一个错误。说参数太少。预计 12 日。
  • 没有。您没有为我提供足够的信息来确保我可以正确回答(我没有表格结构),并且您在我上次发表评论后仅尝试了两分钟。如果您希望我回答,请提供表格结构。

标签: excel vba ms-access


【解决方案1】:

此查询适用于您的数据表设计的参数:

strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
           & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo])" _
           & "SELECT BusinessUnitparam AS Expr1, ReportNameparam AS Expr2, SheetNameparam AS Expr3, HeaderRowparam AS Expr4, AdditionalInfoparam AS Expr5, DateRequiredInfoparam as Expr6;"

【讨论】:

  • 表示语法错误,在选择部分的查询表达式中缺少运算符。它发生在“BUILD TEMP QUERYDEF”行
  • 我认为您可能在 INSERT INTO 行之后添加了一个额外的分号。我用一个更完整的例子更新了我的答案。
  • 终于!非常感谢。我花了一天的时间。
【解决方案2】:

您的查询不正确。

这个:

INSERT INTO ReportTypes ([BusinessUnit], 
                         [ReportName], 
                         [SheetName], 
                         [HeaderRow], 
                         [AdditionalInfo], 
                         [DateRequiredinfo]) 
VALUES (BuName, 
        RepName,  
        ShtNamedec,  
        HeadRow,  
        AddInfo,  
        DateInfo)

不会工作。

虽然这可能:

"INSERT INTO ReportTypes ([BusinessUnit], 
                         [ReportName], 
                         [SheetName], 
                         [HeaderRow], 
                         [AdditionalInfo], 
                         [DateRequiredinfo]) 
VALUES ('" + BuName + "', 
        '" + RepName + "',  
        '" + ShtNamedec + "',  
        " + HeadRow + ",
        '" + AddInfo + "',  
        '" + DateInfo + "')"

您可能可以消除所有参数分配的东西。我不认为它在这里增加了价值。

【讨论】:

  • 但我没有从表格中输入值。我从一个变量中喂养它。这就是我被打动的地方。
  • 已修改。顺便说一句,如果你想传递数字,那么消除单引号。就像如果 HeadRow 将作为整数处理,应该是 " + HeadRow + " 而不是 '" + HeadRow + "'
  • 我看到它是一个整数,我继续删除了单引号。
  • 它说代码上的语法错误也尝试了 HeadRow 的两种情况!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多