Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何一次删除所有ms access表中的数据?_Sql_Ms Access - Fatal编程技术网

Sql 如何一次删除所有ms access表中的数据?

Sql 如何一次删除所有ms access表中的数据?,sql,ms-access,Sql,Ms Access,在MS Access中是否有一种方法可以一次删除所有表中的数据。我们在access中运行数据库,每月保存数据,然后删除access中的所有数据。但它需要从许多表中删除数据。有没有更简单/更容易的方法呢?为什么不在手边放一份数据库的空副本呢。在月底,保存现有数据库,然后将空数据库复制到原来的位置。由于这是一个重复操作,因此最好使用一个简单的SQL脚本来执行此操作 DELETE FROM <table1>; DELETE FROM <table2>; ... DELETE F

在MS Access中是否有一种方法可以一次删除所有表中的数据。我们在access中运行数据库,每月保存数据,然后删除access中的所有数据。但它需要从许多表中删除数据。有没有更简单/更容易的方法呢?

为什么不在手边放一份数据库的空副本呢。在月底,保存现有数据库,然后将空数据库复制到原来的位置。

由于这是一个重复操作,因此最好使用一个简单的SQL脚本来执行此操作

DELETE FROM <table1>;
DELETE FROM <table2>;
...
DELETE FROM <tablen>;
从中删除;
删除;
...
删除;

克雷格的答案简单而明智。如果确实需要编程解决方案,以下VBA脚本将清除每个表中的所有数据,不包括隐藏表。它要求启用DAO-在Visual Basic编辑器中,转到工具->引用,并勾选Microsoft DAO 3.6对象库,然后确定:

公共子截断表()
“大部分代码取自数据字典脚本,我再也找不到源代码,也找不到作者
On Error GoTo Error_TRUNCATETABLE
Dim数据库作为DAO.Database
将TDF调暗为DAO.TableDef
Dim strSQL_删除为字符串
Set DB=CurrentDb()
对于以DB.TableDefs为单位的每个TDF
如果左(TDF.Name,4)“MSys”,则
strSQL_DELETE=“DELETE FROM”&TDF.Name&“;”
DB.执行strSQL_DELETE
如果结束
下一个
MsgBox“表已被截断”,vbInformation,“表被截断”
DB.关闭
退出\u错误\u截断表:
设置TDF=无
Set DB=Nothing
出口接头
错误\u截断表:
选择案例错误编号
案件3376
“继续下一步”如果找不到表,则忽略错误
未找到案例3270的属性
下一步继续
其他情况
MsgBox错误号&“:”&错误说明
恢复退出\u错误\u截断表
结束选择
端接头

突出显示所有行,然后按键盘上的Delete键。如果access不允许您进入底部,则进入单元格并单击ctrl+向下箭头。要高亮显示所有行,请高亮显示顶行,然后滚动至底行,并在选择底行时按住shift键。所有行都应高亮显示。

Alistair的回答很好,但需要更新。旧的if语句会导致错误,旧的动态字符串在名称有空格的表上不起作用。它会将“个人信息”这样的名字视为“个人”。我已经更新了代码,如果您希望某些表保留其数据,还可以更轻松地向if语句添加异常

公共子截断表()
“大部分代码取自数据字典脚本,我再也找不到源代码,也找不到作者
On Error GoTo Error_TRUNCATETABLE
Dim数据库作为DAO.Database
将TDF调暗为DAO.TableDef
Dim strSQL_删除为字符串
Set DB=CurrentDb()
对于以DB.TableDefs为单位的每个TDF
如果不是(TDF.Name如“MSys*”或TDF.Name如“~*”或Len(TDF.Connect)>0),则
'这将防止清除系统表、临时表和链接表
strSQL_DELETE=“从”&“[”&TDF.Name&“]删除”
DB.执行strSQL_DELETE
如果结束
下一个
MsgBox“表已被截断”,vbInformation,“表被截断”
DB.关闭
退出\u错误\u截断表:
设置TDF=无
Set DB=Nothing
出口接头
错误\u截断表:
选择案例错误编号
案件3376
“继续下一步”如果找不到表,则忽略错误
未找到案例3270的属性
下一步继续
其他情况
MsgBox错误号&“:”&错误说明
恢复退出\u错误\u截断表
结束选择
端接头

这将删除除系统表之外的所有表中的所有数据

Dim T As TableDef
DoCmd.SetWarnings False
For Each T In CurrentDb.TableDefs
    If T.Name Like "d2s_*" Then
        DoCmd.RunSQL "DELETE * FROM " & T.Name
    End If
Next T
DoCmd.SetWarnings True
另一种方法:(根据建议)


MS access不允许脚本中有多个删除查询。这也意味着您不需要压缩和修复。回答得很好。非常实用。然后您必须在空数据库上复制任何修复或改进。我已经做了一段时间了,但是它很容易出错,更不用说很乏味了。我将尝试其他解决方案。小心!这也将清除所有链接表。我将编辑以添加条件
Len(tdf.Connect)=0以防止出现这种情况。您也可以使用便宜的fiverr gig:
Dim T As TableDef
DoCmd.SetWarnings False
For Each T In CurrentDb.TableDefs
    If Not Left(T.Name, 4) = "MSys" Then
        DoCmd.RunSQL "DELETE * FROM [" & T.Name & "]"
    End If
Next T
DoCmd.SetWarnings True