MS Access自动编号问题

时间:2009-07-29 22:21:40

标签: ms-access

我的客户意外地从访问表中删除了大约500条记录,这些记录具有创建为“自动编号”的主ID字段。通过关闭自动编号列(更改回整数),我能够从备份中恢复丢失的500条记录,但现在当然无法重新启动自动编号...

有哪些可能的解决方案? ID字段用作其他表的链接,因此我不能只重新编号所有内容而不重新编号引用此数字的所有表(颈部疼痛,但可能)。

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

5 个答案:

答案 0 :(得分:4)

使用ID字段将newTable设置为AutoNumber(所有字段必须与原始表中的相同 - ID除外)。将所有数据从originalTable复制到newTable:

INSERT INTO newTable SELECT * FROM originalTable

填写数据后,删除originalTable并将newTable重命名为originalTable。

这样就可以保留自动编号中的所有“漏洞”,并且newTable已启用自动编号。

P.S。始终尝试将外键添加到您的ID。在这种情况下,即使删除了某些数据,您至少也会保持一致的状态。

答案 1 :(得分:1)

如果我可以添加给出的答案。

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

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

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

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

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

赛斯

答案 2 :(得分:1)

理想的解决方案虽然现在已经太晚了,但我们已经将丢失的500条记录恢复到工作台中。然后在主表中添加追加查询。这将包括自动编号字段。

答案 3 :(得分:0)

同意,但可能需要添加ORDER BY以确保AutoNumber的顺序正确。否则,您的其他表将具有错误的ID关联。

INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID

您还必须明确命名字段,而不是使用*

答案 4 :(得分:0)

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