Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 表  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/VS.NET2005
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 AppleVB
 我家网
 911静态资料2
 a9 BBS
 911搜什么
 MCSE技术论坛
 CSharp911.net
 BBS新闻列表
 911静态资料
 911搜C S D N
 911搜全国公交线路
 Office中国
 Java 编程资料站
 Access开发在线
 Access软件网
 CSDN
 MS Support
 上海朋扬电脑
 access爱好者
 交流中心
 ezlavie
 艾赛思俱乐部
 设计在线
 搜CSDN V2
 搜CSDN V3
 oaup
 宇宙网络
 
访问人次
 1004439
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

自动编号的字段在删除记录后编号不连续

作者:cg1  摘自:access911.net  :cg1  更新日期:2003-5-20  浏览人次:

 

问题:


自动编号的字段在删除记录后编号不连续
比如原来有10条记录,删除其中第2条,序号2就变空号了
当表中某条记录被删除后,如何使后续的记录自动重新编号?

SQL SERVER 中可以暂时禁止自动编号的
也可已将TABLE2的自动编号字段的约束暂时不起作用:
SET IDENTITY_INSERT TABLE2 ON
INSERT INTO TABLE2 SELECT * FROM TABLE1
SET IDENTITY_INSERT TABLE2 OFF

 

回答:


ACCESS 自动编号不存在自动将缺号补上的功能,并非 ACCESS 功能不全,而是您的在使用方法上错误了

关于自动编号和压缩数据库 
你必须理解,自动编号(长整型)的目的不是为了使记录号连续,其用途有2个
1、标识记录的唯一性
2、标识记录的生成顺序
基于上述原因,你想使用自动编号字段来表示连续的记录号本身这个思路就是错误的。

如何表示连续的记录号有以下几个办法:
1、再建立一个专门用来存放记录号的字段,比如 RecordNo
    添加记录时可以用 MAX(recordNO)+1 的方法。
    当要删除某条记录时,比如这条记录的recordNo=6,我们用

    
delete from table where recordNo=6

    来做。这样就会产生空号,然后再用

    
update table set recordno=recordno-1 where recordno>6

    即可

2、在表中不存放记录号的数据,用sql查询自动生成

select [id],a,b,c,(select count(*) from table table2 where table2.[id]<=table1.[id]) as recordno from table table1 order by [id]

    其中 [id] 字段为自动编号字段

 


问题:

ACCESS2000中 有一自动编号的字段ID,ID 已有值分别为1,2,3,4,5,6,7,将6,7删除后,再压缩数据库,再新加记录,在不同的电脑上会出现不同的情况如下:
1,新ID 为6,7,8,9
2,新ID 为8,9

在ID为1,2,3,4,5,6,7的情况下,将4,5删除后,再压缩数据库,再新加记录,在不同的电脑上会出现不同的情况如下:
3,新ID为4,5,然后是6(出错,因为是主键不能重复)
4,新ID为8,9。。。
请问哪中情况是正常的,其他不正常的原因是什么。谢谢!!

 

回答:

你说的几种情况全部属于正常

1、自动编号是由 JET  引擎来设置的
2、自动编号 会自动被作为主键,而且有不重复索引
3、你可以不要将自动编号作为主键以及不要建立索引,将索引改为无
4、自动编号的起始值和步进值都是可以用程序等方法更改的,不是固定的
5、虽然你更改了起始值和步进值,但是如果新生成的值违反了“主键”或者“索引”的约束会产生错误
6、默认情况下,即使删除了记录,这条记录的自动编号也不会恢复。

以下是对情况的分析
1、你使用了比如压缩修复、UPDATE、ALTER TABLE 等方法更改了初始值
2、默认情况下就是这样
3、因为使用了压缩修复等方法,导致初始值重新从4开始,但是增加到6的时候,原来记录里面已经存在6这个编号了,违反了主键约束,所以产生错误
4、默认情况下就是这样。

 

本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接


 

 
相关文章
     误删除了某条含有自动编号字段的记录?怎么恢复?
     如何定义自动编号字段的初始值和步进值?
     如何用JET SQL DDL创建自动编号GUID字段
     如何在已有数据的情况下更改某列的数据类型为“自动编号 递增”
     关于如何得到新增记录的自动编号字段数值方法三
     如何更改数据类型为“自动编号”“同步复制ID”的值?
     自动编号如果递增到的最大数后会怎么样?什么是同步复制ID?
     如何在连续窗体中反白显示获得焦点的记录
     误删除了某条含有自动编号字段的记录?怎么恢复?
     关于如何得到新增记录的自动编号字段数值方法二
     如何定义自动编号字段的初始值和步进值?
     如何在表中新插入新记录后,获取该记录自动编号字段的值?
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利