Joh*_*ohn 2 sql syntax ms-access vba access-vba
我需要使用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
Run Code Online (Sandbox Code Playgroud)
我在这里找到了类似的问题和答案,但它没有解决我的问题.
我也尝试过没有sqlstr并收到同样的错误.
For Each tbl In CurrentDb.TableDefs
If tbl.Name Like "*_drop" Then
DoCmd.RunSQL "DELETE * FROM " & tbl.Name
End If
Next tbl
Run Code Online (Sandbox Code Playgroud)
您确认了这样的查询没有错误.
DELETE * FROM [table name];
Run Code Online (Sandbox Code Playgroud)
但是,您的代码构建的查询不包括在内table name.因此,任何包含空格或包含除字母,数字和下划线以外的任何字符的表名都将导致DELETE触发该错误的语句.如果表名与保留字匹配,则也可能触发错误.(不幸的是,很难准确预测保留字何时会引起麻烦.)当将它们用作字段或表名时,将所有麻烦的单词括起来更安全.对于那些因为它们是保留字而麻烦的人,你可以将它们作为别名而不是包围.
但在任何可行的地方,最安全的做法是重命名所有这些对象:避免使用保留字; 并仅使用字母,数字和下划线.
同时,代码防御性地应对问题名称.修改代码以始终括起表名.
sqlstr = "DELETE FROM [" & tbl.Name & "]"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |