代码之家  ›  专栏  ›  技术社区  ›  David Brunelle

如何在access2003中禁用所有AutoNum

  •  0
  • David Brunelle  · 技术社区  · 14 年前

    我有一个Access数据库,它已经损坏得无法修复(不要问我怎么做,它是一个客户机数据库)。但是,我们可以使用.NETODBC之类的代码访问数据。因为我们有一个干净的数据库副本,所以我们计划将所有数据从损坏的数据库传输到新的数据库。

    我们只有一个问题,那就是数据库中包含自动编号和大量链接。传输数据时,我们要确保所有autonum id与以前完全相同。否则,我们会有更多的问题。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Tobiasopdenbrouw    14 年前

    我相信accessselectinto会保持自动递增不变。之后,您可以继续在干净的数据库中工作。

        2
  •  9
  •   David-W-Fenton    14 年前

    许多人误解了Jet/ACE Autonumber字段。它实际上只是一个长整型字段,带有一个默认属性和一些特殊属性(例如不可编辑性,并且每个表只能有一个属性)。

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

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

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

    最后,您需要确定是什么导致了腐败,并解决这个问题。否则,总有一天你得再做一次。

        3
  •  3
  •   KyleMit Steven Vachon    10 年前

    我不明白如何禁用自动编号。新表可以接受旧表中的自动编号值,即使目标字段也是自动编号。在本例中,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\ U new是一个空表,数据库在执行INSERT INTO语句之前被压缩。。。压缩“重置”自动编号计数器。

    如果tblFoo\u new开头不是空的,execute可能会失败。如果我从表中删除了行,但没有压缩以重置计数器,也是一样的。

    你提到的链接是怎么回事?他们是怎么适应这个环境的?

        4
  •  0
  •   del.ave    14 年前

    不确定是否可以禁用AutoNum。如果有帮助的话,你可以重新设置/调整它。

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