用当前的日期于数据库中的值进行比较。
curdate 当前日期
datevalue 数据库值
curdate > datevalue  已到期
curdate <= datevalue 未到期
当curdate = datevalue 时不能进行正确的比较。
例如:
var
  curdate ,datevalue : TDateTime;
  s : string;
begin
  curdate := new ;
  datevalue ;= query.Fields.Fields[1].AsDatetime;
  if curdate > datevalue then s := '已到期';
  if curdate <= datevalue then s:= '未到期';
  现在的问题是当 不能正确的比较两个日期相等。请大家帮我看看。
end;

解决方案 »

  1.   

    什么数据库?
    数据库里日期字段什么类型?
    比较是否要精确到hh:mm:ss?
      

  2.   

    真的不行吗?不是吧。。
    那你试试换成string类型比较
    datetimetostr()
      

  3.   

    if trunc(curdate)=trunc(datevalue) then
      

  4.   

    如果都是TDateTime类型的,应该没问题吧。。
      

  5.   

    TDateTime实际是double类型的,而浮点数是不能做相等比较的
    因为即使你输入两个一样的数,存储计算后也会有差异。
    对浮点数
    if curdate <= datevalue then //不行if (curdate - datevalue) < 1/(24*3600);//可以
      

  6.   

    转成字符串之后。更是奇怪。我是直接AsDateTime的。
    就是不能正确的进行相等的比较。
    大家可以试试这个例子;
    var
      s1 ,s2 : TDateTime;
    begin
      s1:= now;
      s2:= now ;
      if s1 = s2 then
        showmessage('s1 = s2')
      else
        showmessage('not');如果直接运行是没有错的。会运行到第一个showmessage;
    但是进行断点调试就会运行第二个showmessage;
      

  7.   

    还是转换成字符串以后进行比较吧,用FORMATDATETIME比较好,先把日期格式进行统一,然后比较就可以了。
      

  8.   

    你不要用now!!!!!!!!!!
    用别的试试
      

  9.   

    var
      s1 ,s2 : TDateTime;
    begin
      s1:= now;
      s2:= now ;
      if s1 = s2 then
        showmessage('s1 = s2')
      else
        showmessage('not');
    进行断点调试就会运行第二个showmessage,这时now可能已经变了,所以s1和s2不一样了
      

  10.   

    转换日期固然是一种方法,
    你看看这个行不行
    curdate <= datevalue and curdate >= datevalue
      

  11.   

    呵呵,你进行断点调试时间肯定有延迟了,NOW取的是当前时间,两个时间当然就不会相同啦!呵呵,你看看你取到的时间再说吧!
      

  12.   

    to ;htyx(轻风夜私语)
    我按你的方法试了一下,还是不行的。
      

  13.   

    var
      s1 ,s2 : TDateTime;
      st : string;
    begin // s1:= StrToDateTime('2004-8-9'); 如果用这个语句就没有问题
      st := datetimetostr(now);
      s1:= strtodatetime(st);  如果用这个语句还是会执行showmessage('s1 > s2') ;
      s2:= StrToDateTime('2004-8-9');  if s1 = s2 then
        showmessage('s1 = s2') ;
      if s1 > s2 then
        showmessage('s1 > s2') ;  if s1 < s2 then
        showmessage('s1 < s2') ;大家一定要帮我啊。必须要与当前的日期进行比较。
      

  14.   

    如果把当前的日期取出后,变成一个不可改变的值呢。比如const
      

  15.   

    你用的是什么数据库?
    我跟你说一说sql sever 2000在这方面的解决方法(我把他们当成字符来处理):
      由于在Datetime的数据类型中,它除了日期外还有时间,在一般情况下,我们认为只要是日期相等就算这两个时间相等.但是由于datetime中含有时间,我们可以通过下面的方式处理:
     
    假设我们的日期是2004.08.09,要找到与这个日期相关的数据来
    =:
    Select *
    From Table
    WHere datevalue between '2004-08-09 00:00:00' and '2004-08-09 23:59:59'
    >:
    Select *
    From Table
    WHere datevalue>'2004-08-09 23:59:59'
    <:
    Select *
    From Table
    WHere datevalue<'2004-08-09 00:00:00'
      

  16.   

    问题解决了。
    方法是:
    取出now的值DateToStr;
    取出数据库中的值:asstring;
    然后比较就ok了。
    这一点只进行相等这一条件比较。