我使用ADOQuery来添加一条新的记录时出现这样的错误提示:“could not convert variant of type(Null) into type (Double)”?
代码如下:
              append;
              FieldByName('flh').AsString:=Edit1.text;
              FieldByName('isbn').AsString:=Edit2.text;
              FieldByName('sm').AsString:=Edit3.text;
              FieldByName('zz').AsString:=Edit4.text;
              FieldByName('zzh').AsString:=Edit5.text;
              FieldByName('cbz').AsString:=Edit6.text;
              FieldByName('cbd').AsString:=Edit7.text;
              FieldByName('cch').AsString:=Edit8.text;
              FieldByName('dj').AsString:=Edit9.text;
              FieldByName('kb').AsString:=Edit10.text;
              FieldByName('zd').AsString:=Edit11.text;
              FieldByName('ys').AsString:=Edit12.text;
              FieldByName('cbn').AsString:=Edit13.text;
              FieldValues['grrq'] := DateTimePicker1.date;
              post; 

解决方案 »

  1.   

    不论Edit1、Edit2、Edit3、Edit4......Edit13的Text值是否为空,都会出现这个错误。
      

  2.   

    我使用的是SQL数据库,除了grrq为时间日期型外,其余的都为字符型。如果我不使用ADOQuery,使用ADOTable就可以添加记录。
      

  3.   

    添加记录最好用一个单独的AdoQuery,用SQL的Insert into语句....
      

  4.   

    我一直都用 ADOQuery.FieldValues['FieldName'] := Value; 的,跟楼主的有什么区别吗?或者说我的语法不够标准不过我倒是没碰到过类似的问题
      

  5.   

    >>不论Edit1、Edit2、Edit3、Edit4......Edit13的Text值是否为空,都会出现这个错误。不大可能! 检查是不是还漏了其它字段的赋值
      

  6.   

    如果我不使用ADOQuery,使用ADOTable就可以添加记录。
    //不会吧,可能是你漏掉了个字段,还有你在append前面加个close;
      

  7.   

    如果位空的話,建議使用String插入,Text內容做類型轉換,如不為空可以依據插入欄位數據類型做轉換可以試看看.
      

  8.   

    could not convert variant of type(Null) into type (Double)”?
    应该是那个时间日期型数据的问题。
    因为只有那个类型的数据才以Double的形式存储呀!
      

  9.   

    建议改成这样写好了:
    ADOQuery.Close;
    ADOQuery.SQL.Clear;
    ADOQuery.SQL.Text := '你的添加记录的语句';
    ADOQuery.Open;
      

  10.   

    FieldValues['grrq'] := DateTimePicker1.date;
    一句改成:
    FieldByName('grrq').Value:= DateTimePicker1.DateTime
    试试看!
      

  11.   

    如果有空格也不应该是NULL
    是不是数据库中有些项忘了赋值,而且数据项又不能为空。
      

  12.   

    最好你直接发上你的源码和数据库上来检查一下,如果可能的话!!!
    最好是用INSERT INTO来增加记录
    在DELPHI用IF *** ISNULL THEN
    来检查一下值是否为空,以免出错!!!
      

  13.   

    with ADOQuery1 do
                begin
                  append;
                  FieldByName('flh').AsString:=Edit1.text;
                  FieldByName('isbn').AsString:=Edit2.text;
                  FieldByName('sm').AsString:=Edit3.text;
                  FieldByName('zz').AsString:=Edit4.text;
                  FieldByName('zzh').AsString:=Edit5.text;
                  FieldByName('cbz').AsString:=Edit6.text;
                  FieldByName('cbd').AsString:=Edit7.text;
                  FieldByName('cch').AsString:=Edit8.text;
                  FieldByName('dj').AsString:=Edit9.text;
                  FieldByName('kb').AsString:=Edit10.text;
                  FieldByName('zd').AsString:=Edit11.text;
                  FieldByName('ys').AsString:=Edit12.text;
                  FieldByName('cbn').AsString:=Edit13.text;
                  FieldByName('grrq').Value:=DateTimePicker1.date;
                  post;
               end;
    除了grrq为datetime型字段外,其它的都是字符型字段。
             名称     类型     长度     是否允许为空
    ID int 4 0   (自动增加)
    FLH char 8 1
    ZZH char 4 1
    CCH char 6 1
    SM char 60 1
    ZZ char 30 1
    CBD char 8 1
    CBZ char 30 1
    CBN char 5 1
    GRRQ datetime 8 1
    BC char 6 1
    ZD char 4 1
    YS char 4 1
    KB char 4 1
    DJ char 10 1
    ISBN char 30 1
      

  14.   

    我用ADOTabel就没有任何问题。
      

  15.   

    你在添加前判断一下 如果为null  可用给它赋值为0
      

  16.   

    :“could not convert variant of type(Null) into type (Double)”?
    ==============================
    你是转换成Double,那你看看你数据库里哪个字段是Double啊
    检查后在看看程序中哪里进行了赋值
    如果你要用edit赋给它,那么要先检查edit是不是为空
    如果是,最好设为0,然后再继续