如何实现delphi多条件查询

我想问关于多条件查询的。我用Access建的数据库,有一个叫sudent的数据表,其中字段名为num(学号,文本类型),name(姓名,文本),sex(性别,文本),na... 我想问关于多条件查询的。

我用Access建的数据库,有一个叫sudent的数据表,其中字段名为num(学号,文本类型),name(姓名,文本),sex(性别,文本),nation(民族,文本),brithday(生日,日期/时间),classroom(班级,文本),date(入学时间,日期/时间),duty(职务,文本),,mianmao(政治面貌,文本)。

现在建一个窗体,分别用edit1,edit2,radiobutton1(男),radiobutton2(女),edit4,datetimepicker1,combobox1,datetimepicker2,combobox2,combobox3来实现对数据表中数据的查找。

要求 1.在对学号进行查询的时候,其它是不可以用的。2.性别是用两个单击按钮实现的
3.除学号外其它都可以组合查询,一项二项三项都可以4.实现对时间段的查询,如入学时间在2004-9至2005-9的学生,或者是和其它条件组合查询(这样就会再增datetimepicker3和4控件了)

用adoquery1,dbgrid,ADOConnection1,DataSource1连接数据库

有谁能帮帮我,麻烦了~!
展开
 我来答
yueyun889
推荐于2016-06-04 · TA获得超过725个赞
知道小有建树答主
回答量:539
采纳率:0%
帮助的人:770万
展开全部
根据你的条件,我做了一下:
edit1: 学号, edit2: 职务, edit3: 籍贯,edit4: 面貌.与你的条件有些出入的地方是:我添加了一个radiogroup控件来让用户选择,是按学号查询还是按其他类别查询.
当选择按学号查询时,其它按钮不可用;按其它查询,edit1不可用(这个你自己可以设置是否可用.)如果edit2等中有内容即被当作查询条件,如果为空则不作查询条件.
代码大致如下:
//控制按钮是否可用:
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
case radiogroup1.ItemIndex of
0:
begin
radiobutton1.Enabled := false;
radiobutton2.Enabled := false;
datetimepicker1.Enabled := false;
datetimepicker2.Enabled := false;
edit2.Enabled := false;
edit3.Enabled := false;
edit4.Enabled := false;
end;
1:
begin
edit1.Enabled := false;
radiobutton1.Enabled := true;
radiobutton2.Enabled := true;
datetimepicker1.Enabled := true;
datetimepicker2.Enabled := true;
edit2.Enabled := true;
edit3.Enabled := true;
edit4.Enabled := true;
end;
end;
查询按钮
procedure TForm1.Button1Click(Sender: TObject);
var
sql, v_sex : string;
begin
if radiogroup1.ItemIndex = 0 then//按学号查询
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from students where num =''' + trim(edit1.Text)+'''');
open;
end;
end
else
begin
sql := 'select * from students where ';
if trim(edit2.Text) <> '' then
sql := sql + 'duty = ' + Ansiquotedstr(edit2.Text, #39);
if trim(edit3.Text) <> '' then
begin
if trim(edit2.Text) = '' then
sql := sql + 'nation=' + Ansiquotedstr(edit3.Text, #39)
else
sql := sql + 'and nation= '+ Ansiquotedstr(edit3.Text, #39);
end;

if trim(edit4.Text) <> '' then
begin
if (trim(edit2.Text) = '') and (trim(edit3.Text) ='') then
sql := sql + 'mianmao = ' + Ansiquotedstr(edit4.Text, #39)
else if (trim(edit2.Text) <> '') or (trim(edit3.Text) <> '') then
sql := sql + 'and mianmao = ' + Ansiquotedstr(edit4.Text, #39);
end;

if radiobutton1.Checked then
begin
v_sex := radiobutton1.Caption;
if (trim(edit2.Text) = '') and (trim(edit3.Text) ='') and (trim(edit4.Text) = '') then
sql := sql + 'sex =' + Ansiquotedstr(radiobutton1.Caption, #39)
else if (trim(edit2.Text) <> '') or (trim(edit3.Text) <> '') or (trim(edit4.Text) <> '') then
sql := sql + 'and sex =' + Ansiquotedstr(radiobutton1.Caption, #39);
end;

if radiobutton2.Checked then
begin
v_sex := radiobutton2.Caption;
if (trim(edit2.Text) = '') and (trim(edit3.Text) ='') and (trim(edit4.Text) = '') then
sql := sql + 'sex =' + Ansiquotedstr(radiobutton2.Caption, #39)
else if (trim(edit2.Text) <> '') or (trim(edit3.Text) <> '') or (trim(edit4.Text) <> '') then
sql := sql + 'and sex =' + Ansiquotedstr(radiobutton2.Caption, #39);
end;

if (trim(edit2.Text) = '') and (trim(edit3.Text) = '' ) and (trim(edit4.Text) = '') and (v_sex = '') then//如果edit控件全为空,就显示所有记录,这里可以自己设置.
sql := 'select * from students';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Append(sql);
adoquery1.Open;
end;
这里我没有实现日期查询,因为还不知道..(很少使用ACCESS,惭愧..)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式