当前位置:主页>销售管理软件> 列表

200分求助,请问数据库多重查询问题(多个条件过滤) 找有什么财务软件

仓库管理软件版1楼: 使用ADOQuery+Access
在运行过程中实现如下的查询:通过编辑框和下拉列表框选择查询条件。
例如有:名称,批次,年份,厂家四个字段,对应4个编辑框,在其中输入值将符合条件的记录查询出来,希望模糊匹配,采取Like %的方式。
现有如下问题:1、在其中一个Change事件中写的时候,另外几个编辑框有可能是空的,结果会出现 批次 Like ''%%''的情况,结果提示出错,参数不对。
2、在编辑框中输入字符时,假如输入了123,要把包含123的挑选出来(记录量减少),但是我要是退格变成了12,要把包含12的挑选出来(记录量重新增多),如果在退格编成了空字符,就要去掉本次的过滤(记录量再增多)
总之就是在一个编辑框输入字符过滤的时候要在其他几个已经过滤的记录集的基础上!

谢谢大家啦!

2楼: 1、几个编辑框有可能是空要判断一下
2、用SQL实现 and ... 如用友财务软件免费版

3楼: 1、在Like %之前,加上 if 名称<>'''' then ... ,其它类似;
2、使用SQL语句是可以实现的啊。

4楼: 用ADOQUERY控件的locate(忘了是什么函数了)很方便的。


记得在下拉选择的数据库字段上建立索引应该会大大提高查询速度的。

5楼: 在表里面加个ID(如自动编号)
strsql :string;
strsql :=’ select * from table where ID>0 ‘
判断编辑框是否有输入。
if NameEdit.Text<>'''' then
strsql:= strsql+''and Name = like %%''
.........
一个一个条件判断,再加上去。如果都是空,就是得到全都记录

6楼: 所有Edit.OnChange对应于同一个函数代码,内容为:
var swhere,sql:String;
begin
swhere:='''';
if Edit1.text<>'''' then swhere:= swhere+'' and Name like ''''%''+Edit1.text+''%'''''';
if edit2.text<>'''' then .....;
if sWhere<>'''' then
begin
system.delete(swhere,1,4); //去掉第一个and
sql:=''Select * from Table Where ''+sWhere;
end
else sql:=''Select * from Table '';
qry1.close;
qry1.sql.text:=sql;
qry1.open;
//只是编写了一下思路,相信你能看明白,

end;

仓库管理软件版7楼: 如果想速度加快的话,可以在打开界面的时候查询出来所有记录,然后在每一个edit.OnChange中调用同一个函数,函数里面通过设置 qry1.Filter和qry1.filtered应当也可以实现起来的。

8楼: znxia:如果在OnChange()事件中写if Edit1.text<>'''' then swhere:= swhere+'' and Name like ''''%''+Edit1.text+''%'''''';这样的代码,那岂不是Edit中字符每改变一次swhere都要加上这么一段一次?比如输入1,swhere='' and Name like ''''%''+Edit1.text+''%'''',如果再输入2,swhere='' and Name like ''''%''+Edit1.text+''%''and Name like ''''%''+Edit1.text+''%'''';了
而且if sWhere=''''时,sql:=''Select * from Table ''这么写就是全部的数据了,应该是去处本次的查询才对!

9楼: 建议楼主设置一个button键,当button键被按下时,再执行查询过程.也就是说,把组合查询的条件全部设置好后,点击button键再执行查询过程.
以前做过组合查询的例子,我就是这么实现的,希望可以供你参考!!

10楼: procedure onbuttonclick:
sql:string;
begin
^^^…………//在此,把查询语句拼凑起来就可以了;
end;

11楼: 你如果对面向对象的变成熟悉的话可以这么做,把每个条件都看作一个对象,分别由字段名,操作符(=,<,>,<=,>=,like),查询值组成。在生成条件的时候要分清是数值型还是字符型(可以从当前的数据集中取出)。这样每个条件都是独立的,操作起来特别方便,但在查询或者是过滤的时候却的一联合起来起作用。一点提示,这是一个可以通用的查询,你可以试着去做做

12楼: lisalee:设置一个Button是很容易实现的,但是那样只是静态。现在要求的是动态。 如有什么财务软件

13楼: 分开来看combo可以用change,edit可以用判断其他所有编辑框有否被点击,或判断tab。因为每次发生这种事件,总表示在另外一个编辑框已完成输入。比如我输入edit1后将会点击edit2,或者按tab,所以用edit2就可以判断edit1已经完成。就判断目前所有编辑框有没有输入,有输入的就作为条件查询一次。select * from table1 where 。。。。。。。。。。。。

仓库管理软件版14楼: pjwork:即使我在edit2输入时edit1已经完成,但是我在EDIT1中的内容有可能为空(先输入了内容但是又退格了),如果还要判断每个edit是否为空,那就出现多个组合的情况了,太繁琐。

15楼: 发到你邮箱了

16楼: 多人接受答案了。