我现在做的程序是c/s模式的
以前直接对数据库操作,速度慢不说而且还老出问题,贴出代码后就没人回答了,参见:http://expert.csdn.net/Expert/topic/2337/2337487.xml?temp=.1895258和http://expert.csdn.net/Expert/topic/2232/2232973.xml?temp=.4777643
现在的方法是将查询结果返回到内存表(RXLib的memorytable)中,然后用Grid对内存表操作。
问题如下:
对Grid添加记录时一切正常,插入记录时如何在grid中对序号字段排序显示?我在程序中序号1的位置插入记录后grid中记录依次为2、3、4...1
memorytable无sort过程方法

解决方案 »

  1.   

    我觉得你不如直接在数据更新以后用SQL语句查询数据
    ORDER BY 要排序的字段,更简单,更方便,也更快
      

  2.   

    xi_yao:如果直接对数据库操作的话,在用户添加、修改、删除记录的时侯速度会很慢,而且多用户同时使用时要控制临时单据的生成(可以参考我以前的贴子)。谢谢关注,希望有高手能解决此问题,分不够的话另开贴。
      

  3.   

    你用的是三方控件,干吗不用adoquery,那样排序多省事!
      

  4.   

    没用过内存表。不清楚具体的解法。但是对你采用的这个方法不同意,只是说说个人的处理方式。
    试想:User在Edit的时候,只关注当前Edit的那笔资料,不会过多关注它所处的位置,它所处的序号。如果真要排序的功能,可以在User编辑完成后再加一个刷新的功能让他重查一遍就是了。因为这个排序的功能本身就不是核心功能,没必要花大力量写很多代码去解决。
    我以前也碰到过这种情况,所不同的是该功能不是我的客户提出来的,是俺Boss硬要加。后来我将Boss的方法变通了一下(就是再多加一个刷新钮),客户验收时也没有提出什么异议:)
      

  5.   

    这个功能是在需求中的,以前的老系统开始没有插入的功能,所输入的记录都是依次递增的,后来用户强烈要求后加了这个功能,以前的老系统是VFP写的
    能说说你的方法吗?
      

  6.   

    我后来写了一个过程,如下:
    procedure InsRec(Dataset:Tdataset);
    var
     aField : Variant ;
     i,no: Integer ;
    begin
     with query do
     begin
    //得到插入前的序号
       no:=FieldByName('序号').AsInteger;
       append;
       last; //到最后一条记录
    //当前序号大于插入前的序号时复制记录
       while FieldByName('序号').AsInteger>no do
       begin
          prior;//到第j-1条记录开始读入
          aField := VarArrayCreate([0,DataSet.Fieldcount-1],VarVariant);
          for i := 0 to (DataSet.Fieldcount-1) do begin
             aField[i] := DataSet.fields[i].Value ;
          end;
          next;//到第j条记录开始写入
          for i := 0 to (DataSet.Fieldcount-1) do begin
             DataSet.fields[i].Value := aField[i] ;
          end;
          Prior;//这条记录写完后定位到上一条
       end;//end while
     end;//end with
    end;
    问题是记录并没有下移,而是追加了一条空记录