组合查询!!!(200分)

  • 主题发起人 主题发起人 galahad
  • 开始时间 开始时间
G

galahad

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾好,小弟初学Delhpi不久,想作一个简单的设备管理系统,
其中查询功能想用组合查询,如下:
所属车间: 设备类型: 运行状况:
一号车间 水泵 正常
二号车间 车床 报废
三号车间 变压器 检修
四号车间 焊机
... ...

设备数据库中的记录包含以上三个字段,选择界面想用checklistbox,
如:在所属车间中选了: 一、二、四号车间;
在设备类型中选了: 水泵、焊机;
在运行状况中选了: 正常、检修
则在DBGrid中显示出一、二、四号车间所有运行正常或正在检修的
各种水泵和焊机。
快想破脑袋了,救救我吧!
 
1.用Filter或Filter事件
 
这不复杂呀!
SQL如下:
select * from yourtable
where (车间=1 or 车间=2 or 车间=4 )
and (设备类型="水泵" or 设备类型="水泵")
and (运行状况="正常" or 运行状况="检修")
 
//100% runable!!!
//设3个checklistbox, 分别是所属车间,设备类型,运行状况,
//设dbgrid1.datasource=datasource1.dateset=query1
//query1.active:=false;

var
i,j:integer;
s:string;
begin
s:='select * from table1 where (所属车间=''不存在''';
for i:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked then
s:=s+' or 所属车间='''+CheckListBox1.Items.Strings+'''';
s:=s+') and (设备类型=''不存在''';
for i:=0 to CheckListBox2.Items.Count-1 do
if CheckListBox2.Checked then
s:=s+' or 设备类型='''+CheckListBox2.Items.Strings+'''';
s:=s+') and (运行状况=''不存在''';
for i:=0 to CheckListBox3.Items.Count-1 do
if CheckListBox3.Checked then
s:=s+' or 运行状况='''+CheckListBox3.Items.Strings+'''';
s:=s+') order by 所属车间,设备类型,运行状况';
query1.sql.clear;
query1.sql.add(s);
query1.active:=true;
end;
 
  该问题可用Query作为数据源,其SQL大体如‘fx’所说,
但应采用动态形式:
select * from yourtable
where (车间=:no1 or 车间=:no2 or 车间=:no3 ... )
and (设备类型=:type1 or 设备类型=:type2 ...)
and (运行状况=:state1 or 运行状况=:state2 ...)
让后每次对其动态赋值如:
Query1.ParamByName['no1']:=1;
Query1.ParamByName['no2']:=0;
....
Query1.Open;
这样就可以实现你的要求了。参数的设定应与实际相适应。



 
可以这么做,每个类型对应一个checklistbox
这样,所属车间,设备类型,运行状况分别对应checklistbox1,checklistbox2,checklistbox3
关键还是sql语句的动态生成:
var s,s1,s2,s3...:string;
s:='select * from tablename where '

j:=0;
for i:=1 to checklistbox1.items.count do
begin
if checklistbox1.check
then s1:=s1+'车间='+checklistbox1.items[i-1]
j:=j+1;
if j<checklistbox1.selcount
then sqlstr:=sqlstr+' or '
end

...如上法生成 s2 ,s3...
最后 s1 的样子是 车间=2 or 车间=4
s2 设备类型="水泵" or 设备类型="车床"
s3 运行状况="正常" or 运行状况="检修"
...
s:=s+ s1+'and '+s2+' and '+s3
具体 引号 和 括号 注意了,(checklistbox 用多column应该也可以)
最后的效果就象 fx 的 sql语句
 
空的情况要考虑!我忘了,还是cytown老兄考虑的周详
 
答案接受了!!!
太感谢诸位大虾了,尤其是cytown,101% !!!

(不好意思,大富翁实在是太难上了,上了好几天终于在半夜上来了)
 
多人接受答案了。
 
后退
顶部