gdyuer 发表于 2007-6-8 09:42

[结贴了]关于查询时间不正确的问题

where a.djrq&gt;=:lth_date1 and a.djrq&lt;=:lth_date2<br><br>查询当天的数据查不出来,把查询条件的时间增加一天就能查出来,为什么?<br><br>比如一个登记日期是6号的记录,查询条件必须输入7号才能把这个记录查出来,输入6号就查不出来。<br><br>lth_date1、lth_date2是DATE型,a.djrq在ACCESS中设置的是日期/时间型(格式为长日期)<br><br>再就是在ACCESS里,长日期和短日期除了表现形式外(前者为1997-07-07,后者为1997/07/07)有什么不同?<br><br>在线急等
[align=right][color=#000066][此贴子已经被作者于2007-6-14 12:33:32编辑过][/color][/align]

黎明前的黑暗 发表于 2007-6-8 10:16

你的DJRQ内的数据是带着时间和秒数的,建议把变量换成DATETIME看看.

gdyuer 发表于 2007-6-8 11:18

<P>刚才出去了下<BR><BR>哈,你也在线呀,先谢你了<BR><BR>其实这个程序和数据源没改之前一直也能正确查询出当天的数据的,只是加了个字段后,才出了不少问题。<BR><BR>就说这个变量吧,以前我用的就是DATE,DJRQ内的数据以前也是带着时间和秒数,一直好用(能正确查询出数据来)。现在这两个都没动,代码也没动,不知为什么就不好用了。<BR><BR>现在我按照你说的改了下,执行时出现RETRIEVE ARGUMENT 1 DOES NOT MATCH EXPECTED TYPE 的错误提示。难道还要转换?</P>

黎明前的黑暗 发表于 2007-6-8 13:39

<P>单看这提示我也想不出什么办法了</P>

gdyuer 发表于 2007-6-8 15:37

string ls_data<BR>Select dj_dqlc Into :ls_data From clgl_dj where dj_clbm =dw_1.GetItemSTRING(row,"dj_clbm");<BR><BR>ST_1.TEXT=ls_data<BR><BR>为什么ST_1.TEXT总是显示空白?

fyh 发表于 2007-6-8 19:10

<P>string ls_data,ls_dtstart,ls_dtend<BR>ls_dtstart=string(lth_date1,'yyyy-mm-dd')  <BR>ls_dtend=string(lth_date2,'yyyy-mm-dd')<BR><BR>Select dj_dqlc Into :ls_data <BR>   From clgl_dj where Convert(varchar(10),djrq,121) between :ls_dtstart and :ls_dtend; //转换成字符查找<BR>//djrp为日期型字段<BR>//确定字段及表名已存在<BR>ST_1.TEXT=ls_data<BR><BR>  希望能帮你解忧!!![em01]</P>

gdyuer 发表于 2007-6-9 23:26

<P>回fyh:<BR>我问的是两个问题呀,你给捏到一块去了。<BR>我的第二个问题是<BR><BR>string ls_data<BR>Select dj_dqlc Into :ls_data From clgl_dj where dj_clbm =dw_1.GetItemSTRING(row,"dj_clbm");</P>
<P>ST_1.TEXT=ls_data<BR><BR>我想从当前dw_1窗口把当前行的dj_clbm中的内容作为检索的条件值,从clgl_dj表中找到相应的记录中指定的字段的值并保存到ls_data变量中去,但不知为什么总是空值。dj_clbm的值在clgl_dj表中唯一,没有重复的值。<BR></P>

Choose 发表于 2007-6-10 20:26

where语句的值正不正确,可用查下sqlca.sqlcode的值是否为0,建议用debug调试一下<BR>

gdyuer 发表于 2007-6-11 09:09

DEBUG调试没用过。[em03]<BR>也不知道怎么用

gdyuer 发表于 2007-6-11 09:24

where dj_clbm =dw_1.GetItemSTRING(row,"dj_clbm")<BR><BR>dw_1.GetItemSTRING(row,"dj_clbm")肯定有值,且在clgl_dj表中也肯定有唯一值。

千金散尽 发表于 2007-6-11 11:25

<P>string ls_data,ls_dtstart,ls_dtend<BR>ls_dtstart=string(lth_date1,'yyyy-mm-dd')  <BR>ls_dtend=string(lth_date2,'yyyy-mm-dd')</P>
<P>Select dj_dqlc Into :ls_data <BR>   From clgl_dj where string(data,format) between :ls_dtstart and :ls_dtend; //转换成字符查找<BR>//djrp为日期型字段<BR>//确定字段及表名已存在<BR>ST_1.TEXT=ls_data<BR>另外借助messagebox来查验判断错误<BR>你的第二个问题估计是数据不一致导致的</P>
<P>  </P>

gdyuer 发表于 2007-6-14 12:20

谢谢楼上的黎明前的黑暗、千金散尽、FYH了。今天突然就想通了。一开始对你们给的提示没在意,又看了看,才发现你们说的都很有道理。<br>因为ACCESS数据库里是"日期/时间"型,如“2006/06/11 11:20:37”的格式,但显示时,我设置了格式,只显示出2006/06/11.<br>设置的查询变量又是DATE型(非DATETIME型),就造成输入的内容比如“2006/06/11”,以此为条件检索时就变成了“2006/06/11 00:00:00”,总是小于当天的数据输入后保存的时间(除非你在2006/06/11 00:00:00这个时间保存了N笔数据),找到这个原因后,处理就简单了,要么象楼上的处理的那样,全部转换(这样好象麻烦些),要么就把后面的日期自动加1,就变成了2006/06/12 00:00:00,这样就能达到目的了。<br><br>语句如下:<br>date ls_start,ls_end<br><br>dw_1.RETRIEVE(date(em_1.text),RelativeDate(date(em_2.text),1))<br><br>相关SELECT语句为  SELECT *  FROM 表名 where djrq&gt;=:ls_start and djrq&lt;=:ls_end<br><br><br>如果写成过滤条件的话,如下:<br><br>dw_1.setfilter("djrq&gt;=date('"+em_1.text+"') and djrq&lt;=RelativeDate(date('"+em_2.text+"'),1)")<br>dw_1.filter()<br>dw_1.setfilter("")<br><br>不知我说的有没有不当之处,别见笑。之所以把这个贴子写得这么详细,是因为在网上搜索时发现许多相关的问题,有的有正确答案,但大部分没有。<br><br>就此结贴了。
[align=right][color=#000066][此贴子已经被作者于2007-6-14 12:32:44编辑过][/color][/align]


页: [1]

编程论坛