procedure TForm1.huanyishouClick(Sender: TObject);
var
  i,item:TListitem;
  intTmp,b: integer;
  strTmp: string;
  sURL,s,n,m: String;
  str,str1:TStrings;
begin
  i := ListView1.Selected;
  if (i = nil) then exit;
    ADOQuery1.Close;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('select * from 数据库 where 名称 =:aa');
    ADOQuery1.Parameters.ParamByName('aa').Value:=listview1.Selected.SubItems[0];
    ADOQuery1.Open;
if  ADOQuery1.RecordCount<>0  then
begin
  for b:=0 to ADOQuery1.RecordCount-1  do
    begin
    s:=listView1.Selected.Caption; //表中编号
    m:=self.ADOQuery1.Fields[0].AsString;//当前编号
     if s=m then//如果编号相同就跳过
     begin
      Self.ADOQuery1.Next;
      end else
      begin
      item:=ListView1.Selected;
      item.Caption:=ADOQuery1.Fields[0].value ;
      item.SubItems[0]:=ADOQuery1.Fields[1].value;
      item.SubItems[1]:=ADOQuery1.Fields[2].value;
      item.SubItems[2]:=ADOQuery1.Fields[3].value;
      item.SubItems[3]:=ADOQuery1.Fields[4].value;
      item.SubItems[4]:=ADOQuery1.Fields[5].value;
      item.SubItems[5]:=ADOQuery1.Fields[6].value
      item.SubItems[6]:=ADOQuery1.Fields[8].value;
      item.SubItems[7]:=ADOQuery1.Fields[6].value;
      item.SubItems[8]:=ADOQuery1.Fields[9].value;
      ADOQuery1.ExecSQL;
      end;
    end;
   end;
end;
//这个循环有问题,如果ADOQuery1.RecordCount,也就是名称有8个,执行4次就不再执行了,少了一半

解决方案 »

  1.   

    如何才能,每点一次按钮,ADOQuery1.RecordCount-1
      

  2.   

    循环好像的确有问题:
    通常数据集的循环都是ADOQuery1.First;
      while ADOQuery1.Eof do
      begin
        //这里写处理的代码
        ADOQuery1.Next;
      end;不管你SM的那个条件是否满足
    ADOQuery1.Next;这一句应该是必须执行的,否则,很容易就死循环了。
    还有,最后这句ADOQuery1.ExecSQL;
    不知道是什么意义。按照你的意思,我修改了一下代码,你看看if  ADOQuery1.RecordCount<>0  then
      begin
        ADOQuery1.First;
        While not ADOQuery1.Eof do
        begin
          s := listView1.Selected.Caption; //表中编号
          m := ADOQuery1.Fields[0].AsString;//当前编号
          if s<>m then//如果编号不相同才进行处理
          begin
            item:=ListView1.Selected;
            item.Caption:=ADOQuery1.Fields[0].value ;
            item.SubItems[0]:=ADOQuery1.Fields[1].value;
            item.SubItems[1]:=ADOQuery1.Fields[2].value;
            item.SubItems[2]:=ADOQuery1.Fields[3].value;
            item.SubItems[3]:=ADOQuery1.Fields[4].value;
            item.SubItems[4]:=ADOQuery1.Fields[5].value;
            item.SubItems[5]:=ADOQuery1.Fields[6].value
            item.SubItems[6]:=ADOQuery1.Fields[8].value;
            item.SubItems[7]:=ADOQuery1.Fields[6].value;
            item.SubItems[8]:=ADOQuery1.Fields[9].value;
          end;
          ADOQuery1.Next; //这句话放在判断的外面,必须执行
        end;
      end;