VB操作ACCESS数据库自动编号列的疑问

hanmin22 2009-06-16 12:16:02
做了个程序,使用ADO连接数据库,并显示到DATAGRID里面,程序可以增加数据信息到数据库,也可从数据库中删除选中数据信息。
为了能在增加以及删除时 自动编号列的编号能顺序编号,首先我的表里面有一个“序号”的自动编号列。在删除数据信息的时候,我将该“序号”列删除,重建一个“序号”的自动编号列。
现在又个问题,当将表里面的数据都删除的时候,重新增加信息的时,编号不是从1开始,而是从2开始,这是为什么?谢谢高手的解答。

删除按钮的代码
Private Sub Command2_Click()
If Adodc1.Recordset.BOF = False Or Adodc1.Recordset.EOF = False Then
If MsgBox("确定删除?", vbYesNo, "警告") = vbYes Then
Adodc1.Recordset.Delete
cha = "select * from 表 order by 序号"
Adodc1.RecordSource = cha
Adodc1.Refresh
Call xuhao
End If
Else
MsgBox "未选中数据!", , "警告"
End If
End Sub

Sub xuhao()
myCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=db1.mdb;"
myRs.Open "alter table [表] drop column 序号", myCon
myRs.Open "alter table [表] add 序号 autoincrement not null ",myCon
myCon.Close
cha = "select * from 表"
Adodc1.RecordSource = cha
Adodc1.Refresh
End Sub
...全文
347 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbman2003 2009-06-18
  • 打赏
  • 举报
回复
楼主要有这样一个概念: 数据表是用来存取数据的,并不是直接给用户浏览的,对同样的数据,不同的用户可能会有不一样的要求,比如一张学生成绩表, 班主任关心的可能是学生的总分次序, 数学老师要的是数学成绩次序,语文老师要的是语文成绩次序,可见你在表中想设置次序相关的字段是毫无意义的,这些都只有根据用户的需求,在提取数据时处理的...
程序中处理序号的方法有许多,有的数据在查询时用SQL语句就可以解决,也可以根据显示数据的表格总行数,用循环插入,都很简单...
abc_2004 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 slowgrace 的回复:]
自己控制编号比较适合单用户操作:
1)新增时取 MAX(ID)+1 作为新的编号
2)删除时用一个事务做两步
 a) DELETE table1 WHERE ID = 10001
 b) UPDATE table1 SET ID = ID -1 WHERE ID > 10001
[/Quote]
就是8楼的方法就可以。
xxwood 2009-06-18
  • 打赏
  • 举报
回复
access的自动编号就是无重复的,就算你删了一条记录,它的编号也不会再出现
slowgrace 2009-06-18
  • 打赏
  • 举报
回复
对了,8楼的发言是以前tiger_zhao教我的原话。嘿嘿。
slowgrace 2009-06-18
  • 打赏
  • 举报
回复
自己控制编号比较适合单用户操作:
1)新增时取 MAX(ID)+1 作为新的编号
2)删除时用一个事务做两步
 a) DELETE table1 WHERE ID = 10001
 b) UPDATE table1 SET ID = ID -1 WHERE ID > 10001


terrywolf 2009-06-18
  • 打赏
  • 举报
回复

引用 4 楼的回复:

不会,处理得当,可忽略不计。


请问,有代码给我们看看吗?
hanmin22 2009-06-17
  • 打赏
  • 举报
回复
顶起,想请教一下用程序如何处理为好,谢谢了!
vbman2003 2009-06-16
  • 打赏
  • 举报
回复
自动编号是标识数据的唯一性....
经过添加删除操作后并非一定连续的...
饮水需思源 2009-06-16
  • 打赏
  • 举报
回复
要求边续编号则建议不要使用自动编号,而是用代码来处理编号
射天狼 2009-06-16
  • 打赏
  • 举报
回复
自动编号主要是用做无重复的主键,比如主表、明细表结构,明细表的主键一般采用自增值主键。

你所说的序列没必要用数据库中实际存在的列,可以用程序来做处理,顺序生成即可。

天狼工作室 http://www.j2soft.cn/
贝隆 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hanmin22 的回复:]
引用 1 楼 leftie 的回复:
要求边续编号则建议不要使用自动编号,而是用代码来处理编号


如果用代码来处理的话,当数据很多的时候,程序处理则需要等待一定的时间了?
[/Quote]
不会,处理得当,可忽略不计。
hanmin22 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 leftie 的回复:]
要求边续编号则建议不要使用自动编号,而是用代码来处理编号
[/Quote]

如果用代码来处理的话,当数据很多的时候,程序处理则需要等待一定的时间了?

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧