begin
with DataModule6.ADOQuery1 do
begin
Close;
sql.Text := 'select * from 客户档案 order by ' ; sql.Text := sql.Text + Combobox12.Text;
if (RadioGroup1.ItemIndex=1) then
sql.Text := sql.Text + ' Desc'; sql.Text := sql.Text + ',' + Combobox13.Text;
if (RadioGroup2.ItemIndex=1) then
sql.Text := sql.Text + ' Desc'; sql.Text := sql.Text + ',' + Combobox14.Text;
if (RadioGroup3.ItemIndex=1) then
sql.Text := sql.Text + ' Desc';
Open;
end;
end;上面的代码的问题在于:当我同时选择Combobox12,Combobox13,Combobox14里的字段时,程序能运行。如果我有一个没选,则程序会出现错误……我问了一些人,估计是没有做出判断,但是我又不会写代码,望高手留步,解决一下,不甚感激!顺便说明一下,这里要考虑优先级,类似excel的排序!combobox12优于Combobox13,Combobox13优于Combobox14.
还有我在询问的时候,发现一个问题,貌似desc是只能弄一次……所以、可能我这个程序是不是全部要改的啊?
with DataModule6.ADOQuery1 do
begin
Close;
sql.Text := 'select * from 客户档案 order by ' ; sql.Text := sql.Text + Combobox12.Text;
if (RadioGroup1.ItemIndex=1) then
sql.Text := sql.Text + ' Desc'; sql.Text := sql.Text + ',' + Combobox13.Text;
if (RadioGroup2.ItemIndex=1) then
sql.Text := sql.Text + ' Desc'; sql.Text := sql.Text + ',' + Combobox14.Text;
if (RadioGroup3.ItemIndex=1) then
sql.Text := sql.Text + ' Desc';
Open;
end;
end;上面的代码的问题在于:当我同时选择Combobox12,Combobox13,Combobox14里的字段时,程序能运行。如果我有一个没选,则程序会出现错误……我问了一些人,估计是没有做出判断,但是我又不会写代码,望高手留步,解决一下,不甚感激!顺便说明一下,这里要考虑优先级,类似excel的排序!combobox12优于Combobox13,Combobox13优于Combobox14.
还有我在询问的时候,发现一个问题,貌似desc是只能弄一次……所以、可能我这个程序是不是全部要改的啊?
with DataModule6.ADOQuery1 do
begin
Close;
sql.Text := 'select * from 客户档案 order by ' ;if Combobox12.Text<>'' then
begin
sql.Text := sql.Text + Combobox12.Text;
if (RadioGroup1.ItemIndex=1) then
sql.Text := sql.Text + ' Desc';
end;if Combobox13.Text<>'' then
begin
sql.Text := sql.Text + ',' + Combobox13.Text;
if (RadioGroup2.ItemIndex=1) then
sql.Text := sql.Text + ' Desc';
end;if Combobox14.Text<>'' then
begin
sql.Text := sql.Text + ',' + Combobox14.Text;
if (RadioGroup3.ItemIndex=1) then
sql.Text := sql.Text + ' Desc';
end; Open;
end;
end;
sOrderBy: string;
begin
with DataModule6.ADOQuery1 do
begin
Close;
sOrderBy := '';
if Trim(Combobox12.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox12.Text +
IfThen(RadioGroup1.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox13.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox13.Text +
IfThen(RadioGroup2.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox14.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox14.Text +
IfThen(RadioGroup3.ItemIndex = 1, ' desc ', '');
end;
if sOrderBy <> EmptyStr then
sOrderBy := Copy(sOrderBy, 2, Length(sOrderBy) - 1); //去掉开始的逗号
SQL.Text := 'select * from 客户档案 ' + sOrderBy;
Open;
end;
end;
这个问题,因为字段在combobox中,我这个是DBgrid与combobox相连的,当表格中的字段名改变,同时combobox的下拉内容的字段也改变……
楼上说道德没有字段,我不知道怎么添加?……
s1:='select * from 客户档案 ';
s2:='';if Combobox12.Text<>'' then
begin
s2 := s2 + Combobox12.Text;
if (RadioGroup1.ItemIndex=1) then
s2 := s2 + ' Desc';
end;if Combobox13.Text<>'' then
begin
if s2<>'' then
s2:=s2+',';
s2 := s2 + Combobox13.Text;
if (RadioGroup2.ItemIndex=1) then
s2 := s2 + ' Desc';
end;if Combobox14.Text<>'' then
begin
if s2<>'' then
s2:=s2+',';
s2 := s2 + Combobox14.Text;
if (RadioGroup3.ItemIndex=1) then
s2 := s2 + ' Desc';
end;if s2<>'' then
sql.text:=s1+' order by '+s2
else
sql.text:=s1;
var
sOrderBy: string;
begin
with DataModule6.ADOQuery1 do
begin
Close;
sOrderBy := '';
if Trim(Combobox12.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox12.Text +
IfThen(RadioGroup1.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox13.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox13.Text +
IfThen(RadioGroup2.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox14.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox14.Text +
IfThen(RadioGroup3.ItemIndex = 1, ' desc ', '');
end;
if sOrderBy <> EmptyStr then
sOrderBy :=' order by ' +Copy(sOrderBy, 2, Length(sOrderBy) - 1); //去掉开始的逗号
SQL.Text := 'select * from 客户档案 ' + sOrderBy;
Open;
end;
end;
你应该是没有引用单元 你需要引用一下 StrUtils原型是:
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;
var
sOrderBy: string;
begin
with DataModule6.ADOQuery1 do
begin
Close;
sOrderBy := '';
if Trim(Combobox12.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox12.Text +
IfThen(RadioGroup1.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox13.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox13.Text +
IfThen(RadioGroup2.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox14.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox14.Text +
IfThen(RadioGroup3.ItemIndex = 1, ' desc ', '');
end;
if sOrderBy <> EmptyStr then
sOrderBy :=' order by ' +Copy(sOrderBy, 2, Length(sOrderBy) - 1); //去掉开始的逗号
SQL.Text := 'select * from 客户档案 ' + sOrderBy;
Open;
end;
end;
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;
var
sOrderBy: string;
begin
with DataModule6.ADOQuery1 do
begin
Close;
sOrderBy := '';
if Trim(Combobox12.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox12.Text +
IfThen(RadioGroup1.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox13.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox13.Text +
IfThen(RadioGroup2.ItemIndex = 1, ' desc ', '');
end;
if Trim(Combobox14.Text) <> EmptyStr then
begin
sOrderBy := sOrderBy + ',' + Combobox14.Text +
IfThen(RadioGroup3.ItemIndex = 1, ' desc ', '');
end;
if sOrderBy <> EmptyStr then
sOrderBy := ' order by ' + Copy(sOrderBy, 2, Length(sOrderBy) - 1); //去掉开始的逗号
SQL.Text := 'select * from 客户档案 ' + sOrderBy;
Open;
end;
end;
18楼,我等你的解决方案!
function IfThen(AValue: Boolean; const ATrue: string;
AFalse: string = ''): string;
begin
if AValue then
Result := ATrue
else
Result := AFalse;
end;var
sOrderBy: string;
begin
with DataModule6.ADOQuery1 do
begin
Close;
sOrderBy := '';
if Trim(Combobox9.Text) <> EmptyStr then
begin
sOrderBy := Combobox9.Text +
IfThen(RadioGroup1.ItemIndex = 1, ' desc ',' ');
end; if Trim(Combobox10.Text) <> EmptyStr then
begin
if Trim(Combobox9.Text) <> EmptyStr then
sOrderBy := sOrderBy + ' ,' + Combobox10.Text +
ifThen(RadioGroup2.ItemIndex = 1, ' desc ', ' ')
else
sOrderBy := sOrderBy + Combobox10.Text +
IfThen(RadioGroup2.ItemIndex = 1, ' desc ', ' ') ;
end; if Trim(Combobox12.Text) <> EmptyStr then
begin
if (Trim(Combobox9.Text) <> EmptyStr )or (Trim(Combobox10.Text) <> EmptyStr )then
sOrderBy := sOrderBy + ' ,' + Combobox12.Text +
ifThen(RadioGroup3.ItemIndex = 1, ' desc ', ' ')
else
sOrderBy := sOrderBy + Combobox12.Text +
IfThen(RadioGroup3.ItemIndex = 1, ' desc ', ' ');
end; if sOrderBy <> EmptyStr then
SQL.Text := 'select * from 客户档案 order by ' + sOrderBy; Open;
end;
end;
这个就是没有问题的代码,希望能帮助那些和我一样有这困扰的人们……嘿嘿!