请教报错原因代码如下:
//-----------------保存进货单,进货单明细数据-------------------------
procedure Tinput.Button1Click(Sender: TObject);
var
maxnum,maxnum2,temp,inputnum,inputnum2:string;
newnum,newnum2,i:integer;
begin
 //--------------------为新插入的进货单和进货单明细数据计算编号-------------
//计算进货单中最大编号,以便插入新的进货单数据时编号不冲突
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select max(编号) 最大编号 from 进货单');
  adoquery1.Open;
  maxnum:=(adoquery1.FieldByName('最大编号').asstring);//对读出的编号进行截取并将其转换为整数值,字段太长时可以不能用strtoint来转换
 //防止插入第一条记录时出错
    if (maxnum='')or(maxnum='') then
   temp:='00000'
   else
   temp:=copy(maxnum,1,5);//新插入的进货单编号为插入前的最大编号+1
   newnum:=strtoint(temp)+1;
//重新组合编码
if length(inttostr(newnum))=1 then
 inputnum:='0000'+inttostr(newnum);
if length(inttostr(newnum))=2 then
 inputnum:='000'+inttostr(newnum);
if length(inttostr(newnum))=3 then
 inputnum:='00'+inttostr(newnum);
if length(inttostr(newnum))=4 then
 inputnum:='0'+inttostr(newnum);
if length(inttostr(newnum))=5 then
 inputnum:=inttostr(newnum); //计算进货单明细最大编号以便插入新的进货单明细数据时编号不冲突
   adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select max(编号) 最大编号 from 进货单明细');
  adoquery1.Open;
  maxnum2:=adoquery1.FieldByName('最大编号').asstring;//对读出的编号进行截取并将其转换为整数值,字段太长时可以不能用strtoint来转换
 //防止插入第一条记录时出错
    if (maxnum2='')or(maxnum2='') then
   temp:='00000'
   else
   temp:=copy(maxnum2,1,5);
   newnum2:=strtoint(temp);

解决方案 »

  1.   

    4的后面好像有个空格?
    建议用StrToIntDef函数替代StrToInt,或者用try机制将StrToInt保护起来。
      

  2.   

    關鍵字符串用下trim函數,用容錯模式保護convert部分程序代碼
      

  3.   

    解决了,用 temp:=trim(copy(maxnum,1,5));
      

  4.   

    其实综合1楼2楼说法是最好的,用Try保护,再用Trim保护,双保险。
      

  5.   

    这个判断怎么都一样的?if和then之间的内容最后全部用括号括起来。//对读出的编号进行截取并将其转换为整数值,字段太长时可以不能用strtoint来转换
     //防止插入第一条记录时出错
      if (maxnum2='')or(maxnum2='') then
      

  6.   

    trim去掉左右空格 再转换试试