有SQL表(M)如下
M_id M_name M_sex M_age M_tel
1 张三 男 20 123456已用adoconnection连接好数据库,用adoquery指定好adoconnection,dataSource指定好adoquery,dbgrideh指定好dataSource
并添加一button
要求按button时dbgrideh显示上面表格的内容我在button里面添加这个代码时不知道怎么排序(因为我的列不是固定的,我是按代码显示的)procedure TForm1.Button1Click(Sender: TObject);
beginwith ADOQuery1 do
   begin
      close;
      sql.Clear;
      sql.Add('select M_id,M_name,M_sex from 会员信息');
      open;
   end;end;我在网上找了一些排序的,感觉用不上,我不知道这种不固定列要怎样实现排序,望大家指点
最好能用较详细的dbgrideh相关设置或代码,本人对dbgrideh这个不是很了解,谢谢另外我还想了解如何设置dbgrideh列宽,我每次查询得到的结果列宽总是很大的,但数据又没有多少,很难看

解决方案 »

  1.   

    排序有两个办法1:用sql语句的order by 排序
    2:使用adoquery的sort属性来排序,delphi 7的帮助有例子,列宽的调整应该是要添加dbgrideh的columns之后再设置width吧
      

  2.   

    用SQL里面的ORDER BY 来做!
      

  3.   

    1:用order by比如按m_id排序
    sql.Add('select M_id,M_name,M_sex from 会员信息 order  by M_id');这个办法的缺点是重新排序需要重新查询,如果查询复杂,数据量大的时候比较耗时2:用使用adoquery的sort
    比如按m_id排序,在执行完查询后,再加一句
    adoquery1.sort:='m_id,desc';这个办法重新排序只要设置adoquery的sort,无需重新查询,速度快
      
      

  4.   

    ehlib 需要设置一系列属性 才可以 实现点击列头 自动排序引用单元  adoehlibeh (加入你用的是ado)设置 option dghautosorting=true设置列 的 属性 titlebutton=true;你试试吧
      

  5.   

    USES EhlibCDS,EhlibADO;
    var
    i:Integer;
    begin
     DBGridEh1.SortLocal:=True;
     DBGridEh1.OptionsEh:=DBGridEh1.OptionsEh+[dghAutoSortMarking];
     for i:=0 to DBGridEh1.Columns.Count-1 do
       DBGridEh1.Columns[i].Title.TitleButton:=True;
    end;