VBA中的SQL语句

RAC*_*CdB 2 sql ms-access vba access-vba ms-access-2013

我试图在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] & "'"
Run Code Online (Sandbox Code Playgroud)

Han*_*sUp 6

VALUES当您将数据从一个表格拉到另一个表格时,请勿使用INSERT.请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
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 语句末尾的分号是可选的.访问将认为该声明有或没有它.
  2. Value实际上并不需要跟随Me.[RAC_CAP_VALS],因为它是默认属性.我更喜欢说清楚.
  3. dbFailOnError为您提供有关失败插入的更好信息.没有它,诸如主键违规之类的问题将无声地失败.
  4. Debug.Print strInsert允许您检查您构建的语句并要求db引擎执行.如果出现问题,您可以从"立即"窗口复制语句文本并将其粘贴到新的Access查询的SQL视图中以进行测试.