with form1.ADOQueryWhiteList do
  begin
    DisableControls;
    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 := '';
    begin
       form1.ADOQueryWhiteList.SQL.Clear;
       form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =''W'' from WhiteList where DNSCACHE.Domain like ''% +  WhiteList.White_Keyword +%'' ');
        Parameters.ParamByName('Levels').Value := 'W';
        Parameters.ParamByName('White_Keyword').Value := s1;

         try
          Prepared := True;
          ExecSQL;
        except
        end;
      end;
    end;
  Form1.DBGridEh7.selectedrows.clear;
      EnableControls;
    form1.ReadWhiteList;
    Application.MessageBox('对比完成','对比',MB_OK);
   end;
 end;
含义:WhiteList表里White_Keyword模糊字段逐行和DNSCACHE 表里的Domain字段比较,相同符合条件的记录在DNSCACHE表里的Levels字段变成W
运行到红色那里出错,请指点.或者说这样写法完全不对.
提示:ADOQueryWhiteList没有找到Levels,ADOQueryWhiteList没有找到White_Keyword

解决方案 »

  1.   

    form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =''W'' from WhiteList where DNSCACHE.Domain like ''% +  WhiteList.White_Keyword +%'' '); 
    改为
    form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''% +  :White_Keyword +%'''); 
      

  2.   

    大哥,改后还是提示
    form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''% +  :White_Keyword +%'''); 
    提示:White_Keyword  Parameter 'White_Keyword' not found
      

  3.   

    你得sql语句有严重错误
    'update DNSCACHE set Levels =''W'' from WhiteList where DNSCACHE.Domain like ''% +  WhiteList.White_Keyword +%'' '
    update语句中出现from
      

  4.   

    var
      sSql: Strign;
    sSql := 'update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''%:White_Keyword%'')';
    form1.ADOQueryWhiteList.SQL.Text := sSql;
      

  5.   


    form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like '+'%' + ':White_Keyword '+'%');试试
      

  6.   

    form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like '+'%' + ':White_Keyword '+'%');
    提示语法有误
    sSql := 'update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''%:White_Keyword%''';
    form1.ADOQueryWhiteList.SQL.Text := sSql;
    同样提示:ADOQueryWhiteList Parameter 'White_Keyword' not found请指点
      

  7.   

    from WhiteList 这个要拿掉,刚才也没注意看,
    sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like ''%:White_Keyword%'''; 
      

  8.   

           form1.ADOQueryWhiteList.SQL.Clear;
           sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like ''%:White_Keyword%''';
          form1.ADOQueryWhiteList.SQL.Text := sSql;
    改成这样后,
    提示:ADOQueryWhiteList Parameter 'White_Keyword' not found 
    是不是我有什么没注意到的
      

  9.   

    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain White_Keyword like ''%:White_Keyword%'''; 少了一个White_Keyword,
      

  10.   

    晕,又犯错了,先用下面的调试一下吧,
    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain = :White_Keyword%'; 
    White_Keyword看这个参数名会不会写错,
      

  11.   

    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain White_Keyword like ''%:White_Keyword%'''
    提示:ADOQueryWhiteList Parameter 'White_Keyword' not found 
    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain = :White_Keyword%';
    提示:ADOQueryWhiteList Parameter 'White_Keyword' not found 
    我进了数据库里面去看,White_Keyword字段是存在的,而且参数名正确,再三比较参数名正确
     是不是这句
            Parameters.ParamByName('White_Keyword').Value := s1; 
    的问题?
      

  12.   

    看来是%的问题,改为如下:
    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword'; 
    Parameters.ParamByName('White_Keyword').Value := '%'+s1+'%'; 
      

  13.   

    'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword'; 
    Parameters.ParamByName('White_Keyword').Value := '%'+s1+'%'; 
    改成这样可以达到效果.
    但是只能针对单条记录操作,如针对多条记录进行操作时候
    出现:
    ADOQueryWhiteList: cannot perform this operation on a closed dataset
    的错误,逐条运行后,发现
      end; 
      Form1.DBGridEh7.selectedrows.clear; 
    运行end后就出错.
    请指点.谢谢