var Sql,Field:String; begin Field:=Column.Field.FieldName; //取得排序的字段名 Query1.Close; Sql:=Query1.SQL.Text; if Pos('Order by',Sql)>0 then Delete(Sql,Pos('Order',Sql),Length(Sql)-Pos('Order',Sql)); //删除原Order by子句,注意:原来的Order by 子句大小写和空格一定要写成Order by,其它 //的格式(如:ORDER by )都不行的!! Sql:=Sql+'Order by '+Field;//新排序子句 Query1.SQL.Text:=Sql; Query1.Open; end;
我试过了ORDER by可以的 procedure Tcompanybrows.DBGrid1TitleClick(Column: TColumn); var gs:string; begin gs:=column.fieldname; with Query1 do begin close; sql.Clear; sql.Add('select * from table ORDER by '+gs); open; end; end;
DBGrid1Boolean: boolean; //全局变量
ADOTable1: TADOTable;
procedure TForm1MainMenu.DBGrid1TitleClick(Column: TColumn); begin with ADOTable1 do begin if DBGrid1Boolean then TADOTable(ADOTable1).Sort := Column.FieldName + ' DESC' else TADOTable(ADOTable1).Sort := Column.FieldName; DBGrid1Boolean := not(DBGrid1Boolean); end; end;
关注 不知道我遇到的和你的问题是不是一样,是否出现的是列名无效异常,SQL语句都没错(当然ORDER BY 大小写是没有什么关系的) 感觉有点怪
Sql,Field:String;
begin
Field:=Column.Field.FieldName; //取得排序的字段名
Query1.Close;
Sql:=Query1.SQL.Text;
if Pos('Order by',Sql)>0 then
Delete(Sql,Pos('Order',Sql),Length(Sql)-Pos('Order',Sql));
//删除原Order by子句,注意:原来的Order by 子句大小写和空格一定要写成Order by,其它
//的格式(如:ORDER by )都不行的!!
Sql:=Sql+'Order by '+Field;//新排序子句
Query1.SQL.Text:=Sql;
Query1.Open;
end;
procedure Tcompanybrows.DBGrid1TitleClick(Column: TColumn);
var
gs:string;
begin
gs:=column.fieldname;
with Query1 do
begin
close;
sql.Clear;
sql.Add('select * from table ORDER by '+gs);
open;
end;
end;
ADOTable1: TADOTable;
procedure TForm1MainMenu.DBGrid1TitleClick(Column: TColumn);
begin
with ADOTable1 do
begin
if DBGrid1Boolean then
TADOTable(ADOTable1).Sort := Column.FieldName + ' DESC'
else
TADOTable(ADOTable1).Sort := Column.FieldName;
DBGrid1Boolean := not(DBGrid1Boolean);
end;
end;
不知道我遇到的和你的问题是不是一样,是否出现的是列名无效异常,SQL语句都没错(当然ORDER BY 大小写是没有什么关系的) 感觉有点怪