摘要:
由于笔者最近不小心把access数据库里的一条记录删除了,而该记录是以自动编号的ID为主键的,要想恢复,一般的方法肯定是不行的,必须通过特殊的方法,才能恢复误删除的自动编号字段的记录。关键字:
删除 自动编号 记录 恢复 正文:
由于笔者最近不小心把access数据库里的一条记录删除了,而该记录是以自动编号的ID为主键的,要想恢复,一般的方法肯定是不行的,必须通过特殊的方法,才能恢复误删除的自动编号字段的记录。
方法如下:
比如数据库中ID:398的记录被误操作删除,如何将该记录进行恢复?
1)ID号码仍为398
2)ID的类型为“自动编号”
首先备份数据库,然后用ddl语句Alter修改,不过你要知道这条数据的所有信息。
步骤如下:
1、首先,记录下自动编号的最后一个号码,现在比如是5342
2、然后建立一个查询执行以下语句
ALTER TABLE tableName ALTER COLUMN [AutoNumberFieldName] COUNTER (398, 1)
3、然后用insert 插入原来的 398 号记录(这里可以随便写几个值进去,然后再编辑就可以了)
4、插入完成后,再执行以下语句
ALTER TABLE tableName ALTER COLUMN [AutoNumberFieldName] COUNTER (5343, 1)
注意,以上语句必须要 jet 4.0 支持。
例如flymorn的SQL语句是这样写的:
----------------------------------------------------------------
<!--#打开数据库语句-->
<%
conn.execute "ALTER TABLE dataok ALTER COLUMN [id] COUNTER (398,1)"
conn.execute "insert into dataok([name]) values ('值123')"
conn.execute "ALTER TABLE dataok ALTER COLUMN [id] COUNTER (5343,1)"
conn.close
set conn=nothing
%>
----------------------------------------------------------------
另外,flymorn也看到有些网友的其他解决方法,仅供参考:
A:
Access数据库中,如果一个字段是自动编号ID,当一条记录被删除时,自动编号也被删除了,如何使自动编号不被删除?
Q:
在最后加一个del字段,默认值为0,表示没被删除,当删除某条记录时其实并不是真正的删除它,而是把del字段的值改为1,表示已经删除。
查询的时候不查询del字段值为1的字段,这样的话那个字段的信息就不会显示出来,也就等于是虚拟的删除了。等下次添加新记录的时候就查询del字段为1的第一个记录,如果存在,就把它的信息用新的信息覆盖,然后再把del字段的值更新成0,如果不存在,就用addnew新建立一条记录,把这条记录写进去。这样的话不会造成id丢失。
而且另一方面还可以多出一个回收站,那里面可以显示所有del字段标记为1的记录,也就是已经删除还没被新记录覆盖的记录,如果你后悔的话,还可以赶在它被新记录覆盖之前把它的del字段的值改为0,这样的话它就又原样不动的被恢复出来了,方便又安全,我觉得还是比较不错的。
如果实在是已经用很多记录标号被物理的删除了,也是可以恢复的,不过比较难,需要使用微软的dategard控件,调用这样控件打开数据库后,可以直接在自动编号字段里输入你想要的值,比方1这个自动标号已经被删除了,你只需要输入1,那么1这样自动编号马上就将在access里起死回生。我这样做过几次,不过由于比较麻烦,就不这样做了,仍是选择使用del字段标记的方法。