I use the following code in woll2woll 's infopower, I just made it, so still not optimized or fully tested. If someone has a bettter method, pls let me know:
procedure TLogForm.wwDBGrid1TitleButtonClick(Sender: TObject;
AFieldName: string);
begin
DOA_Sort(DOA_LogView, AFieldName);
end;
procedure DOA_Sort(DOA_Table : TOracleDataSet; AFieldname : string);
var
SQLText: string;
i: integer;
desc: string;
tmp1: string;
begin
SQLText := uppercase(DOA_Table.sql.Text);
i := pos('ORDER BY', SQLText);
if (i 0) then begin
tmp1 := copy(SQLTExt, i, length(SQLText) - i);
Desc := '';
if pos(AFieldname, tmp1) 0 then begin
if pos('DESC', tmp1) = 0 then begin
Desc := ' DESC ';
end;
end;
SQLText := copy(SQLTExt, 0, (i - 1)) + 'ORDER BY ' + AFieldname + Desc;
end
else begin
SQLText := SQLTExt + ' ORDER BY ' + AFieldname;
end;
DOA_Table.sql.Clear;
DOA_Table.sql.add(SQLText);
DOA_Table.refresh;
end;