当你给日期赋个空值,SQL认为是1900年。
所以你在取值是判断一下,
if parambyname('ccrq').asFloat<1901 then 
   edit.text:='' else edit.text:=parambyname('ccrq').asstring;

解决方案 »

  1.   

    我也记不清了,试一试parambyname('ccrq').asstring:=nil
      

  2.   

    我写的是parambyname('ccrq').asdate:=null;
      

  3.   

    我用的是access,我在access中直接打开表,添加记录时,不给日期字段附值,则该字段就可以为空,为什么用sql 字段=null就不行了
      

  4.   

    报错Invalid variant type conversion
      

  5.   

    不能用参数对她赋null
    可以用语句
    adocmmand.sql.add ('update table1 set a = null')
      

  6.   

    我也试了很多方法,看来只能象firetoucher(蹈火者) 说的用Sql语句直接干了!!!!!delphi 6 的Bug吗?????我的试验结果:
    环境:d6,oracle8.1.6方法1:
    fieldbyname('DateField').clear;
    方法2:
    fieldbyname('DateField').ASString := '';
    方法3:
    fieldbyname('DateField').asDateTime := 0;方法1,2 在当时似乎是成功了,但实际上在Oracle中保存的值是:10009年...,当查询该记录时出错:"ORA-01801:日期格式对于内部缓冲区过长",在ms sql下没有试。方法3,虽然没有错,但不是Null,是1890年。
      

  7.   

    哦,方法1在Tdataset为TTable时没有错误!!!我的使用环境:
    TQuery和TUpdateSql一起使用,且TQuery的CatchedUpdate 为True时出的问题!!
      

  8.   

    parambyname('ccrq').asdate:=null
    应该行的
      

  9.   

    TdateTimeField 没有asdate的!!
      

  10.   

    parambyname('ccrq').value := null;