var
  v: Variant;
  d: TDateTime;
begin
  //无问题
  d:=strtodatetime('2001/12/31 02:53:39');
  v:=d;
  DBEdit1.Field.Value:=v;    (uuu)  //有问题
  d:=strtodatetime('0001/12/31 02:53:39');
  v:=d;
  DBEdit1.Field.Value:=v;    (xxx)end;DBEdit1是一个DateTime类型的字段,语句XXX异常

解决方案 »

  1.   

    好像日期的最小值时1900年吧?你搞个公元1年,难怪delphi会和你恼:)
      

  2.   

    d:=strtodatetime('0001/12/31 02:53:39');
      DBEdit1.Field.AsDateTime:=d;    
    或者    d:=strtodatetime('0001/12/31 02:53:39');
      v:=d;
      DBEdit1.Field.AsDateTime:=v;    //不是DBEdit1.Field.Value
      这样做是没问题的其实这应该是Variant类型转换的Bug日期1899年12月31日是0,以前的就是负数,delphi还是支持公元一年的
      

  3.   

    >>DBEdit1是一个DateTime类型的字段,语句XXX异常
    給出語句异常提示!!這樣比較好解決點!
      

  4.   

    抛出的异常是“Invalid Field Value of 'Hiredate'”
      

  5.   

    中国的日期格式:0001-12-31 02:53:39
    西方日期格式:12/31/0001 02:53:39
    请看一下Delphi帮助吧
      

  6.   

    //这一句没有错,我机器时间格式就是yyyy/mm/dd hh:nn:ss
       d:=strtodatetime('0001/12/31 02:53:39');
       //d是TDateTime型,实际就是Double型,赋值给V(Variant类型)
       v:=d;
       //再把v赋值给DBEdit1.Field.Value,弹出错误Invalid Field Value of 'Hiredate'
       DBEdit1.Field.Value:=v;
      

  7.   

    //这一句没有错,我机器时间格式就是yyyy/mm/dd hh:nn:ss
       d:=strtodatetime('0001/12/31 02:53:39');
       //d是TDateTime型,实际就是Double型,赋值给V(Variant)
       v:=d;
       //再把v赋值给DBEdit1.Field.Value,弹出错误Invalid Field Value of 'Hiredate'
       DBEdit1.Field.Value:=v;    
       
       //下面这样做是没问题的
       DBEdit1.Field.AsDateTime:=v;    //不是DBEdit1.Field.Value
      
      

  8.   

    动不动就说delphi有bug
    唉!!!!!!!!!!!!!!1
      

  9.   

    这个确实是Delphi的bug,是Variant值赋值给一个日期字段是的bug