尝试使用 Excel VBA 中的 SQL 语句更新 INTO 但没有成功

Posted

技术标签:

【中文标题】尝试使用 Excel VBA 中的 SQL 语句更新 INTO 但没有成功【英文标题】:Trying to UPDATE INTO using SQL statement from Excel VBA without success 【发布时间】:2013-07-24 22:12:20 【问题描述】:

我正在尝试使用 Excel VBA 中的 SQL 将填充了数据的新行插入到简单的 Access 表中,但无法克服第一个障碍。

我有一个名为“Test”的表,有四个字段;

ID [标识为主键的自动编号字段]

Text1 [一个文本字段]

YN1 [是/否字段]

No1 [长整型数字字段]

除了自动编号字段 (PK) 之外,没有设置任何关系或索引。 所有字段都将“必填”设置为否,没有设置验证,也没有设置默认值。 Text1 可以接受零长度。

我的VBA代码的业务端如下:

'Connection string.
    stcnt = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & stDBPath & stDBname

'Instantiate the ADO-objects
    Set cnt = New ADODB.Connection

'Open the connection for first Query
    With cnt
        .Open (stcnt) 'Open the connection.
        .CursorLocation = adUseClient 

'Test Data
T1 = "ABC123"
Y1 = -1
N1 = 17

        stSQL1 = "INSERT INTO Test(Text1, YN1, No1) " _
                & "VALUES(T1, Y1, N1)"

        .Execute (stSQL1)

    End With

    'Close connection
    cnt.Close

我的变量已适当调暗(Y1 为布尔值)并且正确声明了路径/数据库名称。

排队

 .Execute (stSQL1)

我收到一个错误“没有为一个或多个必需参数指定值”

我了解到您可以省略自动编号字段及其值(我已经这样做了)。 如果没有,有人可以给我包含这个的语法。 以我有限的知识/研究,我也可能没有正确对待“YesNo”字段。 再次感谢任何处理此问题的建议和语法。

Access 数据库位于我的硬盘驱动器上,无论在运行 VBA 代码时 Access 是打开还是关闭,我都会收到相同的错误。

直接粘贴到 Access“SQL 视图”窗口中的我的 SQL 语句运行良好,并在表测试中插入了正确填充的行。

任何专家的帮助(尤其是正确的语法)让我克服这个问题,我们将不胜感激。

【问题讨论】:

【参考方案1】:

因为 stSQL1 是一个字符串,编译器看不到您希望将变量 T1、Y1 和 No1 插入到字符串中。您需要自己构建字符串:

stSQL1 = "INSERT INTO Test(Text1, YN1, No1) " _
                & "VALUES('" & T1 & "'," & Y1 & "," & N1 & ")"

您需要在文本值周围放置一个单引号。

【讨论】:

谢谢你——完美——你的解释也很有道理。

以上是关于尝试使用 Excel VBA 中的 SQL 语句更新 INTO 但没有成功的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 在 Excel 单元格中运行 SQL 语句

VBA研究用SQL语句读取EXCEL数据例程

VBA Excel ADO SQL 更新查询不起作用

使用带有 ADO 的 Excel 2010 VBA(或带有 LINQ 的 vb.net)查询表的最佳 SQL 语句是啥

Access VBA 中的运行时 3464。尝试使用 SQL 选择语句打开记录集

改进 Excel VBA 中的 SQL 查询