我做了一个数据库,里面有一个表,我用adotable和dbgrid控件和它建立了连接。表的结构如下:
序号    货号      现价       建立日期
1        090842    鸡蛋       2003-12-05
2        025361     面包      2003-12-31其中序号字段是用的identity类型,初始值为1(为主键)
我做了一个界面,通过DBGRID可以显示这些记录。用户可以“添加”、“修改”,“删除”,为了达到用户每添加修改一个记录,都能使dbgrid的当前记录停留在我操作的这条记录,我使用了这样的方法,因为序号字段记录了序号的顺序,而且又是主键,所以每次操作后,我就首先取得操作记录的序号值赋给seq变量,然后seq-1,接着写下面的代码
                        adotable1.first
                        adotable1.movtby(seq)
这样倒是可以实现我要的效果,但是如果曾经删除过记录后,因为identity是递增的,就会造成序号不连续,这样移动的位置就不准了,请高手们帮我想一个简明的解决方案。

解决方案 »

  1.   

    写错了adotable1.movtby(seq)应为adotable1.moveby(seq)
      

  2.   

    是这样的,identity 字段是自动增加的,比如自动增加到40了,但如果我把第32条记录删除了,字段就不连续了。还有比如我增加了第41条记录后,又把它删了,然后又增加一条记录,
    idntity值不是41而是42
      

  3.   

    先设一个全局变量
    public
    ROW:integer;
    然后在DBGRID的DBGrid1CellClick
    写如下
    row:=ADOQUERY.RECNO//实时记住位置;
    当你添加或删除或修时
    加上一句ADOQUERY.RecNo:=ROW;
    至于误差就自己搞+-一下就可以了.