有个合同表
合同号   品名代码
001-4    001
001-4    002
我想在两条纪录之间插入一条纪录。代码如下:
  dm1.ADOQuery1.Insert();
  dm1.ADOQuery1.FieldByName("hth").AsString="001-4     " ;
//  DBGrid1.Refresh();
插入之前,我已经把鼠标定位在第二条纪录上,插入后,确实在两条纪录之间产生了一条空纪录,但只要我一移动鼠标,新增的纪录就跑到最后去了。为什么?
我已经把主健,索引之类的东西都去掉了,也没有设置排序方面的东西。
我就是想在两条纪录之间产生一个空纪录(除合同号外)其实,我的这个显示在那里的空行时用户为了特殊需要在输入、输出时才有的。一定要显示在那里才能完成打印要求,在数据库里是没有的(在数据库里我考虑用一个字段来描述他的前面有几个空行),如果为了这个目的加顺序号的话,控制起来可能很麻烦,因为用户说不定要加几条空行。就需要有一个确定乃至调整顺序号的函数。我设想的合同用户数目可能会达到200条。

解决方案 »

  1.   

    在SQL语句中添加Order By语句试试看
      

  2.   

    用TBookMarkt試試...var Place : TBookMark;
    begin
      try
        with dm1.ADOQuery1 do begin
       ... 
          Place := GetBook;
          Close ;
          Open ;
          GotoBook(Place);
          FreeBook(Place);
          FormMain.DBGrid1.SelectedRows.CurrentRowSelected := true;
        end;
      except
        //
      end;
    end;
      

  3.   

    兄弟:
       我同意思虫了的意思用SQL语句如下:
       self.adoquery1.colose;
       self.adoquery1.sql.clear;
       self.adoquery1.sql.add('select * from table order by 合同号,品名代码');
      

  4.   

    不好意思,看错了,这个呀,我想应该用游标吧!用游标先定位于第二记录,这样才是具有某种特定意义上的插入,加入游标的SQL语句如下:
    self.adoquery1.sql.add('Declare gyb_OfficeID SCROLL CURSOR for select * from table ');
    在用游标进行操作,就可以OK!哈
      

  5.   

    to 小虫、电脑世界两大侠,我只能加order by 合同号,不能加拼命代码,因为用户有特殊要求,就要在两个品名中间加不确定数目的空行,还要打印。只加order by 合同号,结果还是一样的。
    爱理不理的代码似乎没有解决排序的问题。
    我不设排序的话,应该是我在那里插入,新纪录就应该一直保存在那里才对,为什么不呢?是不是有某种自动排序的机制。
    请继续执教。我再现等。
      

  6.   

    用 ailibuli(愛理不理) 说的就行
      

  7.   

    ailibuli(愛理不理) 说的就行??
    我以为只不过是另一种refresh的方法,真行吗?我没试,现在不方便,明天试验。
    问题是我新增以后并不马上提交,close,再open,不就又恢复了原样吗(没有插入之;)?
      

  8.   

    TO 民工和爱理不理:
    经试验,我的想法时正确的,关闭再打开,恢复原样。
    TO 电脑世界
    最近较忙,没搞懂游标时怎么回事,如何利用呢?游标是哪里的概念呢?SQL SERVER,DATASET,ORACLE?
    请各位大虾赐教。
    我之所以叫嚷“亏了”,只不过是UP的另一种说法而已,别见怪。
    我已经另加了一个序号子段,解决了这个问题,但感觉不爽。
      

  9.   

    TO haofengfu(风斧):
        游标就是任何一种数据库都有的,你可以在SQL SERVER的书中去找一下,很简单的!
    现在要我写条出来,我写不出来,我在外面网吧上网,向边没资料!
    不好意思哈!
    如果,等我回去了,你还没写出来的话,我就给你!