我运行一个程序,出现类型错误提示.具体是Project FORM4.EXW  raised exception class EVariantTypeCastError with message' Could not convert variant of type (Null) into type (String)'.我检查完数据库,类型匹配没错!!请高手指点
程序如下procedure TForm4.Button1Click(Sender: TObject);
var
loc1:boolean;
 begin
 if (edit1.Text='') OR (edit3.Text='') then
   begin
   showmessage('请输入书号和册数');
   abort;
   end;
loc1:=ADOTable1.locate('Bno',edit1.text,[LocaseInsensitive]);
if loc1=true  then
    begin
      ADOTable1.Edit;
      ADOTable1.FieldByName('Leftno').Value:=ADOTable1.FieldByName('LefTno').Value+StrToInt(edit3.Text);
      ADOTable1.Post;
      showmessage('新增册数成功');
    end;
 if loc1=false then
   begin
      if(edit2.text='') or (edit3.text='') or (edit4.text='') or (edit5.text='') then
        begin  showmessage('新书,请输入图书的完整信息');
               abort;
             end
        else
   begin
   ADOTable1.InsertRecord([edit1.Text,edit2.Text,edit4.Text,StrtoInt(edit3.Text),edit5.Text]);
   showmessage('新增图书成功');
     end;
    end;
  end;

解决方案 »

  1.   

    这一句
    ADOTable1.FieldByName('Leftno').Value:=ADOTable1.FieldByName('LefTno').Value+StrToInt(edit3.Text);
    中ADOTable1.FieldByName('LefTno').Value值可能为空
      

  2.   

    先判断一下:
    if ADOTable1.FieldByName('Leftno').IsNull then
      

  3.   

    procedure TForm4.Button1Click(Sender: TObject);
    var
    loc1:boolean;
     begin
     if (trim(edit1.Text)='') OR (trim(edit3.Text)='') then
       begin
       showmessage('请输入书号和册数');
       abort;
       end;
    loc1:=ADOTable1.locate('Bno',edit1.text,[LocaseInsensitive]);
    if loc1=true  then
        begin
          ADOTable1.Edit;
          ADOTable1.FieldByName('Leftno').Value:=ADOTable1.FieldByName('LefTno').Value+StrToInt(edit3.Text);
          ADOTable1.Post;
          showmessage('新增册数成功');
        end;
     if loc1=false then
       begin
          if(trim(edit2.text)='') or (trim(edit3.text)='') or (trim(edit4.text)='') or (trim(edit5.text)='') then
            begin  showmessage('新书,请输入图书的完整信息');
                   abort;
                 end
            else
       begin
       ADOTable1.InsertRecord([edit1.Text,edit2.Text,edit4.Text,StrtoInt(edit3.Text),edit5.Text]);
       showmessage('新增图书成功');
         end;
        end;
      end;
      

  4.   

    up,检测你所使用的字段不是空,用IsNull判断一下。
      

  5.   

    中ADOTable1.FieldByName('LefTno').Value值可能为空,还有,在 strtoint(edit3.text)更改为strtoint(trim(edit3.text))试一下看。
      

  6.   

    ADOTable1.FieldByName('Leftno').Value:=trim(ADOTable1.FieldByName('LefTno').Value)+StrToInt(edit3.Text);ADOTable1.InsertRecord([trim(edit1.Text),trim(edit2.Text),trim(edit4.Text),StrtoInt(edit3.Text),trim(edit5.Text)]);字符串最好都加上trim去掉空
      

  7.   

    我用ADO连接数据库时这个问题经常遇到,请问是数据库的问题还是程序问题!!谢谢各位了