我想利用ware(id,code,name,...)建立自动编号, 其中code是varchar类型,代码如下:procedure Teditsp.NewCode(Sender: integer);
var code: string;
begin
  Query1.Close;
  Query1.sql.text := 'select count(*) from ware';
  Query1.open;
  code := floattostr(100000 + Query1.fields[1].asfloat + Sender);
  Query1.Close;
  Query1.sql.text := 'select count(*) from ware where code=:code';
  Query1.Parameters[0].Value := code;
  Query1.open;
  if Query1.Fields[1].Value > 0 then
  begin
    Sender := sender + 1;
    Newcode(sender);
  end
  else
  begin
   spda.ADOTable2.FieldByName('code').value := code;
  end;
end;
但运行后错误提示:
list index out of bounds(1)
我知道是越界了,但找不到什么原因?谢谢!!

解决方案 »

  1.   

    Query1.Fields[1].Value 这里Fields[1]越界了,你的Query1中只有一个字段,索引是0
      

  2.   

    修改一下:
    if Query1.Fields[0].Value > 0 then
      

  3.   

    这个问题解决了,但是程序运行到spda.ADOTable2.FieldByName('code').value := code;
    又发生另一个错误:
    access violation at address 0081AF2C in module...
      

  4.   

    试试把var
         code:string;换个变量名
      

  5.   

    spda.ADOTable2.FieldByName('code').AsString := code;
      

  6.   

    可以检查一下spda.ADOTable2是否是打开的?是否有数据?spda.ADOTable2.FieldByName('code').value可能根本不存在