Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#22

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 13:12
Hallo Jens,

ne, was der Fehler ist, wissen wir jetzt immer noch nicht, aber wir wissen, dass 5 Sekunden warten das Problem löst. Beim Programmstart steht irgendwas noch nicht zur Verfügung.

Für genauere Erläuterungen zur Fehlerbehandlung schau bitte mal in der Hilfe unter try. Hier nur eine kurze Erklärung:

sMessage ist ein von mir deklarierter String zum Speichern des Fehlertextes.
e ist der Name, unter dem die Exception angesprochen wird, das könnte auch Hugo oder Paul... heißen.
Mit e.Message erhalten wir den Fehlertext der Exception.

Delphi-Quellcode:
on e : Exception Do begin
  sMessage := e.Message;
  Inc(iError);
  WinExec('CMD.EXE /C "net start >> c:\netstart.txt"',SW_HIDE); // nur zur momentanen Fehlersuche, kann später entfallen.
  Application.ProcessMessages;
  Sleep(1000);
end;
Was mich interessieren würde, wäre der Inhalt der per WinExec erstellten Datei c:\netstart.txt. Könntest Du den bitte mal mit hier dranhängen, eventuell kann man da erkennen, ob innerhalb der 5 Sekunden noch ein weiterer Dienst gestartet wurde, mit dem wir hier garnicht rechnen. Alternativ: In der Datei müsste für jeden aufgetretenen Fehler (also bis zu 5 Mal) eine Liste der laufenden Dienste sein. Sind die einzelnen Abschnitte identisch oder ist da im Laufe der Zeit noch irgendein Dienst hinzugekommen?

Kann es sein, dass von dem Zeitpunkt, zu dem der Dienst gestartet wurde, bis zu dem Zeitpunkt, an dem er erstmalig Anforderungen annehmen kann, ein paar Sekunden vergehen? Er muss ja auch noch auf die Datenbankdatei zugreifen, die Datenbank öffenen, eventuell Logdateien erstellen, eine Konsistenzprüfung auf die Datenbankdatei machen, oder... Dies könnte dann dazu führen, dass der erste Zugriff erst nach Dienststart + x Sekunden möglich ist, wobei wir hier mit 5 Sekunden halt lange genug gewartet haben, was sich aber bei längerer Nutzung und Vergrößerung das Datenbank ändern könnte.

Benutzt Dein Programm irgendeine Laufwerksverbindung oder sonstige Resourcen ausserhalb des Rechners, auf dem das Programm läuft?

Dashier könnte man auch etwas verständlicher lösen, statt:
Delphi-Quellcode:
if iError > 5 then begin
  ShowMessage('Die Datenbank konnte mit ' + IntToStr(iError) + ' Versuchen nicht geöffnet werden.
  + #13 + 'Die letzte Fehlermeldung lautete: ' + sMessage);
  Application.Terminate; // <- oder sonstige Fehlerbehandlung.
 end;
wäre wohl besser:
Delphi-Quellcode:
if not QryMB256PLUS.Active then begin
  ShowMessage('Die Datenbank konnte mit ' + IntToStr(iError) + ' Versuchen nicht geöffnet werden.
  + #13 + 'Die letzte Fehlermeldung lautete: ' + sMessage);
  Application.Terminate; // <- oder sonstige Fehlerbehandlung.
 end;
  Mit Zitat antworten Zitat