我在Access数据库中有一个带有自动编号字段的表。
当我从表中删除所有记录时,自动编号会记住最后一个数字。
Access是否与SQL Server的TRUNCATE TABLE MyTbl
类似?
如果没有,我删除表的记录后如何从1开始?
答案 0 :(得分:17)
Access SQL没有TRUNCATE TABLE
。
您可以使用ADO连接执行DDL语句,该语句重置自动编号字段的“种子”值。所以你可以用VBA代码做到这一点,而不必使用紧凑型& amp;修复以重置自动编号。
此示例代码首先删除 tblFoo 表中的所有行,然后重置 id 自动编号字段的种子值。
Dim strSql As String
strSql = "DELETE FROM tblFoo;"
CurrentProject.Connection.Execute strSql
strSql = "ALTER TABLE tblFoo ALTER COLUMN id COUNTER (1, 1);"
CurrentProject.Connection.Execute strSql
答案 1 :(得分:4)
据我所知,MS Access中没有截断,但您可以解决自动编号问题,记住删除后的最后一个数字。删除带有自动编号字段的记录后,MS Access中有一种方法以1开头。如果您使用的是ms-access-2007,则可以通过选择位于Office按钮下方的“管理”来找到压缩和修复数据库功能。您还可以通过激活紧密关闭选项,使数据库紧凑并在每次关闭时进行自我修复。如果您想设置此选项,可以在当前数据库的访问选项中找到它。
答案 2 :(得分:4)
或者没有紧凑和修理:
清空你的桌子:
DELETE FROM MyTable
将autoincrementfield(如'ID')更改为Integer:
ALTER TABLE MyTable ALTER Column ID INT;
将字段更改回AUTOINCREMENT:
ALTER TABLE MyTable ALTER Column ID AUTOINCREMENT;
答案 3 :(得分:3)
需要1秒才能找到解决方案:
http://www.webmasterworld.com/databases_sql_mysql/3227574.htm
压缩和修复过程将重置所有空表 自动递增计数器为零。所以,删除所有记录:
工具 - >数据库实用程序 - >紧凑和修复数据库
答案 4 :(得分:2)
还有另一种方法不需要改变表格或压缩和修复。如果您有分布式数据库,它将更适合您。从2000年开始,Access将接受插入值到自动编号字段并开始递增。在查询或这样的代码中执行此操作。
CurrentProject.Connection.Execute "DELETE FROM Mytbl"
CurrentProject.Connection.Execute "INSERT INTO Mytbl(ID) VALUES(0)"
CurrentProject.Connection.Execute "DELETE FROM Mytbl"
注意:在执行命令之后放置adExecuteNoRecords以获得更好的性能。例如CurrentProject.Connection.Execute sql,,adExecuteNoRecords
答案 5 :(得分:1)
删除所有记录,然后压缩数据库。
答案 6 :(得分:0)
使用VBA时没有Compact和Repair: 说你的桌子是'MyTable'。在没有数据的情况下制作该表的副本并将其保存为例如“MyTable_Template”。 当你想要截断表时,只需'DROP'表'将'MyTable_Template'复制到'MyTable'。现在,“新”表'MyTable'的自动增量字段将再次从1开始。
答案 7 :(得分:0)
在MS_Access数据库中,“不支持截断”。所以我们可以先通过“删除”查询删除所有记录。
删除记录后,我们可以通过使用“Alter”查询来改变“ID”列从1开始。
查询:
"Delete * from (Your Table Name);
Alter Table (Your Table Name) Alter Column (Your Column Id) Counter(1,1);"
在单次执行中使用这两个查询,我们可以删除所有记录,并从1开始重置列ID。
答案 8 :(得分:0)
之前我也遇到过同样的问题,我做的是在修改模式下回到表中。然后我用autonumber删除了字段名称,然后再次使用相同的名称插入。在视图模式下运行时自动编号的结果返回到第一个条目的数字1。