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 3 von 3     123   
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 12:28
Hallo zusammen,

Also, mit dem Code von Nahpets, läuft es. Allerdings ist mit das nicht genau klar warum. Wenn ich deinen Code richtig verstanden hab, bedeutet dieser Teil, das bei einer Exception (also Fehler) der die Error var bis auf 5 hochgezählt wird. Über den Befehl WinExec, wird das net start durchgeführt, und eine TXT Datei erstellt, mit den jeweiligen gestarteten Diensten.
Was ich nicht versteh, sind die Befehle e : Exception (was ist e????), sMessage := e.Message (was ist sMessage und e.Message)

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;
Bei dem folgenden Code denke ich, zu wissen, das folgendes passiert. Ist die QryActiv oder der Fehler Größer 5 werden. falls
vorhanden Fehlermeldungen ausgegeben. Aber nur in dem Fall von Error <5.

Bei Activer Qry wid das Programm fortgesetzt.

Delphi-Quellcode:
    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;
Damit, müsste das Problem zwar gelößt sein, aber wo der Fehler genau gelegen hat, würde ich totzdem gerne wissen. Wisst Ihr das jetzt, oder müsste ich dafür noch was prüfen.


Danke aber schon mal 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
 
#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
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 15:23
Ja, das habe ich soweit verstanden. Ich musste allerdings, die Delete Funktion der Datei entfernen, sonst war nach Programmstart keine Datei mehr enthalten...

Delphi-Quellcode:
  if not QryMB256PLUS.Active then begin
    iError := 0;
    //DeleteFile('c:\netstart.txt'); // eine temporäre Logdatei, kann bei Funktion des Programmes entfallen.
    Repeat
Im Anhang, habe ich die Datei, in der allrdings nur 1 mal Net Start enthalten ist. Ich habe mit der
  WinExec('CMD.EXE /C "net start >> c:\netstart.txt"',SW_HIDE); Bislang noch nicht gearbeitet, daher weiß ich nicht, ob die Dateien angehängt odern überschrieben werden. Da ich es mehrmals durchgeführt habe, vermute ich das diese überschrieben wird.

Gruß Jens
Angehängte Dateien
Dateityp: txt netstart_167.txt (1,6 KB, 3x aufgerufen)
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 15:29
Ich habe übrigens mal ein

ShowMessage(IntToStr(iError)); vor das schreiben der Datei gepackt, und das wir auch nur einmal ausgeführt.
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
 
#25

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 15:43
Hallo Jens,

beim Programmstart wird die Datei (soweit vorhanden) gelöscht.
Pro Programmstart wird sie einmal erstellt, sie sollte nach dem Programmende eigentlich erhalten bleiben. Wenn in der Datei nur einmal die Liste der Dienste ist, bedeutet dies, dass das Öffnen der Query beim zweiten Versuch bereits erfolgreich ist.
Dein Test mit ShowMessage führt ja auch zu dieser Erkenntnis.

Momentan gehe ich davon aus, dass die Datenbank zum Starten ein bisserl Zeit benötigt. Die Dienste laufen also schon und müssen noch irgendwas machen. Es erscheint mir momentan am sinnvollsten, wenn Du am Anfang des Programmes ein Sleep(5000) für 5 Sekunden Pause einbaust und dann die Routine so läßt, wie sie jetzt ist. Eventuell könntest Du das Sleep innerhalb der Repeat-Schleife auch noch auf 5000 setzen. Damit würde das Programm insgesammt ca. 30 Sekunden warten, bevor es mit einer Fehlermeldung abbricht. Das halte ich für akzeptabel.

Das DeleteFile und das WinExec kannst Du entfernen, die brauchen wir nicht mehr. Reibungsloser, als mit der derzeitigen Variante, wirst Du den Programmstart aus dem Autostart vermutlich nicht hinbekommen. Das Programm muss beim Rechnerstart einfach warten, bis Betriebssystem und Dienste richtig laufen.

Code:
net start >> c:\netstart.txt
Die beiden >> bedeuten, dass net start seine Ausgabe an die bereits bestehende c:\netstart.txt anhängt. Sofern die Datei nicht vorhanden ist, wird sie erstellt. Steht hier nur ein >, so wird eine bestehende Datei überschrieben. Es handelt sich hierbei um eine Funktionalität von DOS, die Du auch am DOS-Prompt nachvollziehen könntest.
WinExec ist nur zum Start eines anderen Programmes da und hat keinen Einfluß auf das Erstellen der Datei.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 15:56
Danke dir und natürlich allen anderen, für die nette und gute Hilfe.

Ich werde meine Routine dann jetzt noch anpassen. Und gegebenenfall´s wenn es bei einer großen Datenbank zu erneutem Fehler kommen sollte, die Zeit in der Repeatschleife anpassen.

Aber, mal noch ne andere Frage, es wurde in dem Thread, auf den Du hingewiesen hast, das mit LOCALHOST erwähnt.

LOCALHOST

Die Verbindung habe ich über das LOCALHOST aufgebaut.

und zwar momentan direkt in der TZConnection von Zeos...

LOCALHOST:\Delphi\Projekte\PrintSave\V1.15\Secur dat.fdb

Ich wollte die Zuweisung später über die Einstllungsoberfläche von meinem Progamm machen, aber halt beim Laden von meinem Programm diesen Wert aus einer INI Datei oder so direkt laden lassen.

Nicht das der Fehler von der Zuweisung der Datenbank kommt. Und ich dann wohlmöglich wieder das selbe Problem habe.

Später muss ich die Datenbank ja wahrscheinlich auch an einen ganz anderen Ort als das Programmverzeichnis legen
(Schreibrechte und so)
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
 
#27

Re: SQL Fehler, wenn Exe in Autostart

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

von dem Thema habe ich jetzt höchstwahrscheinlich keine Ahnung. Vermutlich muss die Pfadangabe in der Form
Code:
Servername:pfadangabe
erfolgen (da befrag bitte mal die Datenbankdoku). Hier könnte ich mir vorstellen, dass der Zugriff beim Rechnerstart dann etwas länger dauert, da ja auch noch Verbindungen zu anderen Rechnern hergestellt werden müssen.

Wenn Du diese Angabe in eine INI-Datei auslagern willst, dann spendiere der INI-Datei doch auch noch eine Angabe zu dem Wert für Sleep, so dass Du das auch konfigurieren kannst, falls die 5 Sekunden nicht reichen oder deutlich zuviel sein sollten. Und wenn Du dann auch noch den Wert für iError konfigurierbar machst, kannst Du die Anzahl der Versuche zum Öffnen der Tabelle auch noch von ausserhalb des Programmes steuern. Dann bist Du in Bezug auf den Workaround auf der sicheren Seite.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 16:13
Danke,

das werde ich so machen. Also besten Dank. Würde mich gerne Revangieren, denke aber das das noch ein bißchen dauert, bis ich soweit bin.

Gruß Jens und nochmal danke.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#29

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 16:15
Zitat von Jens Hartmann:
Danke,

das werde ich so machen. Also besten Dank. Würde mich gerne Revangieren, denke aber das das noch ein bißchen dauert, bis ich soweit bin.

Gruß Jens und nochmal danke.
Da siend wir hier kommunistisch, jeder gibt was er im Stande ist
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

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

Re: SQL Fehler, wenn Exe in Autostart

  Alt 13. Mär 2009, 16:49
Na, das denke ich mache ich schon. Ich meinte ja auch bis ich nahpets mal helfen kann.

In der Beziehung bin ich Eurer Meinung

Gruß

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 20:57 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