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] = " & Me.[RAC_CAP_VALS].Value & ";"
太好了,成功了,谢谢 - 现在要解决无数其他问题了!!
@RACdB 如果可行,请将答案标记为正确(单击复选标记)。以上是关于VBA 中的 SQL 语句的主要内容,如果未能解决你的问题,请参考以下文章
Access 2007 使用 VBA/SQL 语句中列表框中的 ID 值