Access VBA执行Insert Into Select语句时出现3134语法错误
解决运行时错误'3134'的方案
错误原因及修正点:
- 保留字未转义:
Order是Access的保留字,必须用方括号[]包裹,否则会触发语法错误。 - SELECT语句多余括号:SELECT子句后的列名不需要加括号,直接列出即可。
- WHERE条件逻辑错误:直接用
<> Me!ItemScheduleSub.Order无法和子窗体的多条记录对比,需要用NOT IN子查询排除已存在的ORDER_NO。 - 子窗体字段引用问题:若要引用子窗体字段,需通过
Form属性,且保留字同样要转义,不过更稳妥的方式是直接查询目标表排除重复。
修正后的代码:
Private Sub cmdFetch_Click() If MsgBox("Do you wish to add more records of this item?", vbYesNo, "Add Confirmation") = vbYes Then Dim sSQL As String sSQL = "INSERT INTO ItemSchedule (Item, [Order], DueDate)" & _ "SELECT Item, ORDER_NO, DUE_DATE " & _ "FROM q_ItemFetch " & _ "WHERE q_ItemFetch.ORDER_NO NOT IN (SELECT [Order] FROM ItemSchedule);" DoCmd.RunSQL sSQL Me!ItemScheduleSub.Requery End If End Sub
额外说明:
如果你的需求是排除当前子窗体中显示的特定记录(而非整个表的重复项),可将WHERE子句调整为:
"WHERE q_ItemFetch.ORDER_NO NOT IN (SELECT [Order] FROM ItemSchedule WHERE [关联字段] = Me!当前窗体关联值);"
需根据实际业务逻辑替换[关联字段]和Me!当前窗体关联值。
内容的提问来源于stack exchange,提问作者user22568364
相关产品推荐
相关产品推荐

