如何删除Microsoft Access中的多个表的内容?

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)

Han*_*sUp 5

您确认了这样的查询没有错误.

DELETE * FROM [table name];
Run Code Online (Sandbox Code Playgroud)

但是,您的代码构建的查询不包括在内table name.因此,任何包含空格或包含除字母,数字和下划线以外的任何字符的表名都将导致DELETE触发该错误的语句.如果表名与保留字匹配,则也可能触发错误.(不幸的是,很难准确预测保留字何时会引起麻烦.)当将它们用作字段或表名时,将所有麻烦的单词括起来更安全.对于那些因为它们是保留字而麻烦的人,你可以将它们作为别名而不是包围.

但在任何可行的地方,最安全的做法是重命名所有这些对象:避免使用保留字; 并仅使用字母,数字和下划线.

同时,代码防御性地应对问题名称.修改代码以始终括起表名.

sqlstr = "DELETE FROM [" & tbl.Name & "]"
Run Code Online (Sandbox Code Playgroud)