5个下拉菜单~~
实现动态多条件查询统计功能高手指点 谢谢
实现动态多条件查询统计功能高手指点 谢谢
解决方案 »
- AlphaBlend问题求教
- 如何使用原生类ADO中的STREAM对象进行BLOB字段的读写.
- 诚聘高手加盟,高级软件工程师基本月薪4500~7000+绩效奖金,软件工程师和测试工程师基本月薪3000~4500+绩效奖金
- 请大家帮我看看这句代码哪有问题,跟帖者有分!!
- 疑问
- 在窗口定义了一个popupmenu,但是。。。。。。
- 如何判断文本框只能输入0到9之间的数字?
- 关注过《有黑龙江的兄弟吗?进来认识一下!》帖子的兄弟进来领分!
- 如何得到浏览网络对话框,取得其中网络计算机名称.而不浏览网络文件夹!
- DatetTimePicker控件,当DateMode=dmUpDown时,运行时,手动输入时,会出错
- Grid之间的滚动轴拖动事件响应
- 有关DELPHI调用VC DLL 的问题!
5个下拉菜单是用来干吗的?
是条件呢还是描述性的要求,比如按月,按排名等等
如果是条件好办一些,但是这些条件间是 AND 还是 OR 有些是否需模糊查询等等。
描述性的就要按你自己的定义来考虑了。先看看相关SQL语句的基础,这样遇到问题也知道如何描述了。
已经在每个combobox里面添加了若干item
这每个combobox的内容 是 一张表5个的字段的所有取值,每个combobox表示一个字段
那么 我需要统计 任意选择几个条件 然后就可以动态的查询我需要统计的内容难点是动态生成where子句~~另外 select count(*)计算得出的值 如何传递给delphi中定义的变量,用什么方法呢?
Num作为字段名
我要传递给delphi环境里面的变量~~
var aaa:integer;
然后 将select count(*) from T1计算的总数传递给aaa
var
strConn: String;
begin
Result := False;
strConn := ' AND ';
strWhere := '';
// 条件字段1
if CheckBox1.Checked then begin
if ComboBox1.ItemIndex < 0 then Exit;
strWhere := strWhere + strConn + ' Field1 = ' + ComboBox1.Items[ComboBox1.ItemIndex];
// 如果field1是字符型,这样写:
//strWhere := strWhere + strConn + ' Field1 = ' + QuotedStr(ComboBox1.Items[ComboBox1.ItemIndex]);
end;
// 条件字段2
if CheckBox2.Checked then begin
if ComboBox2.ItemIndex < 0 then Exit;
strWhere := strWhere + strConn + ' Field2 = ' + ComboBox2.Items[ComboBox2.ItemIndex];
end;
....
// 条件字段n
if CheckBoxn.Checked then begin
if ComboBoxn.ItemIndex < 0 then Exit;
strWhere := strWhere + strConn + ' Fieldn = ' + ComboBoxn.Items[ComboBoxn.ItemIndex];
end;
Result := True;
end;函数返回值为False 时,表示有个复选框选中了但对应的下拉框却没有选择一个值。你也可以根据需要在此时弹出对话框提示用户输入,或者修改上面的代码直接忽略这个条件。
得到的 where 语句可以直接拼在SQL语句后面。如果原来没有使用条件,可以添加一个
var strWhere: String;
begin
if GetQueryCondition(strWhere) = False then Exit;
with Query1 do begin
Sql.Text := 'select ... from ... where 1=1 ' + strWhere;
Open ;
end;
...
end;
Case ComboBox2.ItemIndex of
0:begin
Case ComboBox3.intemIndex of
0:begin
end;
end;
Sql:='select '+str+' from '+str1+'where '+.....(+' like "%'+)
给你个例子自己看看吧:
var
STR:STRING;
arrstr:array[1..6] of string;
I:INTEGER;
begin
if Trim(Combox1.Text)<>'' then
arrstr[1]:='('''+Trim(Combox1.Text)+'''=值)';//值可以为你设置为动态的,例如一个COMBOX
if Trim(Combox2.Text)<>'' then
arrstr[2]:='('''+Trim(Combox2.Text)+'''=值)';//值可以为你设置为动态的,例如一个COMBOX
if Trim(Combox3.Text)<>'' then
arrstr[3]:='('''+Trim(Combox3.Text)+'''=值)';//值可以为你设置为动态的,例如一个COMBOX
if Trim(Combox4.Text)<>'' then
arrstr[4]:='('''+Trim(Combox4.Text)+'''=值)';//值可以为你设置为动态的,例如一个COMBOX
if Trim(Combox5.Text)<>'' then
arrstr[5]:='('''+Trim(Combox5.Text)+'''=值)';//值可以为你设置为动态的,例如一个COMBOX
arrstr[6]:='';
for i:=1 to 5 do
begin
if arrstr[i]<>'' then
ARRSTR[6]:=ARRSTR[6]+ARRSTR[I];IF tRIM(ARRSTR[6])<>'' then
STR:=‘SELECT * FROM table where ’+arrstr
else str='select * from Table'
with query do begin
Close;
SQL.Clear;
SQL.Text:=str;
Open;
end;
end;
结贴
呵呵
var
s:integer;
begin
With query do begin
Close;
SQL.Clear;
SQL.Text:='select count(*) as Num from Table'
Open;
s:=FieldByName('Num').Value;
Close;
end;
end;
IF tRIM(ARRSTR[6])<>'' then
STR:=‘SELECT * FROM table where ’+arrstr//不小心写错了,应该为arrstr[6]
动态生成SQL语句 我昨天自己想办法解决了~~
以后可以对付随便多少的条件 呵呵早上过来看帖子 和 yjs_lh(长风浪子) ( ) 信誉:100 的方法差不多
我很感激大家的帮助地主 你的意思 我现在也明白了 呵呵 谢谢!!
我第一次开发winform的程序 如果 今天完工 我就发给大家看看
呵呵