for k:=0 to 9 do begin
     checknum_str:=strBuf[k];
     if(checknum_str='') then exit;
         if(RadioButton1.Checked=true)then  ADDSTR:='select * from modedbthr where '+'计划单号'+ '    LIKE '+'"%'+checknum_str+'%"'+'and 状态 ='+'"YES"'+'and 执行人='+'"'+ComboBox1.Text+'"';         if(RadioButton2.Checked=true)then  ADDSTR:='select * from modedbthr where '+'项目编号'+ ' LIKE '+'"%'+checknum_str+'%"'+'and 状态 ='+'"YES"'+'and 执行人='+'"'+ComboBox1.Text+'"';         dm.Query1.Close;
         dm.Query1.sql.Clear;
         dm.Query1.SQL.Add(ADDSTR);//查询
         dm.Query1.Open;
           IF dm.Query1.RecordCount>0 THEN
              begin
               for i:= 0 to dm.Query1.RecordCount-1 do
                 begin
                   ListView1.Items.Add.Caption:=inttostr(i+1);
                     for j:= 0 to 19 do
                       begin
                       ListView1.Items[i].SubItems.Add(dm.Query1.fieldbyname(dbname[j]).asstring);
                       end;
                  ListView1.Items[i].SubItems.Add( dm.Query1.fieldbyname('序号').asstring);
                  dm.Query1.Next;
               end;
             end;
    end;
 i只能执行到小于18,大于18 j就不执计 j循环出错

解决方案 »

  1.   

     for j:= 0 to 19 do 
      

  2.   

    先檢查Query1.RecordCount 的值是多少?
      

  3.   

    Items有多少,如果有19个,那就只能访问到18,因为第一个索引是0,第19索引不存在
      

  4.   

    是这样的,我要执行最多十次查询循环,当k=0时,查询到2条记录时以下循环执行完成
     for j:= 0 to 19 do 
         begin 
         ListView1.Items[i].SubItems.Add(dm.Query1.fieldbyname(dbname[j]).asstring); 
         end; 当k=1时,查询到18条记录,执行以下循环时
    for j:= 0 to 19 do 
         begin 
         ListView1.Items[i].SubItems.Add(dm.Query1.fieldbyname(dbname[j]).asstring); 
         end;
    只能到第16条记录,原后跟踪发现 j:=20。 鼠标放在上循环上显示:
    dm.Query1.fieldbyname(dbname[j]).asstring=variable 'j' inaccessible here due to optimization
    I 循环执行都是对的:  ListView1.Items.Add.Caption:=inttostr(i+1); 
      

  5.   

    Items 是固定的,这里没错,如果我不加 K 循环 就没问题。
      

  6.   

    只能到第16条记录,原后跟踪发现 j:=20。 鼠标放在上循环上显示: 
    dm.Query1.fieldbyname(dbname[j]).asstring=variable 'j' inaccessible here due to optimization 程序运行没错,只是18条以后的记录无法在 ListView1上显示 ,只示 i 循环的那条语句: ListView1.Items.Add.Caption:=inttostr(i+1);