我需要使用VBA清除Access数据库中多个表的内容。
下面是我尝试使用的代码,但它会抛出“FROM子句中的语法错误”。 SQL语法(DELETE * FROM [table name];
)适用于查询。
Dim tbl As TableDef
Dim sqlstr As String
DoCmd.SetWarnings False
For Each tbl In CurrentDb.TableDefs
If tbl.Name Like "*_drop" Then
sqlstr = "DELETE * FROM " & tbl.Name
DoCmd.RunSQL sqlstr
End If
Next tbl
我发现了类似问题并回答了here,但它并没有解决我的问题。
我也尝试过没有sqlstr并收到同样的错误。
For Each tbl In CurrentDb.TableDefs
If tbl.Name Like "*_drop" Then
DoCmd.RunSQL "DELETE * FROM " & tbl.Name
End If
Next tbl
答案 0 :(得分:5)
您确认此类查询无错误。
DELETE * FROM [table name];
但是,代码构建的查询不会包含table name
。因此,任何包含空格或包含除字母,数字和下划线以外的任何字符的表名都将导致DELETE
语句触发该错误。如果表名与保留字匹配,则也可能触发错误。 (不幸的是,很难准确预测保留字何时会引起麻烦。)当将它们用作字段或表名时,将所有麻烦的单词括起来更安全。对于那些因为它们是保留字而麻烦的人,你可以将它们作为别名而不是包围。
但是在可行的情况下,最安全的做法是重命名所有这些对象:避免使用保留字;并且只使用字母,数字和下划线。
同时,代码在防御性地处理问题名称。修改代码以始终括起表名。
sqlstr = "DELETE FROM [" & tbl.Name & "]"
答案 1 :(得分:0)
我认为你只需要DELETE FROM
而没有*