我在查询一个时间段时查到的结果老是少一天! ( 积分: 200 )

  • 主题发起人 主题发起人 delphi123456
  • 开始时间 开始时间
如你的数据库字段类型是datatime,它的数据是有时分秒的,而你的cxDateEdit2.Text是没有时分秒的吧
你的检索范围应该是
yyyy-mm-dd 00:00:00 到 yyyy-mm-dd 23:59:59
不然会楼掉最后一天
 
A时间<=B时间:
要不把时间部分去掉,例:2005-09-16 11:47:33 去掉后面的时间部分,因为相比的时间A如果比B晚的话就出不来了
要不就把B的时间部分写成:23:59:59, 如:B=2005-09-16,就把B时间写成:2005-09-16 23:59:59
 
我的myitem.CreationTime的值是yyyy-mm-dd 00:00:00的,cxDateEdit1.text的值是
yyyy-mm-dd类型的,我该怎么做呢?
 
function DateTimeToDate(ADate: TDateTime): TDateTime; //将带日期的时间转化成日期
var
Year, Month, Day: Word;
begin
DecodeDate(ADate, Year, Month, Day);
Result := StrToDate(IntToStr(Year) + '-' + IntToStr(Month) + '-' + IntToStr(Day));
end;

这样就把时间部分去掉了,我也碰到过
 
我用了不行啊系统提示说是性质相反的类型啊?
delphi中有没有能把cxDateEdit1.text 中的值加一天的函数啊?
 
StrtoDateTime(cxDateEdit1.text)+1
 
不太可能,我一直是这样用的,你把报错的弄出来看看

if (DateTimeToStr(DateTimePicker1.DateTime)) < (cxDateEdit1.text + ' 23:59:59') then
...
 
加一天会出问题的,可能查出来的数据会多于实际数据
 
加一天后可将<=改为<啊!
 
if (FormatDateTime('yyyy-mm-dd',myitem.CreationTime) >= cxDateEdit1.Text)
and(FormatDateTime('yyyy-mm-dd',myitem.CreationTime) <= cxDateEdit2.Text) then //这样行不行?????
 
把cxDateEdit2.Text的日期加一天,然后把'<='改成'<'就行了
 
第一个问题我已经用StrToDateTime()方法解决了,请大家看看第二个问题吧,怎么CheckBox2对应项就不起作用呢?
 
myitem.CreationTime <=cxDateEdit2.Text
如果cxDateEdit2.Text的值等于2005-9-16,那么2005-9-16这天的肯定是查不出来的。
因为2005-9-16 ??:??:??是不等于2005-9-16的。
除非你把2005-9-15的格式改成了2005-9-16 23:59:59 才行
if ((CheckBox1.Checked = true)and(CheckBox2.Checked = true)) then
条件是一起起作用的
 
ok,问题解决了,谢谢各位!!
 

Similar threads

后退
顶部