如何禁用Access 2003中的所有AutoNum

时间:2010-07-29 19:08:28

标签: ms-access

我有一个超出所有修复损坏的Access数据库(不要问我怎么做,它是一个客户端数据库)。但是,我们可以使用.NET ODBC之类的代码访问数据。由于我们拥有数据库的干净副本,因此我们计划将所有数据从损坏的数据转移到新数据。

我们只有一个问题,那就是数据库包含自动注册和大量链接。当我们传输数据时,我们希望确保所有autonum id与之前完全相同。不过,我们最终会遇到更多问题。

有办法做到这一点吗?

由于

4 个答案:

答案 0 :(得分:8)

许多人误解了Jet / ACE Autonumber字段。它实际上只是一个长整数字段,具有默认属性和一些特殊属性(例如非编辑性,每个表限制为一个)。

没有什么可以阻止您将现有值插入新的空表中。将保留自动编号值,因为在创建记录时,您提供了显式值,而不是依赖于默认值来填充字段。

唯一的问题是如果定义了引用完整性,在这种情况下,您必须按顺序执行追加,以便在子记录之前插入父记录,或者为插入删除RI,然后再将其放回。

我可能会做后者,因为我的代码可以将关系从一个数据库复制到另一个数据库,所以我只是保留作为备份模板。

最后,您需要确定导致损坏的原因并解决该问题。否则,你将来必须再次这样做。

答案 1 :(得分:2)

我不了解禁用自动编号。即使目标字段也是自动编号,您的新表也可以接受旧表中的自动编号值。在此示例中,id字段是两个表中的自动编号:

INSERT INTO tblFoo_new ( id, foo_text, date_assigned, parent_id )
SELECT old.id, old.foo_text, old.date_assigned, old.parent_id
FROM tblFoo AS old;

tblFoo_new是一个空表,在执行INSERT INTO语句之前压缩了数据库... compact“重置”自动编号计数器。

如果tblFoo_new开始时不为空,则执行可能失败。如果我从表中删除了行,但没有压缩以重置计数器,则相同。

您提到的链接有什么处理?他们如何适应这个?

答案 2 :(得分:1)

我相信ACCESS Select into会保持自动增量不变。之后,您可以继续使用干净的数据库。

答案 3 :(得分:0)

不确定是否可以禁用AutoNum。如果有帮助,您可以重置/调整它。

http://www.bluemoosetech.com/microsoft-access-functions.php?jid=1&title=Microsoft%20Access%20Autonumber%20Increments