VBA 中的 SQL 语句

Posted

技术标签:

【中文标题】VBA 中的 SQL 语句【英文标题】:SQL statement in VBA 【发布时间】:2015-12-11 13:47:33 【问题描述】:

我正在尝试在 ACCESS 2013 VBA 中运行以下 SQL 语句,但由于格式错误而出现错误(在这种情况下,我得到“语句末尾缺少分号 (;)”)。有人可以告诉我我在下面的代码中做错了什么吗?

Dim dbs As dao.Database

Set dbs = CurrentDb()

dbs.Execute "INSERT INTO TEMP2 ([Study_Date], [Created_By], [Part_Number], 
[Upper_Tolerance], [Lower_Tolerance], [ID21_Number]) VALUES ([Study_Date], 
[Created_By], [Part_Number], [Upper_Tolerance], [Lower_Tolerance], [ID21_Number]) 
FROM RAC_DATA_ENTRY 
WHERE [RAC_CAP_VALS] = '" & Me.[RAC_CAP_VALS] & "'"

【问题讨论】:

【参考方案1】:

当您将数据从一个表拉到INSERT 到另一个表时,不要使用VALUES。请改用SELECT

此示例仅使用您的两个字段。添加您需要的其他内容。

Dim strInsert As String
strInsert = "INSERT INTO TEMP2 ([Study_Date], [Created_By])" & _
    " SELECT [Study_Date], [Created_By] FROM RAC_DATA_ENTRY" & _
    " WHERE [RAC_CAP_VALS] = '" & Me.[RAC_CAP_VALS].Value & "';"
Debug.Print strInsert '<- view this in Immediate window; Ctrl+g will take you there
dbs.Execute strInsert, dbFailOnError

注意事项:

    语句末尾的分号是可选的。无论有没有它,Access 都会认为该声明有效。 在Me.[RAC_CAP_VALS] 之后实际上不需要Value,因为它是默认属性。我更喜欢明确说明。 dbFailOnError 为您提供有关失败插入的更好信息。没有它,诸如违反主键之类的问题将静默失败。 Debug.Print strInsert 允许您检查您构建的语句并要求数据库引擎执行。如果有问题,您可以从即时窗口复制语句文本并将其粘贴到新 Access 查询的 SQL 视图中进行测试。

【讨论】:

您好,谢谢您,但是在运行代码时出现数据类型不匹配,在即时窗口中我可以看到字段的内容是正确的,但随后出现错误 (3464)。知道可能出了什么问题吗? RAC_DATA_ENTRY.RAC_CAP_VALS 字段的数据类型是数字而不是文本?如果是这样,请丢弃 Me.[RAC_CAP_VALS].Value 之前和之后的单引号,如下所示:" WHERE [RAC_CAP_VALS] = " &amp; Me.[RAC_CAP_VALS].Value &amp; ";" 太好了,成功了,谢谢 - 现在要解决无数其他问题了!! @RACdB 如果可行,请将答案标记为正确(单击复选标记)。

以上是关于VBA 中的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA中的计数SQL语句

Access 2007 使用 VBA/SQL 语句中列表框中的 ID 值

access2013 VBA中怎样运行sql语句

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

在 VBA 代码中执行 SQL 语句

如何在 SQL 语句中引用组合框并在 VBA 中运行该语句