写了一个小程序来解决"自动编号"类型因删除数据所造成的"断点"
程序主要是把"自动编号"重新排列
抛砖引玉
只给出思想及演示,没有做代码优化,希望大家相互交流
以下是代码
相关程序在上面的下载里面有,可以下载后自己测试
<%
'此程序由hxfly制作,版权为www.bc-cn.net和hxfly所有,请保留版权信息
'程序提供ACCESS“自动编号”类型重编号的思想,请根据自己的需要对变量进行更改
'程序提供演示,一旦执行,数据库内部数据将重新排列,如需查看效果,请在运行程序前把数据库另存
'相互交流,互相提高,如有ASP相关问题,欢迎到http://bbs.bc-cn.net(编程中国)论坛提问
strconn="driver={microsoft access driver (*.mdb)};uid=admin;pwd=china;dbq="&server.mappath("data/hxfly.mdb")
'建立数据库连接,数据库密码是china
set conn=server.createobject("adodb.connection")
conn.open strconn
i=1
'定义重排列的索引
sql="select * from test order by id asc"
set rs=conn.execute(sql)
do while not rs.eof
if(rs("id")=i) then
'如果数据的id与i相同,没有从编号的必要
Response.Write("数据"&rs("id")&"没有被更新的必要<p>")
i=i+1
'i自加
rs.movenext
'移动到下一条记录
else
'如果所选择的数据的id与i不相等
id=rs("id")
a=rs("a")
b=rs("b")
c=rs("c")
d=rs("d")
e=rs("e")
f=rs("f")
g=rs("g")
'对这条数据内的数据进行复制,这里根据自己的需要把原来字段的数据保存
sql2="insert into test (id,a,b,c,d,e,f,g) values("&i&",'"&a&"','"&b&"','"&c&"','"&d&"','"&e&"','"&f&"','"&g&"')"
'这里根据自己的需要把字段的数据更新
conn.execute(sql2)
'插入新数据,用i的值代替原来的id值
sql1="delete from test where id="&id
conn.execute(sql1)
Response.Write("数据"&id&"被更新为第"&i&"条,原第"&id&"条数据被删除<p>")
'并把原来的行清除
i=i+1
'i自加
rs.movenext
'循环到下一行
end if
loop
'结束循环
'验证效果可以从数据库的字段a来判断,原数据库的字段a值与id值相同,更新后的不同
'使用的时候把演示字段用的a,b,c,d,e,f,g全部换成自己数据库对应的字段(如更换不全,会造成数据丢失或者运行失败)
'程序提供解决这类问题的思路,如为此给您的数据带来任何损失,作者不负任何责任。使用前请先备份您的数据库!
%>