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

时间:2013-12-31 15:08:35

标签: sql vba ms-access syntax 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

我发现了类似问题并回答了here,但它并没有解决我的问题。

我也尝试过没有sqlstr并收到同样的错误。

For Each tbl In CurrentDb.TableDefs
    If tbl.Name Like "*_drop" Then
        DoCmd.RunSQL "DELETE * FROM " & tbl.Name
    End If
Next tbl

2 个答案:

答案 0 :(得分:5)

您确认此类查询无错误。

DELETE * FROM [table name];

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

但是在可行的情况下,最安全的做法是重命名所有这些对象:避免使用保留字;并且只使用字母,数字和下划线。

同时,代码在防御性地处理问题名称。修改代码以始终括起表名。

sqlstr = "DELETE FROM [" & tbl.Name & "]"

答案 1 :(得分:0)

我认为你只需要DELETE FROM而没有*