求购复杂动态SQL查询的示例----具体分要看结果我再定的(20分)

  • 主题发起人 主题发起人 hqlww
  • 开始时间 开始时间
H

hqlww

Unregistered / Unconfirmed
GUEST, unregistred user!
请找出错误?
procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
begin
s:='';
if radiobutton1.checked then s:=s+'dept like:dept_1'
else if radiobutton2.checked then s:=s+'salary>:salary_1'
else if radiobutton3.checked then s:=s+'sex like:sex_1';
if s<>'' then
begin
close;
query1.sql.clear;
query1.sql.add('select * from yuangong.db');
query1.sql.add('where'+s);
if radiobutton1.checked then
query1.params.paramValues['dept_1']:=combobox1.text
else if radiobutton2.checked then
query1.params.paramValues['salary_1']:=strtoint(edit2.text)
else query1.params.paramValues['sex_1']:=combobox2.text;
query1.open;
end;
end;
 
在没有数据库的情况下,上面的程序应该没什么错误!
你运行有错误吗?
 
用query1.parameter.parambyname('dept-1').value:=comboxbox1.text试试。
 
当RadioButton1、RadioButton2和RadioButton3的Checked属性都有True时,你的代码就有问题。
在这儿用RadioGroup代替RadioButton更利于控制:

procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
begin
s:='';
case RadioGroup1 do
0:s:=s+'dept like :dept_1';//like后记得加空格
1:s:=s+'salary>:salary_1';
2:s:=s+'sex like :sex_1';//同上
end;
if s<>'' then
begin
close;
query1.sql.clear;
query1.sql.add('select * from yuangong.db');
query1.sql.add('where '+s);//where后加上空格
case RadioGroup1 do
0:query1.params.paramValues['dept_1']:=combobox1.text;
1:query1.params.paramValues['salary_1']:=strtoint(edit2.text);
2:query1.params.paramValues['sex_1']:=combobox2.text;
end;
query1.open;
end;
end;
 
谢谢你,希望以后多点学习的机会。再次感谢!
我的QQ:52674330
 

begin
close; // 因该是 query1.close; 吧!
query1.sql.clear;
query1.sql.add('select * from yuangong.db');
query1.sql.add('where'+s);
if radiobutton1.checked then
query1.params.paramValues['dept_1']:=combobox1.text
else if radiobutton2.checked then
query1.params.paramValues['salary_1']:=strtoint(edit2.text)
else query1.params.paramValues['sex_1']:=combobox2.text;
query1.open;
end;

不知道你是用的什么类型的查询控件,如果是ado的话应该是
query1.parameters[0].value := xxx;

 
后退
顶部