我正在使用 Delphi XE6 和 UniDAC 和 MySQL
我的 DM 中有一些 TUniQuery 组件,我想反复刷新主题,所以我在我的主窗体中放置了一些计时器,并在每个计时器中创建一个线程并将查询传递给它以刷新数据:
例如 :
TUpdateThread = class(TThread)
private
FQuery : TUniQuery;
FResultHandle : THandle;
public
constructor Create(var Query : TUniQuery; ResultHandle : THandle);
protected
procedure Execute; override;
end;
constructor TUpdateThread.Create(var Query: TUniQuery; ResultHandle : THandle);
begin
inherited Create;
Suspend;
FQuery := Query;
FResultHandle := ResultHandle;
FreeOnTerminate := True;
Resume;
end;
procedure TUpdateThread.Execute;
var
Msg : String;
B : Boolean;
begin
try
B := True;
try
FQuery.Refresh;
except
on E:Exception do
begin
B := False;
Msg := 'Error : ' + #13 + E.Message;
SendMessage(FResultHandle, MSG_UPDATERESULT, 2, Integer(Msg));
end;
end;
finally
if B = True then
SendMessage(FResultHandle, MSG_UPDATERESULT, 1, 1);
Terminate;
end;
end;
有时它会成功完成,但很多时候我遇到了一些错误,例如 AVs 或“Net Pack Header ...”错误,或者有时我的网格(Ehlib DBGrid)有问题,例如绘制行错误或...(特别当我使用 DisableControls 和 EnableControls 时)所有查询都具有相同的连接,我认为每个线程都应该有自己的连接,因为所有计时器间隔都相同,我建议有时刷新查询会相互中断
实际上,我的数据库在 VPS 服务器中,并且有一些客户端应用程序,我想在 Clients 中有 Live-Tables 并重复更新主题
实现这一目标的最佳方法是什么?我应该如何在没有应用程序挂起的情况下更新我的表格!有一些组件如 TThreadTimer(或...),主题对这种情况有用吗?!
谢谢 ...