Mysql 有没有比这更好的方法来阻止DBgrid随着耗时的更新而闪烁?
在下面的情况下,有人能就如何实现我的目标提供建议吗? (我不知道Thead是否有用,但以前从未使用过。) 在我的Delphi应用程序中,我有一个通过Internet对外部MYSQL数据库运行的查询。查询结果显示在DBGrid中(最多50行) 用户单击按钮进行“web检查”,然后发生以下情况Mysql 有没有比这更好的方法来阻止DBgrid随着耗时的更新而闪烁?,mysql,delphi,tdbgrid,Mysql,Delphi,Tdbgrid,在下面的情况下,有人能就如何实现我的目标提供建议吗? (我不知道Thead是否有用,但以前从未使用过。) 在我的Delphi应用程序中,我有一个通过Internet对外部MYSQL数据库运行的查询。查询结果显示在DBGrid中(最多50行) 用户单击按钮进行“web检查”,然后发生以下情况 首先,我将dataset的一个字段(web_响应)设置为空字符串,以清除DBGrid中显示的任何现有数据 然后,对于数据集中的每一行,我提取一个字段(FieldA)的值,将其传递给一个函数,并将另一个字段(
- 首先,我将dataset的一个字段(web_响应)设置为空字符串,以清除DBGrid中显示的任何现有数据
- 然后,对于数据集中的每一行,我提取一个字段(FieldA)的值,将其传递给一个函数,并将另一个字段(web_响应)的值设置为该函数的结果
- 函数本身使用IdHTTP,使用传递的参数在不同的远程网站上执行搜索,并返回响应字符串。这个过程大约需要1到2秒
//清空任何预先存在的web响应
//在清除现有web响应时,禁用控件以停止DBgrid闪烁
DBGrid1.DataSource.DataSet.DisableControls;
我的问题1.首先;
而不是MyQuery1.Eof do
开始
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应')。关联字符串:='';
MyQuery1.下一步;
结束;
DBGrid1.1更新数据//再次显示清除的网格
DBGrid1.DataSource.DataSet.EnableControls;
//对于每一行,检查web上的FieldA并显示响应
我的问题1.首先;
而不是MyQuery1.Eof do
开始
DataToCheck:=MyQuery1.FieldByName('FieldA').AssString//获取要检查的数据
//获取web响应并将其放入数据集
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应').AssString:=GetWebCheckResponse(DataToCheck);
Application.ProcessMessages;/,'因为循环很慢自从我上次接触Delphi以来已经7年多了,我们不允许使用数据感知组件,所以我可能在这里给你错误的建议。但是,您似乎过于频繁地刷新网格。尤其是在循环中刷新网格
我建议将代码更改为:
DBGrid1.DataSource.DataSet.DisableControls;
MyQuery1.First;
while not MyQuery1.Eof do
begin
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := '';
MyQuery1.Next;
end;
//For each row, check FieldA on the web and show response
MyQuery1.First;
while not MyQuery1.Eof do
begin
DataToCheck := MyQuery1.FieldByName('FieldA').AsString ; //get data to check
//get the web response and put into dataset
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := GetWebCheckResponse(DataToCheck);
Application.ProcessMessages; //,'cos the loop is slow <<-- can I get rid of this and use threads?
MyQuery1.Next;
end;
DBGrid1.DataSource.DataSet.EnableControls;
DBGrid1.RefreshData; //show the response we just put in dataset
DBGrid1.DataSource.DataSet.DisableControls;
我的问题1.首先;
而不是MyQuery1.Eof do
开始
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应')。关联字符串:='';
MyQuery1.下一步;
结束;
//对于每一行,检查web上的FieldA并显示响应
我的问题1.首先;
而不是MyQuery1.Eof do
开始
DataToCheck:=MyQuery1.FieldByName('FieldA').AssString//获取要检查的数据
//获取web响应并将其放入数据集
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应').AssString:=GetWebCheckResponse(DataToCheck);
Application.ProcessMessages;/,'因为循环很慢自从我上次接触Delphi以来已经7年多了,我们不允许使用数据感知组件,所以我可能在这里给你错误的建议。但是,您似乎过于频繁地刷新网格。尤其是在循环中刷新网格
我建议将代码更改为:
DBGrid1.DataSource.DataSet.DisableControls;
MyQuery1.First;
while not MyQuery1.Eof do
begin
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := '';
MyQuery1.Next;
end;
//For each row, check FieldA on the web and show response
MyQuery1.First;
while not MyQuery1.Eof do
begin
DataToCheck := MyQuery1.FieldByName('FieldA').AsString ; //get data to check
//get the web response and put into dataset
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := GetWebCheckResponse(DataToCheck);
Application.ProcessMessages; //,'cos the loop is slow <<-- can I get rid of this and use threads?
MyQuery1.Next;
end;
DBGrid1.DataSource.DataSet.EnableControls;
DBGrid1.RefreshData; //show the response we just put in dataset
DBGrid1.DataSource.DataSet.DisableControls;
我的问题1.首先;
而不是MyQuery1.Eof do
开始
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应')。关联字符串:='';
MyQuery1.下一步;
结束;
//对于每一行,检查web上的FieldA并显示响应
我的问题1.首先;
而不是MyQuery1.Eof do
开始
DataToCheck:=MyQuery1.FieldByName('FieldA').AssString//获取要检查的数据
//获取web响应并将其放入数据集
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应').AssString:=GetWebCheckResponse(DataToCheck);
Application.ProcessMessages;/,'因为循环很慢自从我上次接触Delphi以来已经7年多了,我们不允许使用数据感知组件,所以我可能在这里给你错误的建议。但是,您似乎过于频繁地刷新网格。尤其是在循环中刷新网格
我建议将代码更改为:
DBGrid1.DataSource.DataSet.DisableControls;
MyQuery1.First;
while not MyQuery1.Eof do
begin
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := '';
MyQuery1.Next;
end;
//For each row, check FieldA on the web and show response
MyQuery1.First;
while not MyQuery1.Eof do
begin
DataToCheck := MyQuery1.FieldByName('FieldA').AsString ; //get data to check
//get the web response and put into dataset
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := GetWebCheckResponse(DataToCheck);
Application.ProcessMessages; //,'cos the loop is slow <<-- can I get rid of this and use threads?
MyQuery1.Next;
end;
DBGrid1.DataSource.DataSet.EnableControls;
DBGrid1.RefreshData; //show the response we just put in dataset
DBGrid1.DataSource.DataSet.DisableControls;
我的问题1.首先;
而不是MyQuery1.Eof do
开始
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应')。关联字符串:='';
MyQuery1.下一步;
结束;
//对于每一行,检查web上的FieldA并显示响应
我的问题1.首先;
而不是MyQuery1.Eof do
开始
DataToCheck:=MyQuery1.FieldByName('FieldA').AssString//获取要检查的数据
//获取web响应并将其放入数据集
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应').AssString:=GetWebCheckResponse(DataToCheck);
Application.ProcessMessages;/,'因为循环很慢自从我上次接触Delphi以来已经7年多了,我们不允许使用数据感知组件,所以我可能在这里给你错误的建议。但是,您似乎过于频繁地刷新网格。尤其是在循环中刷新网格
我建议将代码更改为:
DBGrid1.DataSource.DataSet.DisableControls;
MyQuery1.First;
while not MyQuery1.Eof do
begin
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := '';
MyQuery1.Next;
end;
//For each row, check FieldA on the web and show response
MyQuery1.First;
while not MyQuery1.Eof do
begin
DataToCheck := MyQuery1.FieldByName('FieldA').AsString ; //get data to check
//get the web response and put into dataset
MyQuery1.Edit;
MyQuery1.FieldByName('web_response').AsString := GetWebCheckResponse(DataToCheck);
Application.ProcessMessages; //,'cos the loop is slow <<-- can I get rid of this and use threads?
MyQuery1.Next;
end;
DBGrid1.DataSource.DataSet.EnableControls;
DBGrid1.RefreshData; //show the response we just put in dataset
DBGrid1.DataSource.DataSet.DisableControls;
我的问题1.首先;
而不是MyQuery1.Eof do
开始
MyQuery1.编辑;
MyQuery1.FieldByName('web_响应')。关联字符串:='';
MyQuery1.下一步;
结束;
//对于每一行,检查web上的FieldA并显示响应