begin 
  if form1.DBGridEh7.SelectedRows.Count >0 then
  begin 
    ADOQueryWhiteList.Connection := form1.ADOConnection1; 
    for i := 0 to form1.DBGridEh7.SelectedRows.Count - 1 do 
    begin 
      form1.DBGridEh7.DataSource.DataSet.GotoBook(pointer(form1.DBGridEh7.SelectedRows.Items[i])); 
      if form1.DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword'] <> Null then 
        s1 := form1.DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword'] 
      else 
        s1 := ''; 
with form1.ADOQueryWhiteList do 
   [color=#FF9900 begin [/color][/color]
          DisableControls; 
      form1.ADOQueryWhiteList.SQL.Clear; 
      sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword'; ; 
      form1.ADOQueryWhiteList.SQL.Text := sSql; 
        Parameters.ParamByName('Levels').Value := 'W'; 
        Parameters.ParamByName('White_Keyword').Value :='%'+s1+'%'; 
        try 
          Prepared := True; 
          ExecSQL; 
        except 
        end; 
      EnableControls; 
      end; 
    end; 
  Form1.DBGridEh7.selectedrows.clear; 
    Application.MessageBox('对比完成','对比',MB_OK); 
  end; 
end; 
选择多条记录进行操作,第一条记录完成循环操作,循环到第二条记录,红色标记那里以后,就出现提示:list index out of bounds (1),麻烦高手帮看下,从程序上看,橙色的begin end 好象没运行到.请高手指点下该怎么改?

解决方案 »

  1.   

    要设置grid的模式为gridmode=true 好像
      

  2.   

    form1.DBGridEh7.DataSource.DataSet
    是不是
    form1.ADOQueryWhiteList
    啊你在下面已经execsql了一个update语句,就不存在数据集了下面要用的时候就出错了
      

  3.   

    你的原因应该是在循环过程中又调用了ADOQueryWhiteList,而且使用它进行update,这样原来的查询显示就会失效了
      

  4.   

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    begin 
      if DBGridEh7.SelectedRows.Count >0 then
      begin 
        ADOQueryWhiteList.Connection := form1.ADOConnection1;
        for i := 0 to DBGridEh7.SelectedRows.Count - 1 do
        begin
          DBGridEh7.DataSource.DataSet.GotoBook(pointer(form1.DBGridEh7.SelectedRows.Items[i]));
          if form1.DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword'] <> Null then
            s1 := form1.DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword'] 
          else
            s1 := '';
          with AdoQuery2 do  //这里不要用adoquerywhitelist换一个
          begin
            DisableControls;
            Close;
            SQL.Text := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword'; ;
            Parameters.ParamByName('Levels').Value := 'W';
            Parameters.ParamByName('White_Keyword').Value :='%'+s1+'%';
            try
              Prepared := True;
              ExecSQL;
            except
            end;
            EnableControls;
          end;
        end;
      Form1.DBGridEh7.selectedrows.clear;
        Application.MessageBox('对比完成','对比',MB_OK);
    end;
    end;
    end;