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
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
改为
form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''% + :White_Keyword +%''');
form1.ADOQueryWhiteList.SQL.Add('update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''% + :White_Keyword +%''');
提示:White_Keyword Parameter 'White_Keyword' not found
'update DNSCACHE set Levels =''W'' from WhiteList where DNSCACHE.Domain like ''% + WhiteList.White_Keyword +%'' '
update语句中出现from
sSql: Strign;
sSql := 'update DNSCACHE set Levels =:Levels from WhiteList where DNSCACHE.Domain like ''%:White_Keyword%'')';
form1.ADOQueryWhiteList.SQL.Text := sSql;
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请指点
sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like ''%:White_Keyword%''';
sSql := 'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like ''%:White_Keyword%''';
form1.ADOQueryWhiteList.SQL.Text := sSql;
改成这样后,
提示:ADOQueryWhiteList Parameter 'White_Keyword' not found
是不是我有什么没注意到的
'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain = :White_Keyword%';
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;
的问题?
'update DNSCACHE set Levels =:Levels where DNSCACHE.Domain like :White_Keyword';
Parameters.ParamByName('White_Keyword').Value := '%'+s1+'%';
Parameters.ParamByName('White_Keyword').Value := '%'+s1+'%';
改成这样可以达到效果.
但是只能针对单条记录操作,如针对多条记录进行操作时候
出现:
ADOQueryWhiteList: cannot perform this operation on a closed dataset
的错误,逐条运行后,发现
end;
Form1.DBGridEh7.selectedrows.clear;
运行end后就出错.
请指点.谢谢