代码之家  ›  专栏  ›  技术社区  ›  E.J. Brennan

MS访问自动编号问题

  •  4
  • E.J. Brennan  · 技术社区  · 17 年前

    我的一个客户意外地从一个access表中删除了大约500条记录,该表的主ID字段被创建为“autonumber”。通过关闭“自动编号”列(改回整数),我可以从备份中恢复丢失的500条记录,但现在当然无法重新打开“自动编号”。。。

    有哪些可能的解决方案?ID字段被用作指向其他表的链接,因此我不能只对所有表重新编号,而不对引用此编号的所有表重新编号(这是一个棘手的问题,但可能)。

    如果表中已经存在数据,是否有任何“技巧”可以重新启用自动编号,使用最大值(id)作为起点?

    5 回复  |  直到 17 年前
        1
  •  5
  •   Josip Medved    17 年前

    使ID字段作为自动编号的新表格(除ID外,所有字段必须与原始表格中的字段相同)。将所有数据从原始表格复制到新表格:

    INSERT INTO newTable SELECT * FROM originalTable
    

    填充数据后,删除Originatable并将newTable重命名为Originatable。

    这样,自动编号中的所有“孔”都将保留,并且newTable已启用自动编号。

    请注意,始终尝试将外键添加到您的ID中。在这种情况下,即使删除了一些数据,您至少会有一致的状态。

        2
  •  2
  •   Tony Toews    17 年前

    理想的解决方案是将丢失的500条记录恢复到工作表中,尽管现在为时已晚。然后在主表中执行追加查询。这将包括自动编号字段。

        3
  •  1
  •   Seth Spearman    17 年前

    如果我能补充给出的答案。

    关于Access自动编号字段的一个鲜为人知的事实是,在压缩和修复数据库时,字段上的计数器会重置。

    我还非常确信,如果您进行插入,它将使用提供的数字,而不是自动编号计数器中的下一个数字,只要它是>(大于)自动编号字段保留的内部计数器(这有意义吗?)

    换句话说,您可以在一个全新的访问表中执行类似操作,其中计数器应设置为1。。。

    INSERT INTO myTable (myAutoNumber,myOtherField) VALUES (10000,'other data')
    

    这里提到的其他解决方案更好,因为它们能更好地保证结果,所以我提到它几乎是出于学术原因。

    赛斯

        4
  •  0
  •   Papa Burgundy    17 年前

    同意,但可能希望通过添加订单,以确保自动编号的顺序正确。否则,您的其他表将具有错误的ID关联。

    INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID
    

    您还必须显式地命名字段,而不是使用*

        5
  •  0
  •   csbs    9 年前

    创建一个新字段并将其自动编号,然后删除id字段并将新字段重命名为id

    推荐文章