访问VBA SQL运行时错误“3075”语法错误
问题描述:
我试图运行此代码,但它给我的错误信息:访问VBA SQL运行时错误“3075”语法错误
运行时错误“3075”; “查询表达式中的语法错误(缺少运算符)”
我该如何解决此错误?
我想插入CellNumber是在表1但不是在变量表到ERROR表日期时间,字符串和CellNumber
Dim sqlstr As String
sqlstr = "SELECT CellNumber FROM table1 WHERE CellNumber NOT IN (SELECT CellNumber FROM Variable)"
DoCmd.RunSQL "INSERT INTO ERROR ([DateTime], RowNum, Error) SELECT Now(), 'string' as RowNum, CellNumber FROM(" & sqlstr & ")"
答
Dim sqlstr As String
sqlstr = "INSERT INTO Error ([DateTime],RowNum, Error) " & _
"SELECT Now() , 'String' , table1.cellnumber FROM table1 " & _
"LEFT JOIN Variable ON table1.cellnumber = Variable.cellnumber " & _
"WHERE Variable.cellnumber Is Null"
currentdb.execute sqlstr, dbfailonerror
我就是这么做的
编辑------ 我想补充为后人几点意见:
- 我会亲自把我的日期时间戳字段的
Now()
默认值,并从我的SQL忽略它总共......所有新记录都会得到时间戳,并且出错的空间更小。
Dim sqlstr As String sqlstr = "INSERT INTO tblError (StringField, CellNumber) " & _ "SELECT 'String' , table1.cellnumber FROM table1 " & _ "LEFT JOIN table2 ON table1.cellnumber = table2.cellnumber " & _ "WHERE table2.cellnumber Is Null" currentdb.execute sqlstr, dbfailonerror
- 我绝不会使用
DateTime
,Error
,或Variable
作为表或字段的名称,因为即使访问可以处理它(通过限定保留名称为[DateTime]
,适用于Instance),但在尝试排除代码和sql故障时可能会造成混淆和误导。
+0
作为一个方面说明:我会亲自避免使用'error'和'DateTime'作为字段或表名 – KacireeSoftware
+1
@Parfait我同意。我想他只是在这里使用一些通用名称来获得他的SQL权利。 – KacireeSoftware
另外,使用NOT EXISTS而不是NOT IN会更好吗?或者它在速度上相似? – Den
您尝试运行的结果SQL是: INSERT INTO ERROR([DateTime],RowNum,Error)SELECT Now(),'string'as RowNum,CellNumber FROM(SELECT CellNumber FROM table1 WHERE CellNumber NOT IN(SELECT CellNumber FROM Variable)) 我认为你的问题在于 “,CellNumber FROM(SELECT CellNumber FROM” – KacireeSoftware
所以你要做的就是找到Table1中不存在于变量表中的所有单元格?然后将它们插入Error表? – KacireeSoftware