做了个程序,使用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 SubSub 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 

解决方案 »

  1.   

    自动编号主要是用做无重复的主键,比如主表、明细表结构,明细表的主键一般采用自增值主键。你所说的序列没必要用数据库中实际存在的列,可以用程序来做处理,顺序生成即可。天狼工作室 http://www.j2soft.cn/
      

  2.   

    自己控制编号比较适合单用户操作: 
    1)新增时取 MAX(ID)+1 作为新的编号 
    2)删除时用一个事务做两步 
     a) DELETE table1 WHERE ID = 10001 
     b) UPDATE table1 SET ID = ID -1 WHERE ID > 10001
      

  3.   

    对了,8楼的发言是以前tiger_zhao教我的原话。嘿嘿。
      

  4.   

    access的自动编号就是无重复的,就算你删了一条记录,它的编号也不会再出现
      

  5.   

    楼主要有这样一个概念: 数据表是用来存取数据的,并不是直接给用户浏览的,对同样的数据,不同的用户可能会有不一样的要求,比如一张学生成绩表, 班主任关心的可能是学生的总分次序, 数学老师要的是数学成绩次序,语文老师要的是语文成绩次序,可见你在表中想设置次序相关的字段是毫无意义的,这些都只有根据用户的需求,在提取数据时处理的...
    程序中处理序号的方法有许多,有的数据在查询时用SQL语句就可以解决,也可以根据显示数据的表格总行数,用循环插入,都很简单...