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 
    begin 
          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;
含义:WhiteList表里White_Keyword模糊字段逐行和DNSCACHE 表里的Domain字段比较,相同符合条件的记录在DNSCACHE表里的Levels字段变成W 
只能针对单条记录操作,如针对多条记录进行操作时候 
出现: 
提示:list index out of bounds (1) 
请指点

解决方案 »

  1.   

    form1.DBGridEh7.SelectedRows.Count万一这个是0呢?if form1.DBGridEh7.SelectedRows.Count >0 then
      

  2.   

    begin
      if form1.DBGridEh7.DataSource.DataSet.RecordCount > 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
        begin
              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;
    还是出现一样的提示?请指点.