Hallo,
in meiner Anwendung habe ich einige Tabellen mit >= 1000 Datensätze, weshalb ich die Datenquellen (TAdoDataSet, TAdoQuery) in einem seperatem Thread öffnen möchte. Hierfür nutze ich die selbst geschriebene Prozedur OpenDataSource
Delphi-Quellcode:
type
TDSOpenThread = class(TThread)
strict private
FConnection: TAdoConnection;
FDataSet: TDataSet;
procedure UpdateForms;
protected
procedure Execute; override;
public
property AdoConnection: TAdoConnection read FConnection write FConnection;
property OpenDataSet: TDataSet read FDataSet write FDataSet;
end;
...
OpenDataSource(FrmMain.Database, DsMaster.DataSet);
...
procedure OpenDataSource(Connection: TAdoConnection; DataSource: TDataSet);
var
OpenThread: TDSOpenThread;
begin
OpenThread := TDSOpenThread.Create(True);
with OpenThread do
begin
AdoConnection := Connection;
OpenDataSet := DataSource;
Resume;
end;
if WaitFor(OpenThread.Handle) then
OpenThread.Free;
end;
procedure TDSOpenThread.Execute;
begin
if FConnection.Connected
and not FDataSet.Active then
FDataSet.Open;
end;
function WaitFor(Event: THandle): Boolean;
begin
Result := False;
while not Result do
case MsgWaitForMultipleObjects(1, Event, False, INFINITE, QS_ALLINPUT) of
WAIT_OBJECT_0:
Result := True;
WAIT_OBJECT_0 + 1:
begin
Application.ProcessMessages;
if Application.Terminated then
Exit;
end;
else
RaiseLastOSError;
end;
end;
Sobald ich jedoch eine Datenquelle mit < 100 Datensätze über diese Prozedur öffnen will, bekomme ich immer den Fehlercode 1400 "Fensterhandle ist ungültig".
Hat hier jemand ne Idee, wie ich das Problem lösen kann?
Gruß
Heiko