2009-07-29 117 views
4

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

什么是一些可能的解决方案? ID字段被用作其他表的链接,所以我不能重新编号所有内容,也不要重新编号引用此数字的所有表(尽管可能会引发痛苦)。

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

+0

我可以证实,约瑟普的方法的工作,但我不得不问。难道他们没有备份这个数据库吗? – JohnFx 2009-07-29 22:41:02

回答

4

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

INSERT INTO newTable SELECT * FROM originalTable 

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

这样,自动编号中的所有“孔”都会被保留,并且newTable会自动编号。

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

+0

不要忘记在删除原始表格和重命名新表格后删除并重新创建关系。 你最后一句话对我来说没有多大意义。有一些表没有外键。虽然这些通常被称为“主”表或查找表。例如交易类型,国家或省/州表。在这种情况下,我不太清楚“一致状态”是什么意思。 – 2009-07-30 02:12:35

+0

我同意,如果这个数据库已经正确设置,那么这个错误是不可能发生的(至少不是那么容易),唉,就像许多项目一样,在损坏完成后我会被调用。 Access是其中的一种工具,即使非程序员也可以获得相当体面的“解决方案”,直到因为设置不正确而崩溃。一旦他们意识到“邮箱里的joe”毕竟不能真正编程,我会得到大量的升级客户端到SQL服务器解决方案的工作:>) – 2009-07-30 10:31:08

+0

当然,Access会受到很多不敬,因为人们对它做了奇怪的事情不知道他们在做什么。但是,嘿,这比使用Excel或甚至更糟的Word表格更好。 – 2009-07-30 18:30:34

0

同意,但可能需要添加ORDER BY以确保自动编号的顺序正确。否则你的其他表将会有错误的ID关联。

INSERT INTO newTable SELECT * FROM originalTable ORDER BY ID 

您也将有明确名称,而不是使用*

1

如果我能加入到给定答案的字段。

有关访问自动编号字段一个鲜为人知的事实是,在他们的柜台是当你紧凑复位,修复数据库。

我也敢肯定,如果你做一个插入它将使用提供,而不是自动编号柜台,只要它是下一个号的数字>(大于)被自动保存在内部计数器域(这是否感可言?)

在你可以做这样的事情在计数器应设置为1的全新的访问表换句话说...

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

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

赛斯

1

理想的解决方案,虽然它现在为时已晚,wouuld've去过失踪500条记录恢复到工作表中。然后在主表中执行追加查询。这将包括自动编号字段。

0

你让一个新的领域,使之自动编号,然后删除ID字段和新领域重命名为ID