在delphi中有如下代码:
rocedure TForm3.autono(const stype:string); //传递的参数是图书类别
var
   q:TQuery;
   s:string;
begin           //先利用SQL查询,得到本类别的最后一个图书编号,
  q:=tquery.create(nil);
  q.databasename:=dbname;
  q.sql.add('select 图书编号 from book_info where 类别='''
  +stype+''''+'order by 图书编号');
  q.open;
  q.last;     //指针移动到最后一条记录
  s:=q.fieldbyname('图书编号').AsString;
  q.close;
  q.free;
  nobox.text:=nextbookno(s);  //调用函数,填写新图书编号
end;function TForm3.nextbookno(const str:string):string;
var
   s,s1:string;   //中间变量和循环变量
   i,j,k:integer;
begin
  s:=str;
  s1:=copy(s,1,1);   //取前一个非数字字符
  delete(s,1,1);   //取掉非数字字符
  i:=length(s);   //再求字符串长度
  j:=length(inttostr(strtoint(s)));  //求该字符串转换成数字后的位数
  for k:=1 to i-j do s1:=s1+'0';
  result:=s1+inttostr(strtoint(s)+1);  //返回下一个号码
end;编译时能过,可运行时出现Debugger Exception Notification错误呀
最后高亮显示范区 :  nobox.text:=nextbookno(s);  //调用函数,填写新图书编号最后还提示: "is not a vaild integer value."
请问这是什么原因引起的呀????????

解决方案 »

  1.   

    stype没有值,应该是数据库没有找到相关记录的原因
      

  2.   

    strtoint(s)中的s是空。
    所以报错!!!!!!可能你的数据字段“图书编号'”取出的值是空值。
      

  3.   

    多谢 powerdel() 呀,我把 stype 赋了初值,问题就解决了,下面是入库的上代码,可当我在form3里面输入相应的值,结果
    procedure TForm3.insbook;
    var q:TQuery;
    begin
      q:=TQuery.create(nil);
      q.databasename:=dbname;
      q.sql.add('insert into book_info (图书编号,书名,作者,出版社, 出版时间,书价,类别,备注,入库时间,借阅次数) values (:b_no,:b_name,:b_author,:b_publisher,:b_time,:b_momey,:b_type,:b_time,:b_outcount)');  q.parambyname('b_no').asstring:=nobox.text;
      q.parambyname('b_name').asstring:=namebox.text;
      q.parambyname('b_author').asstring:=authorbox.text;
      q.parambyname('b_publisher').asstring:=publisherbox.text;
      q.parambyname('b_time').asdate:=pubtimebox.date;
      q.parambyname('b_momey').asfloat:=strtofloat(pricebox.text);
      q.parambyname('b_type').asstring:=intimebox.text;
      q.parambyname('b_outcount').asstring:=outcountbox.text;  q.execsql;
      
      q.close;
      q.free;
    end;
    上面是入库的上代码,可当我在form3里面输入相应的值,结果却显示
    Debugger Exception Notification :'invalid parameter.'错误,并且
      q.close;
      
    高亮显示错误呀,实在搞不懂了
      

  4.   

    j:=length(inttostr(strtoint(s)));  的问题
    用try 把s 专程int
      

  5.   

    多谢各位老大的关注哈我终于发现问题的所在了
    原来是我下面为insert into  少赋了两个值
    看来小弟我还精心了,以后要改改这个坏习惯了^_^