Salut
die o.g. Fehlermeldung der Klasse "EOSError"
Zitat:
Systemfehler. Code 1400. Ungültiges Fensterhandle. Und nu?
erhalte ich, wenn ich mein Programm schliesse.
Der Fehler tritt aber nur auf, wenn ich vorher im Programm folgendes "Feature" auslöse:
In einem Formular (MDIChild) wird folgende Proc aufgerufen:
Delphi-Quellcode:
procedure Tf_Vorgangsbuch.DOSUpdate1Click(Sender: TObject);
begin
{ Erstmal schauen, ob das Update ansich schon läuft (MySQL-Importer erstellt
die genannte Dummy-Datei, die nach Beendigung wieder entfernt wird - weiterhin
wird geprüft, ob nicht schon ein Update eines anderen Moduls läuft, und die TCPServer-Kompo
frei ist}
if (
NOT FileExists('
y:\mysqlimporter\test\dummy_p_vorgangsbuch'))
AND
(
NOT f_main.TcpServer.Active)
then
begin
f_main.TcpServer.Active := True;
ShellExecute(
f_vorgangsbuch.handle,
'
open',
PChar('
psexec.exe'),
PChar('
\\testserver -i -w y:\mysqlimporter\test\ -d ' +
'
y:\mysqlimporter\test\import.exe ' +
'
J:\test\vorgbuch.dbf p_vorgangsbuch Ja ' +
f_main.getIPs[0] ),
PChar('
y:\mysqlimporter\test\'),
SW_SHOW);
end else
ShowMessage('
Update wird bereits ausgeführt! ');
end;
FYI: Auf dem Server existiert ein kleines Programm, welches DBF-Dateien ausliest und in eine
MySQL-
DB schreibt. Das Programm läuft einerseits per Taskmanager selbständig, um einige Datenbanken regelmäßig zu aktualisieren, anderersets, wenn es mit Parametern aufgerufen wird, kann es eine beliebige DBF-Datei auf meinen
MySQL-Server schieben. Da das Programm aber auf den Clients sehr langsam läuft, wird es über PSEXEC "remote" auf dem Server ausgeführt.
Bisher ist das alles noch ganz einfach. Nun will man aber auch wissen, wie weit das Update ist. Zu dem Zweck hab ich mein Hauptprogramm und meinen
MySQL-Importer mit den jeweiligen
TCP-Komponenten ausgestattet, um miteinander zu kommunizieren:
Dazu läuft in der Hauptform meines "grossen" Progs folgendes ab:
Delphi-Quellcode:
procedure Tf_main.TcpServerAccept(Sender: TObject;
ClientSocket: TCustomIpClient);
begin
Progress.Visible := True;
Progress.Max := StrToInt( ClientSocket.Receiveln );
while ClientSocket.Receiveln <> 'EOF' do
begin
Progress.Position := StrToInt( ClientSocket.Receiveln )
end;
TcpServer.Active := False;
Progress.Visible := False;
end;
FYI: Der
MySQL-Importer schickt also an die
IP des Hauptprogrammes zuerst die Anzahl der gesamten Datensätze und dann jeweils den aktuellen Stand der Dinge, um halt das ganze in einer Progressbar visuell dazustellen. Sieht man ja denke ich ganz einfach am Code... oder?
Der letzte String jedenfalls ist ein "EOF" damit das HAuptprogramm weiss: Hier ist SChluss. Fertig.
Nun, diese Skript läuft halt einmal durch, ohne Fehlermeldungen etc.pp. Und wenn ich dann das Programm schliesse, kommt eben die o.g. Fehlermeldung. Ich vermute mal, dass hier meine tolles "Update"-Feature irgendwo nicht ganz astrein ist, weil wenn ich das nicht ausgeführt habe, gibts die Fehlermeldung auch nicht!
Jemand ne Idee?
Danke!
Tyler