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;
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;
end;
end;
Form1.DBGridEh7.selectedrows.clear;
EnableControls;
Application.MessageBox('对比完成','对比',MB_OK);
end;
end;
含义:WhiteList表里White_Keyword模糊字段逐行和DNSCACHE 表里的Domain字段比较,相同符合条件的记录在DNSCACHE表里的Levels字段变成W
只能针对单条记录操作,如针对多条记录进行操作时候
出现:
ADOQueryWhiteList: cannot perform this operation on a closed dataset
的错误,逐条运行后,发现
end;
Form1.DBGridEh7.selectedrows.clear;
运行end后就出错.
请指点.谢谢
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;
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;
end;
end;
Form1.DBGridEh7.selectedrows.clear;
EnableControls;
Application.MessageBox('对比完成','对比',MB_OK);
end;
end;
含义:WhiteList表里White_Keyword模糊字段逐行和DNSCACHE 表里的Domain字段比较,相同符合条件的记录在DNSCACHE表里的Levels字段变成W
只能针对单条记录操作,如针对多条记录进行操作时候
出现:
ADOQueryWhiteList: cannot perform this operation on a closed dataset
的错误,逐条运行后,发现
end;
Form1.DBGridEh7.selectedrows.clear;
运行end后就出错.
请指点.谢谢
var
i: integer;
s1,sSql: String;
begin
with ADOQueryWhiteList do
begin
DisableControls;
Connection := ADOConnection1;
for i := 0 to DBGridEh7.SelectedRows.Count - 1 do
begin
DBGridEh7.DataSource.DataSet.GotoBook(pointer(DBGridEh7.SelectedRows.Items[i]));
if DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword'] <> Null then
s1 := form1.DBGridEh7.DataSource.DataSet.FieldValues['White_Keyword']
else
s1 := '';
with AdoQuery2 do //如果你根据s1去更新,不要使用原来的adoquery,用一个新的
begin
try
Close;
sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword'; ;
SQL.Text := sSql;
Parameters.ParamByName('Levels').Value := 'W';
Parameters.ParamByName('White_Keyword').Value := s1;
Prepared := True;
ExecSQL;
except
end;
end;
end;
DBGridEh7.selectedrows.clear;
EnableControls;
Application.MessageBox('对比完成','对比',MB_OK);
end;
end;其实如果能够根据一个关键字来更改,可以用
adoquery1.edit;
adoquery1.fieldByname('levels').value := 'W';
adoquery1.post;
这种方式来修改
这样操作后会提示
AdoQuery2 找不见'levels'
我修改了下:
begin
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;
提示:list index out of bounds (1)
请指点