一个表student中存储着student的班级、姓名、成绩。
表student的结构如下:
create table student( class int, studentname varchar(30), score varchar(10))
adoquery用于查询,有dbgrid与之相连用作显示查询结果。
要实现的功能如下:
adoquery 可以按三个条件进行查询: 班级、学生姓名、成绩。既可以用多个条件查询,也可以只有某一个条件进行查询。
我在界面上放了三个checkbox,如果某个checkbox被选中,则该checkbox对应的条件就有效。
如:class 对应的checkbox和 studentname对应的checkbox都被选中,那么adoquery进行查找时就以 class 和 studentname 作为条件。问题如下,要实现以上功能,adoquery的查询语句应该怎么写呢?
表student的结构如下:
create table student( class int, studentname varchar(30), score varchar(10))
adoquery用于查询,有dbgrid与之相连用作显示查询结果。
要实现的功能如下:
adoquery 可以按三个条件进行查询: 班级、学生姓名、成绩。既可以用多个条件查询,也可以只有某一个条件进行查询。
我在界面上放了三个checkbox,如果某个checkbox被选中,则该checkbox对应的条件就有效。
如:class 对应的checkbox和 studentname对应的checkbox都被选中,那么adoquery进行查找时就以 class 和 studentname 作为条件。问题如下,要实现以上功能,adoquery的查询语句应该怎么写呢?
在CheckBox的单击事件中分别调用这个过程,以实现 不同方式查找。
procedure UpdateSql;
begin
ADOQuery1.Close;
ADOQuery1.Clear;
ADOQuery1.Sql.Add('Select *');
ADOQuery1.Sql.Add('From Student');
ADOQuery1.Sql.Add('Where (1=1)');
if CheckBox1.Checked then
ADOQuery1.Sql.Add(' And (Class Like' + QuotedStr(FilterText) + ')')
else ADOQuery1.Sql.Add('');
if CheckBox2.Checked then
ADOQuery1.Sql.Add(' And (StudentName Like' + QuotedStr(FilterText) + ')')
else ADOQuery1.Sql.Add('');
if CheckBox2.Checked then
ADOQuery1.Sql.Add(' And (Score > ' + QuotedStr(StrToInt(FilterText)) + ')')
else ADOQuery1.Sql.Add('');
ADOQuery1.Open;
end;
var
sql,s:string;
i1,i2,i3,i:Integer;
begin
sql:='select * from student where ';
i1:=0;
i2:=0;
i3:=0;
if self.CheckBox1.Checked then
begin
sql:=sql+'class=:s1 and ';
i1:=1;
end;
if self.CheckBox2.Checked then
begin
sql:=sql+'studentname=:s2 and ';
i2:=1;
end;
if self.CheckBox3.Checked then
begin
sql:=sql+'score=:s3';
i3:=1;
end;
if (i1=0) and (i2=0) and (i3=0) then
begin
MessageBox(application.Handle,'请选择查询条件','信息',MB_OK or MB_ICONINFORMATION);
Exit;
end;
i:=Length(sql);
s:=Copy(sql,i-4,5);
if s=' and ' then
sql:=Copy(sql,1,i-5);
if i1=1 then
self.ADOQuery1.Parameters.ParamByName('s1').Value:=self.Edit1.Text;
if i2=1 then
self.ADOQuery1.Parameters.ParamByName('s2').Value:=self.Edit2.Text;
if i3=1 then
self.ADOQuery1.Parameters.ParamByName('s3').Value:=self.Edit3.Text;
self.ADOQuery1.Open;
//self.Label1.Caption:=sql;
end;
var
s1,s2,s3: string;
begin
s1:= '';
s2:= '';
s3:='';
ADOQuery1.Close;
ADOQuery1.Clear;
ADOQuery1.Sql.Add('Select * From Student Where (1=1)');
if CheckBox1.Checked then
s1 := 'and class = '+classedit1.text;
if CheckBox2.Checked then
s2 := ' and studentname like '+#39+studentname.text+#39;
if CheckBox2.Checked then
s3 := ' and score >= '+score.text;
ADOQuery1.sql.add(s1+s2+s3);
ADOQuery1.Open;
end;
技巧先将Where条件写成1=1 然后根据是否选中 加and就行了