比如如下3条纪录
a
b
c
把a移动到下面,变成
b
a
c
如何做,
排序我试过了不行,先谢谢了

解决方案 »

  1.   


    procedure TForm1.BitBtn61Click(Sender: TObject);
    begin
      ListBox1.Items.Exchange(0,1);
    end;
    ListBox1的Items
    a
    b
    c
      

  2.   

    对数据表来说,这种随意的、杂乱无章的排序要实现起来,没有什么好办法。加一个辅助字段,来记录每个记录的顺序,保存后,再打开时也能记住当前顺序。
    序号  名称
    1      a 
    2      b
    3      c下,上移光标时,改变当前记录和上或下一记录的序号即可。这个不详细说明了。
      

  3.   

    先说说我目前的办法
    用2个Record类型的变量保存相邻两行的数据
    然后依次改变数据
    比如说
    表有3行
    1
    2
    3type data: Record
           a: String;
         end;var
    adata,bdata: data;
    begin
     adata := 1; //把第一行数据保存
     ADOquery.Next; //光标移动到下一条
     bdata := 2; // 把第二行保存 ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了)
     
     1 := bdata; //把第一行数据改成2
     2 := adata; //把第二行数据改成1ADOquery.Post;
    end;这样等于是蛮干,就是想找个更好的办法
    还望各位帮帮忙
      

  4.   

    首先要有一个默认的顺序号,(记录号),最好不要用光标,光标的可控性不好,键盘可以影响,鼠标也可以影响,可设两个按纽,上移或下移就行了。
    这个方案,仅限于相邻的两个记录的上下移动,移动完成好定位在当前记录adoquery.sql:='select * from aa order by 序号'begin
     if 下移记录 and not eof() then begin
     adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1;
     ADOquery.Next; //光标移动到下一条
     adoquery.fieldbyname('序号').asinteger:= adoquery.fieldbyname('序号').asinteger-1; // 把第二行保存
     recnols:=adoquery.recno();//记录当前记录调整后的顺序
     end;
    if 上移记录 and not bof() then begin
     adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger-1;
     ADOquery.pioro//光标移动到上一条(pioro有错误,我不记得了)
     adoquery1.fieldbyname('序号').asinteger:= adoquery1.fieldbyname('序号').asinteger+1;
     recnols:=adoquery.recno();//记录当前记录调整后的顺序号
    end;
     ADOquery.Post;
     adoquery.requery;
     adoquery.recno:=recnols;//定位至当前记录
    end;
      

  5.   

    建议使用TStringList,可以很好地排序。
      

  6.   

    用SQL语句 后面加Order by 排序应该可以吧
      

  7.   

    ADO里面是有Sort这个属性, 可以写FIELDNAME ASC, FIELD DESC.....的格式直接排序的..
    交换记录, 都得要自己按字段来循环交换, 可以写一个通用的过程的, 根据每种字段不同的类型来进行采用不同方式的交换方式.