| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1715 人关注过本帖
标题:组合查询
只看楼主 加入收藏
ghelycao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2018-3-29
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:9 
组合查询

图片附件: 游客没有浏览图片的权限,请 登录注册


各位大神,在附件的表中,当在A,B,C中任意输入数据后点查询,查询满足A值在A下限和A上限之间、B在B上限和B下限之间、C在C下限和上限之间。且A,B,C可以为空值。请问代码如何写啊。
搜索更多相关主题的帖子: 组合 查询 数据 为空 代码 
2018-04-19 20:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9848
专家分:27241
注 册:2012-2-5
收藏
得分:5 
不太明白,举例说明

坚守VFP最后的阵地
2018-04-19 21:42
ghelycao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2018-3-29
收藏
得分:0 
比如在A中输入一个值,如果这个值在表中A的下限和A的上限范围内,则输出满足条件的记录,同理B,C一样。且A,B,C是并的关系,不是或的关系。但是如果B或C中为空值时,则忽略B,C的条件限制。
2018-04-19 21:56
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:5 
select * from 你表 ;
where between(a值,a下限,a上限) or between(b值,b下限,b上限) or between(c值,c下限,c上限)
2018-04-19 23:32
ghelycao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2018-3-29
收藏
得分:0 
回复 4楼 mywisdom88
A,B,C中其中一个或多个为空时,则该空值不作为查询条件。如果采用or的话,则查询结果不同
2018-04-24 21:06
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用ghelycao在2018-4-24 21:06:59的发言:

A,B,C中其中一个或多个为空时,则该空值不作为查询条件。如果采用or的话,则查询结果不同
* 分别给这3个值,观看查询语句
a值 ="a"
b值 ="a"
c值 ="a"
cWhere = ""
if !empty(a值)
   cWhere = "between(a值,a下限,a上限)"
endif
if !empty(b值)
   cWhere = iif(empty(cWhere),"between(b值,b下限,b上限)", cWhere + " and between(b值,b下限,b上限)")
endif
if !empty(c值)
   cWhere = iif(empty(cWhere),"between(c值,c下限,c上限)", cWhere + " and between(c值,c下限,c上限)")
endif
if !empty(cWhere)
   cWhere = " where " + cWhere
endif

TEXT TO cStr TEXTMERGE NOSHOW PRETEXT 4
SELECT * FROM 你表 <<cWhere>>
ENDTEXT

MESSAGEBOX(cStr) && 观看查询语句

 * EXECSCRIPT(cStr) &&用他来执行查询
2018-04-24 23:24
ghelycao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2018-3-29
收藏
得分:0 
回复 6楼 mywisdom88
非常感谢版主的答复,如何将查询结果输出到一个临时表中(VFP9),我试了一下,结果不对。仅仅最后的代码做了修改。代码如下:
cWhere = ""
if !empty(a值)
   cWhere = "between(a值,a下限,a上限)"
endif
if !empty(b值)
   cWhere = iif(empty(cWhere),"between(b值,b下限,b上限)", cWhere + " and between(b值,b下限,b上限)")
endif
if !empty(c值)
   cWhere = iif(empty(cWhere),"between(c值,c下限,c上限)", cWhere + " and between(c值,c下限,c上限)")
endif
if !empty(cWhere)
   cWhere = " where " + cWhere
endif

SELECT * FROM 表名 cWhere into cursor 临时表
thisform.grid1.recordsource="临时表"


2018-05-02 20:40
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
以下是引用ghelycao在2018-5-2 20:40:38的发言:

非常感谢版主的答复,如何将查询结果输出到一个临时表中(VFP9),我试了一下,结果不对。仅仅最后的代码做了修改。代码如下:
cWhere = ""
if !empty(a值)
   cWhere = "between(a值,a下限,a上限)"
endif
if !empty(b值)
   cWhere = iif(empty(cWhere),"between(b值,b下限,b上限)", cWhere + " and between(b值,b下限,b上限)")
endif
if !empty(c值)
   cWhere = iif(empty(cWhere),"between(c值,c下限,c上限)", cWhere + " and between(c值,c下限,c上限)")
endif
if !empty(cWhere)
   cWhere = " where " + cWhere
endif

SELECT * FROM 表名 cWhere into cursor 临时表
thisform.grid1.recordsource="临时表"

* 你什么都可以改,最后这里,不能改,一定要这样

TEXT TO cStr TEXTMERGE NOSHOW PRETEXT 4
 SELECT * FROM 你表 <<cWhere>> into cursor 临时表
ENDTEXT

EXECSCRIPT(cStr) &&用他来执行查询
thisform.grid1.recordsource="临时表"
2018-05-03 08:40
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:0 
TEXT TO cStr TEXTMERGE NOSHOW PRETEXT 4
  SELECT * FROM 你表 <<cWhere>> into cursor 临时表
ENDTEXT
重点在这里 <<  >>,他会把 cWhere 的值自动转换,好像宏的效果,但比宏好用.如 cWhere = " where between(c值,c下限,c上限)"
经过<< >>转换后,上面的语句就变成
cStr = "SELECT * FROM 你表 where between(c值,c下限,c上限) into cursor 临时表"
如 cWhere = "",那么,查询就变成
cStr = "SELECT * FROM 你表  into cursor 临时表"
如 cWhere = "where between(a值,a下限,a上限) and between(c值,c下限,c上限)",那么,查询就变成
cStr = "SELECT * FROM 你表 where between(a值,a下限,a上限) and between(c值,c下限,c上限) into cursor 临时表"

MESSAGEBOX(cStr) && 观看查询语句,就是为了观察,动态语句是否是我们要的....
EXECSCRIPT(cStr) &&用他来执行查询 ,或者用 &cStr

<< >> 好像只能在 Text to ...  EndText 中使用,


[此贴子已经被作者于2018-5-3 08:54编辑过]

2018-05-03 08:52
ghelycao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2018-3-29
收藏
得分:0 
回复 9楼 mywisdom88
已解决,谢谢版主的详细讲解,非常感谢!通过版主的讲解,我觉得以后各类查询都不是问题了,
2018-05-05 11:25
快速回复:组合查询
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.186036 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved