点击DBGrid的Title对查询结果排序

2016-02-19 18:49 1 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐点击DBGrid的Title对查询结果排序,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

  //欲实现点击DBGrid的Title对查询结果排序,想作一个通用程序,不是一事一议,
  //例如不能在SQL语句中增加Order by ...,因为SQL可能原来已经包含Order by ...,
  //而且点击另一个Title时又要另外排序,目的是想作到象资源管理器那样随心所欲。
  procedure TfrmChild.DBGrid1TitleClick(Column: TColumn);
  var
    SqlStr,myFieldName,TempStr: string;
    OrderPos: integer;
    SavedParams: TParams;
  begin
    if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
    if Column.Field.FieldKind =fkData then
      myFieldName := UpperCase(Column.Field.FieldName)
    else
      myFieldName := UpperCase(Column.Field.KeyFields);
    while Pos(myFieldName,';')0 do
      myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1)
                    + ',' + copy(myFieldName,Pos(myFieldName,';')+1,100);
    with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
    begin
      SqlStr := UpperCase(Sql.Text);
  //  if pos(myFieldName,SqlStr)=0 then exit;
      if ParamCount0 then
      begin
        SavedParams := TParams.Create;
        SavedParams.Assign(Params);
      end;
      OrderPos := pos('ORDER',SqlStr);
      if (OrderPos=0) or
        (pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then
        TempStr := ' Order By ' + myFieldName + ' Asc'
      else if pos('ASC',SqlStr)=0 then
        TempStr := ' Order By ' + myFieldName + ' Asc'
      else
        TempStr := ' Order By ' + myFieldName + ' Desc';
      if OrderPos0 then SqlStr := Copy(SqlStr,1,OrderPos-1);
      SqlStr := SqlStr + TempStr;
      Active := False;
      Sql.Clear;
      Sql.Text := SqlStr;
      if ParamCount0 then
      begin
        Params.AssignValues(SavedParams);
        SavedParams.Free;
      end;
      Prepare;
      Open;
    end;

  

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1619080.html

延伸阅读
xxx
似乎讨论分页的人很少,难道大家都沉迷于limit m,n? 在有索引的情况下,limit m,n速度足够,可是在复杂条件搜索时, where somthing order by somefield+somefield mysql会搜遍数据库,找出“所有”符合条件的记录,然后取出m,n条记录。 如果你的数据量有几十万条,用户又搜索一些很通俗的词, 然后要依次读最后几页重温旧梦。。。mysql...
xxx
标签: ASP
  'EXCELa.VBS '直接将查询数据结果生成 EXCEL 表,稍做修改后即可 '改成ASP文件放在服务器上面向客户 option Explicit dim conn,strConnString Set conn = WScript.CreateObject("ADODB.Connection") on error resume next strConnString ="Provider=SQLOLEDB.1;Password=UP;" & _     &n...
标签: SQLServer
  /* 'bcp' 不是内部或外部命令,也不是可运行的程序? 看看在C:\Program Files\Microsoft SQL Server\80\Tools\Binn里面有没有bcp.exe这个文件 然后看看path里面加C:\Program Files\Microsoft SQL Server\80\Tools\Binn这个目录没有. 右键我的电脑--属性--高级--环境变量--在系统变量中找到path--编辑 在变量值的最后加上: C:\Prog...

经验教程

273

收藏

88
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部