| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1401 人关注过本帖
标题:[求助]请问为什么我按时间查询的结果和实际的不符合啊
只看楼主 加入收藏
伶伶320
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-7-26
收藏
得分:0 

先谢谢各位啦!不过我真是很郁闷了,我先把我的完整代码给大家看下吧
cx=0

*按货物查询
do case
SELECT fahuo
case thisform.check1.value=1

Thisform.Grid1.RecordSource="SELECT * FROM fahuo;
WHERE 货物=ALLTRIM(thisform.combo1.displayvalue);
Into Table C:\临时表"
Thisform.Refresh

ENDCASE

*按经销商查询
do case
case thisform.check3.value=1
ctext=alltrim(thisform.text1.value)
if empty(ctext)
messagebox('请输入查询条件!',48,'操作失败!')
thisform.text1.setfocus
else
Thisform.Grid1.RecordSource="SELECT * FROM fahuo;
WHERE 经销商=ALLTRIM(Thisform.Text1.value);
Into Table C:\临时表"
ENDif
endcase
*按经销商,时间和货物查询
SELECT fahuo
do case
case thisform.check1.value=1 and thisform.check2.value=1 and thisform.check3.value=1

ctext=alltrim(thisform.text1.value)
sdate=thisform.text2.value
edate=thisform.text3.value
ctext=alltrim(thisform.text1.value)
if empty(ctext)
messagebox('请输入查询条件!',48,'操作失败!')
thisform.text1.setfocus
else

if empty(sdate)
messagebox('请输入起始时间!',48,'操作失败!')
thisform.text2.setfocus
else
if empty(edate)
messagebox('请输入结束时间!',48,'操作失败!')
thisform.text3.setfocus
else

thisform.grid1.recordsource="select *from wuyemanage!fahuo;
where between(时间,sdate,edate) and 货物=ALLTRIM(thisform.combo1.displayvalue) and 经销商=ALLTRIM(Thisform.Text1.value);
order by fahuo.时间;
Into Table C:\临时表"
Thisform.Refresh
ENDIF
ENDIF
ENDIF
*按货物和经销商查询
case thisform.check1.value=1 and thisform.check3.value=1
ctext=alltrim(thisform.text1.value)
if empty(ctext)
messagebox('请输入查询条件!',48,'操作失败!')
thisform.text1.setfocus
else
thisform.grid1.recordsource="select *from wuyemanage!fahuo;
where 经销商=ALLTRIM(Thisform.Text1.value) and 货物=ALLTRIM(thisform.combo1.displayvalue);
order by fahuo.时间;
Into Table C:\临时表"
Thisform.Refresh
go top
if eof()
go bottom
messagebox('无此记录!',48,'信息窗口')
cx=1
endif
ENDIF
*按货物和时间查询
case thisform.check1.value=1 and thisform.check2.value=1

sdate=thisform.text2.value
edate=thisform.text3.value

if empty(sdate)
messagebox('请输入起始时间!',48,'操作失败!')
thisform.text2.setfocus
else
if empty(edate)
messagebox('请输入结束时间!',48,'操作失败!')
thisform.text3.setfocus
else

thisform.grid1.recordsource="select *from wuyemanage!fahuo;
where between(时间,sdate,edate) and 货物=ALLTRIM(thisform.combo1.displayvalue);
order by fahuo.时间;
Into Table C:\临时表"
Thisform.Refresh
ENDIF
ENDIF
*按经销商和日期查询
case thisform.check3.value=1 and thisform.check2.value=1
sdate=thisform.text2.value
edate=thisform.text3.value
ctext=alltrim(thisform.text1.value)
if empty(sdate)
messagebox('请输入起始时间!',48,'操作失败!')
thisform.text2.setfocus
else
if empty(edate)
messagebox('请输入结束时间!',48,'操作失败!')
thisform.text3.setfocus
else
if empty(ctext)
messagebox('请输入查询条件!',48,'操作失败!')
thisform.text1.setfocus
else
Thisform.Grid1.RecordSource="SELECT * FROM fahuo;
WHERE 经销商=ALLTRIM(Thisform.Text1.value) and between(时间,sdate,edate);
Into Table C:\临时表"
ENDif
endif
endif
*按日期查询
case thisform.check2.value=1
sdate=thisform.text2.value
edate=thisform.text3.value
if empty(sdate)
messagebox('请输入起始时间!',48,'操作失败!')
thisform.text2.setfocus
else
if empty(edate)
messagebox('请输入结束时间!',48,'操作失败!')
thisform.text3.setfocus
else
SET FILTER TO BETWEEN(时间,SDATE,EDATE)

go top
if eof()
go bottom
messagebox('无此记录!',48,'信息窗口')
cx=1
endif

endif
endif
case thisform.check1.value=0 and thisform.check2.value=0 and thisform.check3.value=0
messagebox('请选择查询条件!',48,'操作失败!')
thisform.check1.setfocus
endcase

我发现只要我把时间这个字段改成日期型的,我仅按时间查询时就没的任何反应,但是如果是按货物和时间查询显示的结果又是对的,到底怎么办呀,我现在搞的一头雾水的!

2006-08-14 09:59
伶伶320
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-7-26
收藏
得分:0 
呀呵呵,不好意思啊,我找出我的问题啦,呵呵,现在查询的结果都没的问题了,呵呵,谢谢大家啊.万分感谢!~
2006-08-14 10:12
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 

text控件改成日期格式最简单的办法是:

右击控件,选择builder菜单,在format页中更改data type为date。
—>
楼上的还是是最简单的,最简单的办法是把控件的默认值设置为Date(),在表单设计时在属性窗口搞定。
—>
你的也不是最简单的,其实设成日期型,直接将期VALUE={}就可以了
******************
收获颇丰啊!!


两人行已有我师……
2006-08-14 10:32
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 

你这个程序是一个比较复杂的查询问题,可能只按一种方式查询,也可能有两个条件,更有三个条件的情况。因此,首先必须弄清楚你的逻辑关系。你的程序修改如下,看看是不是比较清楚。

(1)在FORM1.INIT()里定义全局变量
PUBLIC cExprL,cHw,SDATE,EDATE,cJxs

(2)在"查询"命令按钮的CLICK()里写上
cExprL=".T."
cHw=ALLTRIM(THISFORM.COMBO1.DISPLAYVALUE)
sdate=MIN(thisform.text2.value,thisform.text3.value)
edate=MAX(thisform.text2.value,thisform.text3.value)
cJxs=ALLTRIM(Thisform.Text1.value)
IF thisform.check1.value=1 .AND.!EMPTY(cHw) &&按货物查询
cExprL=cExprL+".AND.货物='"+cHw+"'"
ENDCASE
IF thisform.check2.value=1 AND !empty(SDATE) AND !empty(EDATE) &&按时间查询
cExprL=cExprL+".AND.时间>=CTOD('"+DTOC(SDATE)+"').AND.时间<=CTOD('"+DTOC(SDATE)+"')"
ENDIF
IF THISFORM.CHECK3.VALUE=1 AND !empty(cJxs) &&按经销商查询
cExprL=cExprL+".AND.经销商='"+cJxs+"'"
ENDIF
SELECT fahuo
IF THISFORM.CHECK1.VALUE=1 OR THISFORM.CHECK2.VALUE=1 OR THISFORM.CHECK3.VALUE=1
SET FILTER TO &cExprL
GO TOP
ELSE
SET FILTER TO
GO TOP
ENDIF
THISFORM.REFRESH


感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-08-14 10:35
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 
SELECT fahuo
IF THISFORM.CHECK1.VALUE=1 OR THISFORM.CHECK2.VALUE=1 OR THISFORM.CHECK3.VALUE=1
SET FILTER TO &cExprL
GO TOP
ELSE
SET FILTER TO
GO TOP
ENDIF
THISFORM.REFRESH

红色部分删除也无妨

感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-08-14 10:44
快速回复:[求助]请问为什么我按时间查询的结果和实际的不符合啊
数据加载中...
 
   



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

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