有个 treeview 和oraquery 
住数据库添加一行数据时会出现错误
list index out of bounds 6
PS:不是每次都会有提示...而是一时一时的.
应该是oraquery 这个出错吧,为什么?

解决方案 »

  1.   

    一眼看上去是数组越界,是不是有个地方有for循环,少了个-1
      

  2.   


            
            if p = '' then
            begin
            try
            il:= ListView1.Items.count;
            listview1.Items.Add;//添加操作
            listview1.Items[il].Caption:=getstr(s,'^',1);
            LISTVIEW1.Items[il].SubItems.add(getstr(s,'^',2));
            LISTVIEW1.Items[il].SubItems.add(macs);
            LISTVIEW1.Items[il].SubItems.add(getstr(s,'^',4));
            LISTVIEW1.Items[il].SubItems.add(getstr(s,'^',4));
            listview1.Items[il].ImageIndex:=1;
            except end;
            
            try
            //ADOQuery1.close;
            //ADOQuery1.Prepared;
            zsql:='insert into pclist(电脑名,电脑IP,MAC地址,在线信息,保存信息) '+
            'values("'+getstr(s,'^',1)+'","'+getstr(s,'^',2)+'","'+macs+'","'+getstr(s,'^',4)+'","'+getstr(s,'^',4)+'")';
            adoquery1.SQL.text:=zsql;
            adoquery1.ExecSQL;
            except end;        end;        if p <> '' then
            begin
            ADOedit.Close;
            ADOedit.sql.text:=('select * from pclist');
            ADOedit.Active:=true;
            ADOedit.First;
                while not ADOedit.Eof do
                begin
                macdb:=ADOedit.Fields[3].AsString;
                  if pos(uppercase(macs),uppercase(macdb)) > 0 then
                  begin
                  //memo1.text:=macdb;
                  try
                  ADOedit.Edit;
                  ADOedit.FieldByName('电脑名').AsString :=getstr(s,'^',1);
                  ADOedit.FieldByName('电脑IP').AsString :=getstr(s,'^',2);
                  ADOedit.FieldByName('在线信息').AsString :=getstr(s,'^',4);
                  ADOedit.Post;
                  except end;
                  //Break;
                  end;
                ADOedit.Next;
                end;
            end;令我不明白的就是100个连接可能会有5-6个.如果说代码不正确的应该是每次都会啊.
    为什么会这样呢??/            while not ADOedit.Eof do这个换成降序会不会好一些????