strSQL:='select * from TEMPRECORD where SelStCodeNo='''+str1+'''';
 try
   ExecQuery(DM.DSetTemp,strSQL);
   DM.DSetTemp.First;
   tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger;
注释:ExecQuery()是我单独写的一个执行sql语句的函数,是没有错的,DM.DSetTemp是ADODataSet类型的控件
执行出错:‘’is not a valid integer value.
这是为什么?问题出现在tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger;

解决方案 »

  1.   

    'Timemute'字段是什么类型,是不是不符合integer类型
      

  2.   


    showMessage(DM.DSetTemp.FieldByName('Timemute').AsString); // 看裏面是什麼,應該是空的。
    tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger  //所有你這樣會出錯,因為他不是整型。
      

  3.   

    'Timemute'字段是字符型,而且是空的,所以就会报这个错
      

  4.   

    tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger;
    改成:
    tp:=StrToIntDef(DM.DSetTemp.FieldByName('Timemute').AsString, 0);
      

  5.   

    Timemute是char类型,第一个值是0,是不是这个原因
      

  6.   

    char类型,如果里面的值是数字格式的,可以,出错肯定是里面的值不符合整型规则,或者是空
      

  7.   

    try
      tp:=StrToInt(DM.DSetTemp.FieldByName('Timemute').AsString);
    Except
      ShowMessage('转换出错!');
      Exit;
    end;
      

  8.   

    strSQL:='select * from TEMPRECORD where SelStCodeNo='''+str1+''''; 
    try 
      ExecQuery(DM.DSetTemp,strSQL); 
      if DM.DSetTemp.IsEmpty then exit; // 加上此句  DM.DSetTemp.First; 
      tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger; 
      

  9.   

    不是上面所说的问题
    问题是tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger;中
    当数据库中Timemute对应的值是0时就出错
    这个问题怎么解决? 
      

  10.   

    如果
    tp:=DM.DSetTemp.FieldByName('Timemute').AsInteger; 
    改成: 
    tp:=StrToIntDef(DM.DSetTemp.FieldByName('Timemute').AsString, 0);
    tp得到的结果好像全是0,本来数据库里Timemute的值是0、1、2递增的
      

  11.   


    'Timemute'字段中的值是不是带空格呀,char类型是有这个问题的
      

  12.   

    将SQL Server中的char类型换成varchar类型可以嘛?
      

  13.   

    解决了
    tp:=StrToInt(trim(DM.DSetTemp.FieldByName('Timemute').AsString));