如题,情况是这样的, 
用的是ADOQUERY+sql server。我想在结果集中插入数据,当按下INSERT键时,光标是在插入位置,但编辑好数据后,记录却跑到了最后结果,好像用了APPEND命令。
我发现好像是ADOQUERY的问题,当我在DBGRID中某一行按INSERT并编辑好数据后,只要离开这一行,记录便会跑到最后。(请注意,我未保存入数据库)而如果用的是普通的
QUERY,便不会发生这种情况,但我必须要用ADO,各位请帮帮忙,看看该怎么办?
我要操作的表如下:id      姓1       赵
2       钱
3       李
4       周
现在我想在2和3之间插入一条‘孙’,即插入后变成
1       赵
2       钱
3       孙
4       李
5       周     
并显示在dbgrid中
各位帮帮忙,先谢谢了!

解决方案 »

  1.   

    你是不是程序里用了那个字段的索引,ADOTABLE.INSERT应该不会插入到最后的,只有ADOTABLE.APPEND才会
      

  2.   

    显示的是时候 order by id 一下,是不是你的表中的主键的问题,还有索引,这些东西会系统记录显示的正常顺序。
      

  3.   

    我试了两项:
    1.
    adoquery和bde中的query,确实不一样,我用两个dbgrid,两个button,click事件分别是
              button1.click:=adoquery1.insert;          button2.click:=query1.insert;
    这里adoquery1和query1都对应一张表,表没有主键,表显示的时候,也没用order by ,我在dbgrid上点击一条纪录后,单击button,都在点击处插入了一条记录,此时用鼠标点击其他记录时,query1插入的新记录仍在原位。而adoquery1插入的新记录跑到了最后面,不知道是为什么?2.
    我现在要做的表里的记录是要按顺序显示的,id不是自动增长, 所以提出来的话必须order by id。
    我又试了一下:是这么做的,比如,在一条记录处insert一条新记录,则让新记录的id等于插入处记录的id ,插入处记录及其后面记录的id,都相应加1,然后再
    order by id 提出显示在dbgrid中,可以实现,但是太麻烦,每insert一条记录,都要重新提一遍记录,效率太低,不知各位高手有没有更好的方法呀。
    这个问题解决了,一定给高分,先谢谢大家了。
      

  4.   

    1.我觉得可能使adoquery重新执行了一次sql,你可以用sql server的工具观察一次,他有没有再插入纪录的同时重新执行了sql。
    2.我觉得这个问题很不好解决,如果使插入的话,而且你的id又是手工改动,只能这样,要不就用触发器在server端处理。
      

  5.   

    如果你用了自动增量字段或是索引字段的话,添加记录总是向表的最后面APPEND的!
      

  6.   

    但是我没有特意给表建索引,sql server中会默认自己建索引吗?糊涂了