AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Fehler, wenn Exe in Autostart
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Fehler, wenn Exe in Autostart

Ein Thema von Jens Hartmann · begonnen am 11. Mär 2009 · letzter Beitrag vom 13. Mär 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#11

Re: SQL Fehler, wenn Exe in Autostart

  Alt 11. Mär 2009, 20:34
Danke schon mal für die vielen antworten. Ich habe jetzt folgende Routine geschrieben.

Delphi-Quellcode:
//Abfrage in der OnCreate von Form1
if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
    VSTfüllen;
    PDatenbankdienst.Caption := 'Datenbank gestartet';
    PDatenbankdienst.Color := clLime;
  end
  else
  begin
    PDatenbankdienst.Caption := 'Datenbank wird gestartet';
    PDatenbankdienst.Color := clred;
    TAufDienstWarten.Enabled := true;
    TTimeOutDienst.Enabled := true;
  end;

//Timer 1 Datenbank Dienst wird im 1 Sec. Takt abgefragt
procedure TForm1.TAufDienstWartenTimer(Sender: TObject);
begin
  if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
    begin
      VSTfüllen;
      TAufDienstWarten.Enabled := false;
      TTimeOutDienst.Enabled := false;
    end;
end;

//Timer 2 Datenbank wird als nicht geöffnet angegeben. TimeOut Fehler
procedure TForm1.TTimeOutDienstTimer(Sender: TObject);
begin
  ShowMessage('Der Datenbankdienst konnte nicht gestartet werden'+#13#10+'Bitte starten Sie das Programm neu');
  TAufDienstWarten.Enabled := False;
  TTimeOutDienst.Enabled := False;
end;

//VSTFüllen wird nur bei gestartetem Dienst über Timer1 ausgeführt, jedoch hier nochmal die Abrage, falls die Funktion
//später irgendwann nochmal von einer anderen Stelle im Programm aufgerufen wird.
procedure TForm1.VSTFüllen;
var
  Daten : TOMB256PLUS;
  Count : Integer;
begin
if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
  if not QryMB256PLUS.Active then
    QryMB256PLUS.Open;
Habe das ganze dann ausprobiert, in dem ich den Dienst gestoppt habe und wieder gestartet habe. Funktioniert dann auch.
Aber beim Windows Start immer noch nicht. Ich vermute das ein anderer Dienst abgefragt wird, kann das sein ?
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#12

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 10:01
Hallo,
Zitat von Jens Hartmann:
Habe das ganze dann ausprobiert, in dem ich den Dienst gestoppt habe und wieder gestartet habe. Funktioniert dann auch.
Aber beim Windows Start immer noch nicht. Ich vermute das ein anderer Dienst abgefragt wird, kann das sein ?
'ne, kann eigentlich nicht sein. Das manuelle Stoppen und Starten des Dienstes könnte schneller funktionieren, als beim Rechnerstart. Was passiert, wenn Du den Dienst manuell stoppst, das Programm startes, den Dienst manuell startest. Hier würde ich vermuten, dass das am ehesten an das Problem beim Autostart herankommt.

Wo liegt das Programm? Hat es beim Start aus dem Autostart das gleiche Arbeitsverzeichnis wie beim "normalen" start oder kommt es hier eventuell mit dem Arbeitspfad nicht zurecht, so dass ein anderer Fehler auftritt, als eigentlich vermutet. Sprich: Wenn der Dienst läuft und Du startest das Programm über das Startmenü/Programme/Autostart. Geht das fehlerfrei?

Wie hast Du das Timerinterval gesetzt? Ist das ausreichend lang? Hier würde ich als Wartezeit eher Minuten als einige Sekunden setzen. Bei meinem Rechner vergehen locker 2 bis 3 Minuten, bevor ich sicher auf alles zugreifen kann, auch wenn die Oberfläche lange vorher voll funktionsfähig ist.

Wenn Du in der DOS-Box net start eingibst, solltest Du dort den korrekten Namen des zu überprüfenden Dienstes finden (wenn der Dienst gestartet ist). Die dort erscheinende Zeichenfolge musst Du dann bei ServiceGetStatus abfragen.
Die Art, wie Du das realisiert hast, erscheint mir korrekt. Momentan sehe ich nur drei mögliche Fehler: Falscher Dienstname in der Abfrage, zu kurze Wartezeit bis zum Dienststart oder ein anderer Fehler, der nur beim Aufruf aus dem Autostartordner auftritt.

Wenn das alles irgendwie nicht weiterhilft, so starte das Programm aus der Autostart heraus mal bitte mit folgender Batchdatei:
Code:
@echo off
:start
@echo on
net start | find "DeinDienstName"
@echo off
set myError=%ERRORLEVEL%
echo Fehlercode von Find = %myError%
if "%myError%"=="1" echo Der Dienst wurde noch nicht gestartet
if "%myError%"=="1" Pause
if "%myError%"=="1" goto start
echo Start Deines Programmes
:DeinProgrammOhneDoppelpunktDavor.exe
set myError=
und schau mal, ob nach endlicher Zeit und endlichem Betätigen von AnyKey Dein Programm so korrekt gestartet werden kann.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#13

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 17:46
Hallo nahpets,


Also, ich habe alle deine Vorschläge schön durchgearbeitet, leider ohne Erfolg. Diese ganze Sache muss irgendwo anders her kommen.

Zitat:
Was passiert, wenn Du den Dienst manuell stoppst, das Programm startes, den Dienst manuell startest. Hier würde ich vermuten, dass das am ehesten an das Problem beim Autostart herankommt.
Funktioniert sauber, ohne Fehlermeldung, sogar wenn ich den Dienst erst eine Minute später starte.

Zitat:
Wo liegt das Programm? Hat es beim Start aus dem Autostart das gleiche Arbeitsverzeichnis wie beim "normalen" start oder kommt es hier eventuell mit dem Arbeitspfad nicht zurecht, so dass ein anderer Fehler auftritt, als eigentlich vermutet. Sprich: Wenn der Dienst läuft und Du startest das Programm über das Startmenü/Programme/Autostart. Geht das fehlerfrei?
Das Programm liegt in folgendem Verzeichnis...

D:\Delphi\Projekte\PrintSave\V1.15\Alarmanlage.exe
in diesem Verzeichns liegt auch die Datenbank usw.
Habe es allerdings auch komplett mit Laufwerk C:\Programm\HU\PrintSave probiert. Der gleiche Fehler..

Ja, starte ich das Programm aus "Startmenü/Programme/Autostart" bei laufendem Dienst, geht das ohne Fehler.

Zitat:
Wie hast Du das Timerinterval gesetzt? Ist das ausreichend lang? Hier würde ich als Wartezeit eher Minuten als einige Sekunden setzen. Bei meinem Rechner vergehen locker 2 bis 3 Minuten, bevor ich sicher auf alles zugreifen kann, auch wenn die Oberfläche lange vorher voll funktionsfähig ist.
Also, der Timer zur Abfrage ob der Dienst läuft sitzt auf 1 Sekunde. Und der Timer für die Timeout Funktion auf 10min. Jedoch, wäre es auch egal, wenn der Timeout Timer auf 10 sec. stände, da ich ja eingebaut habe. das die Datenbank bei nicht vorhandenem Dienst gar nicht erst geöffnet wird.

Delphi-Quellcode:
//VSTFüllen wird nur bei gestartetem Dienst über Timer1 ausgeführt, jedoch hier nochmal die Abrage, falls die Funktion
//später irgendwann nochmal von einer anderen Stelle im Programm aufgerufen wird.
procedure TForm1.VSTFüllen;
var
  Daten : TOMB256PLUS;
  Count : Integer;
begin
if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
  if not QryMB256PLUS.Active then
    QryMB256PLUS.Open;
Zitat:
enn Du in der DOS-Box net start
Die Dienste, kann ich ja auch unter Verwalten einsehen, Es gibt 2 Dienste der Firebird, allerdngs sind die abhängig von einander und werden über den selben Name gestartet (Abfrage ist somit für mich identisch)

Zitat:
und schau mal, ob nach endlicher Zeit und endlichem Betätigen von AnyKey Dein Programm so korrekt gestartet werden kann.
Mit der Batch Datei, habe ich den selben Fehler.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#14

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 18:06
Hallo,

das verstehe ich jetzt irgendwie garnicht mehr.

Ändere bitte mal die Batchdatei:
Code:
echo Start Deines Programmes
d:
cd D:\Delphi\Projekte\PrintSave\V1.15\
Alarmanlage.exe
set myError=
Bleibt der Fehler dann bestehen?

Wenn ja, häng' bitte mal 'nen Screenshot... von der Fehlermeldung mit hier rein.
Kannst Du eventuell im Programm in eine Textdatei mitloggen, welche Schritte durchgeführt werden, so ala
Code:
starte formcreate
beende formcreate
für alle Methoden, die beim Programmstart aufgerufen werden, um dahinter zu kommen, wo genau der Fehler passiert. Oder bau' Dir an allen wichtigen Stellen ein ShowMessage ein, mit dem Du nachvollziehen kannst, bis wo Du im Programm kommst. Momentan kann ich da nur im Neben stochern. Wenn Du da ein paar Infos zusammenbekommen könntest, würde ich mir das morgen noch mal anschauen.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#15

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 19:02
Hallo nahpets,

Zitat:
Bleibt der Fehler dann bestehen?
Ja, der Fehler ist der selbe. Der Screenshot der Fehlermeldung befindet sich schon im ersten Post.

Zitat:
Kannst Du eventuell im Programm in eine Textdatei mitloggen, welche Schritte durchgeführt werden, so ala
Zitat:
Code: markieren
Delphi-Quellcode:
 
starte formcreate
beende formcreate
Das habe ich noch nie gemacht, wie meinst Du das. Einfach so die Art SavetoFile oder wie.

Habe das jetzt mit ShowMessage gemacht, und zwischen ShowMessage('2'); und ShowMessage('2b'); bring er den Fehler, das heißt genau bei

QryMB256PLUS.Open;

Delphi-Quellcode:

procedure TForm1.VSTFüllen;
var
  Daten : TOMB256PLUS;
  Count : Integer;
begin
if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
  if not QryMB256PLUS.Active then
  ShowMessage('2');
    QryMB256PLUS.Open;
    ShowMessage('2b');
und wie man sieht, kann es nicht der Firebird Dienst sein, weil

if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then der ist ja 4 also gestartet. Aber woher kommt der Fehler, Klicke ich die ShowMessage Meldungen nur langsam durch, so ala

1 Sek. Klick, 1 Sek. Klick etc. Startet mein Programm normal.

Starte ich nicht mit Autostart, sondern Manuell so 5 Sek, nach dem man glaubt Windows ist fertig. kommt kein Fehler.
Starte ich nicht mit Autostart, sofort, nachdem ich die Maus Bedienen kann, erscheint der Fehler, somit kann es nicht die Autostart sein.

Genau das gleiche ist ja auch, wenn ich die ShowMessage so ala 1 MSek Klick, 1 MSek Klick etc bestätige, da kommt der Fehler wie gesagt ja bevor ShowMessage 2b erscheint.

Gruß

Jens

PS: Es gibt doch soviel Programm die die Autostart nutzen.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#16

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 19:59
Füge mal ein 'Application.Processmessages;' in Deine Warteschleife ein. // Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#17

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 23:05
Sorry, das hat leider auch nichts gebracht, hatte ich bereits probiert.

Trotzdem Danke

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#18

Re: SQL Fehler, wenn Exe in Autostart

  Alt 12. Mär 2009, 23:19
Hallo,

wie einige schon geschrieben habn hast du keine Garantie darauf, was zuerst gestartet wird, der Service oder die Datenbank.
Du hast aber beim Service die Möglichkeit einen Abhängigkeit von einem anderen Programm zu definieren. Das sollte dir dann helfen.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#19

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 08:41
Hallo,
Zitat:
wie einige schon geschrieben habn hast du keine Garantie darauf, was zuerst gestartet wird, der Service oder die Datenbank.
Du hast aber beim Service die Möglichkeit einen Abhängigkeit von einem anderen Programm zu definieren. Das sollte dir dann helfen.
Das sehe ich ein wenig anders, wenn ich doch in meinem Programm vor dem Datenbankstart, den Dienst abfrage, wie in #11 beschrieben, ist es doch egal, ich frage ja schließlich vor dem öffnen der Datenbank ob der Dienst gestartet ist.

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#20

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 09:16
Hallo,

da scheint es ja irgendein "Zeitproblem" zu geben.

Versuche es doch mal bitte in der Art:
Delphi-Quellcode:
var
     iError : Integer;
     sMessage : String;

...

if ServiceGetStatus('', 'FirebirdGuardianDefaultInstance') = 4 then
  begin
  if not QryMB256PLUS.Active then begin
    iError := 0;
    DeleteFile('c:\netstart.txt'); // eine temporäre Logdatei, kann bei Funktion des Programmes entfallen.
    Repeat
      Try
        QryMB256PLUS.Open;
      Except
        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;
      end;
    until QryMB256PLUS.Active or (iError > 5); // <- bitte ausprobieren, ob 5 reicht oder eventuell höher sein muss.
    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;
    
...
Beim WinExec sollte eine Datei erstellt werden, die jeweils die aktuell laufenden Dienste enthält. Kannst Du in dieser Datei zwischen den einzelnen Aufrufen einen Unterschied feststellen? Dann könnte dort eventuell eine Abhängigkeit zwischen Diensten bestehen, die Du bei Deiner Dienstprüfung mit berücksichtigen musst.

Für eine Fehlerprotokollierung schau bitte mal hier: ErrorLog
Zitat von Jens Hartmann:
Das sehe ich ein wenig anders, wenn ich doch in meinem Programm vor dem Datenbankstart, den Dienst abfrage, wie in #11 beschrieben, ist es doch egal, ich frage ja schließlich vor dem öffnen der Datenbank ob der Dienst gestartet ist
Jain, in Bezug auf den Dienst dürftest Du recht haben, es gibt aber wohl noch eine andere Abhängigkeit, die momentan keiner von uns kennt.

Zeig' uns doch mal bitte die Ergebnisse von net start einmal mit den laufenden Datenbankdiensten, einmal ohne die Datenbankdienste. Eventuell gibt es da ja noch einen Unterschied mehr, als nur den von Dir abgefragten Dienst.

Hilft eventuell das weiter? Re: Firebird "SQL Error Code -904" Bitte um Hilfe
oder Re: Firebird und Vista
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz