组合查询(200分)

  • 主题发起人 主题发起人 unixhost
  • 开始时间 开始时间
U

unixhost

Unregistered / Unconfirmed
GUEST, unregistred user!
我是在“DELPHI 5.0程序设计-数据库应用实务篇”一书中看到一个通用查询应用程序。我觉得不错,但好象不很完整。注释也少。

在一个FORM上有三个COMBOBOX控件,分别代表关键字、运算符、条件值
如:工龄>6,
另外还有几个按钮实现AND、OR、NOT、(、)、‘删除一行条件’、‘增加一行条件’,可以将上面的条件组合,最后查询条件显示在LISTBOX中,一行一个条件。
然后查询,是用的DBGIRD及QUERY控件。
哪位能写出个例子给我
unixhost@163.net
 
我也有你说的那本书,让我看看先
 
你所说的方式我用联诠SuperQuery 就可以做到,而且不用几行程序代码,也可将查询的条件存成文字文件。
 
请问Motar Liu,那里有SuperQuery控件
 
你们可上此网看看http://www.landing.com.tw/
 
嘿嘿,也在做这个啊....
 
挺来劲的,我刚做完不久.我一点点编出来的.
关键就是组合出最后的查询条件.

我不是查询数据库,是查文本.
最后的感想是应该使用正则表达式;
又碰巧研究PERL语言,发现这些都有人做得很好了.
唉,看来应该学陶潜和孔明的不求甚解,知其大略?? 不然总是没有大局观.
 
单项组合查询、多项组合查询。要哪个?

发个例子给你吧!
 
to 黄耀彰:
我倒自己做过一个,但好象效率不高(我是用if语句组合),所以我倒想看看多项
组合的例子。。给我发一个吧。<a href=mailto:mynameisbb@sina.com>mynameisbb@sina.com</a>
 
都要
unixhost@163.net
 
小生这里有一段不太相干的代码,或许会有点用处


procedure Tf_query.query_btokClick(Sender: TObject);
var
sql_select,date1,date2:string;
and_flag:integer;
begin
sql_select:='select * from data';
and_flag:=0;
if (combobox1.ItemIndex>0)
or (combobox2.ItemIndex>0)
or (combobox3.ItemIndex>0)
or (combobox4.ItemIndex>0)
or (combobox5.ItemIndex>0)
or (combobox6.ItemIndex>0)
or (combobox7.ItemIndex>0)
or (combobox8.ItemIndex>0)
or (combobox9.ItemIndex>0)
then begin//判断是否有条件被选中*开始
sql_select:='select * from data where';
case f_query.ComboBox1.ItemIndex of
1: begin
sql_select:=sql_select+' Advertiser like '+'''%'+query_edadv.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox2.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Hosting_site like '+'''%'+query_edhostsite.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Hosting_site like '+'''%'+query_edhostsite.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox3.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Product_category like '+'''%'+query_cbproductcate.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Product_category like '+'''%'+query_cbproductcate.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox4.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Product_type like '+'''%'+query_edproducttype.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Product_type like '+'''%'+query_edproducttype.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox5.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Brand like '+'''%'+query_edbrand.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Brand like '+'''%'+query_edbrand.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox6.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Model like '+'''%'+query_edmodel.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Model like '+'''%'+query_edmodel.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox7.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Area like '+'''%'+query_edarea.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Area like '+'''%'+query_edarea.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox8.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Country like '+'''%'+query_edcountry.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Country like '+'''%'+query_edcountry.Text+'%''';
and_flag:=and_flag+1;
end;
end;
case f_query.ComboBox9.ItemIndex of
1: begin
if and_flag>0 then sql_select:=sql_select+' and';
sql_select:=sql_select+' Ad_type like '+'''%'+query_edadtype.Text+'%''';
and_flag:=and_flag+1;
end;
2: begin
if and_flag>0 then sql_select:=sql_select+' or';
sql_select:=sql_select+' Ad_type like '+'''%'+query_edadtype.Text+'%''';
and_flag:=and_flag+1;
end;
end;
end;//判断是否有条件被选中*结束
//showmessage(sql_select);
dm.Query1.close;
dm.Query1.sql.Clear;
dm.Query1.sql.Add(sql_select);
if f_query.ComboBox10.ItemIndex=1 then
begin
DatetimeToString(date1,'yyyy-mm-dd',query_dtpfirst1.Date);
DatetimeToString(date2,'yyyy-mm-dd',query_dtpfirst2.Date);
dm.Query1.Filtered:=true;
dm.Query1.Filter:='first_recording>'+date1+'and first_recording<'+date2;
end;
if f_query.ComboBox11.ItemIndex=1 then
begin
DatetimeToString(date1,'yyyy-mm-dd',query_dtplast1.Date);
DatetimeToString(date2,'yyyy-mm-dd',query_dtplast2.Date);
dm.Query1.Filtered:=true;
dm.Query1.Filter:='last_recording>'+date1+'and last_recording<'+date2;
end;
dm.Query1.open;
if not dm.Query1.Eof and dm.Query1.Active then
begin
dm.Query1.Last;
dm.Query1.First;
f_result.lb_total.Caption:='共'+inttostr(dm.Query1.RecordCount)+'条';
end;
f_result.show;
f_query.Close;
end;
 
to 黄耀彰大侠:
也给我发一个吧。philips01@sina.com
 
to 黄耀彰大侠:
请给我发一个,qyx@jd.cnpc.com.cn
 
to 黄耀彰大侠:

上面的地址不对,请再发一个吧。 philips01@wx88.net



 
to 黄耀彰大侠:
也给我发一个吧。lzliang@yeah.net

 
to 黄耀彰大侠:

我也需要扫盲,也给我发一个:
tigerlion007@263.net
谢谢!
 
to 黄耀彰大侠: 我也很想要
 
多人接受答案了。
 
后退
顶部