Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   FreePascal Mit SQLite verbinden, wenn Prog mit Windows startet? (https://www.delphipraxis.net/182803-mit-sqlite-verbinden-wenn-prog-mit-windows-startet.html)

AlexII 19. Nov 2014 11:49

Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection

Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich habe folgendes Problem: wenn ich meine Anwendung mit Windows über die Registry starten lasse, kann diese sich irgendwie nicht mit der DB Verbinden bzw. die SQLite3Connection nicht laden. Die Fehlermeldung heißt, siehe Screenshot. Sleep mit mehrere Minuten hilft auch nicht, es kann also nicht an dem liegen, dass Windows noch nicht alle Dienste geladen hat.

Dieser Code hilft auch nicht:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
  var
  i: Integer;
begin
  if FileExists('D:\myProg\db.db') then
  begin

    for i := 0 to 1 do
    begin

      if SQLite3Connection1.Connected then
      begin
        ShowMessage('Verbunden!');
      end
      else begin
        ShowMessage('Nicht verbunden!');
        Sleep(20000);
        SQLite3Connection1.Open;
      end;

    end;
  end else ShowMessage('DB-Datei nicht vorhanden!');
end;
Bin für jede Hilfe dankbar!

Der schöne Günther 19. Nov 2014 13:03

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Zitat:

Zitat von AlexII (Beitrag 1280319)
es kann also nicht an dem liegen, dass Windows noch nicht alle Dienste geladen hat

Da wäre ich mir spontan nicht so sicher: Ich kann jetzt nicht herauslesen, ob die sqlite.dll statisch gelinked oder dynamisch eingebunden wird. In ersterem Fall könnte es ja vielleicht sein, dass direkt bei Anwendungsstart durch das Einbinden der DLL irgendwelche Initialisierungsdinge ablaufen und für die ist es noch viel zu früh sodass alles was später darauf aufbaut, fehlschlägt.

Bekommst du in der gleichen laufenden Anwendung denn später die Datenbank noch auf?

AlexII 19. Nov 2014 13:14

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1280328)
Zitat:

Zitat von AlexII (Beitrag 1280319)
es kann also nicht an dem liegen, dass Windows noch nicht alle Dienste geladen hat

Da wäre ich mir spontan nicht so sicher: Ich kann jetzt nicht herauslesen, ob die sqlite.dll statisch gelinked oder dynamisch eingebunden wird. In ersterem Fall könnte es ja vielleicht sein, dass direkt bei Anwendungsstart durch das Einbinden der DLL irgendwelche Initialisierungsdinge ablaufen und für die ist es noch viel zu früh sodass alles was später darauf aufbaut, fehlschlägt.

Bekommst du in der gleichen laufenden Anwendung denn später die Datenbank noch auf?


Ja manuell startet es immer. Manuell kann ich es sofort nach der Anmeldung starten, automatisch startet es auch nach Minuten nicht.

Der schöne Günther 19. Nov 2014 13:22

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Nein, das meine ich nicht. Ich meinte: Dein Programm im Registry-Autostart. Es bekommt im ersten Anlauf die DB nicht auf. Wenn du es nicht beendest, was ist dann? Kriegt man die Datenbank etwas später doch noch auf?

AlexII 19. Nov 2014 13:25

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1280337)
Nein, das meine ich nicht. Ich meinte: Dein Programm im Registry-Autostart. Es bekommt im ersten Anlauf die DB nicht auf. Wenn du es nicht beendest, was ist dann? Kriegt man die Datenbank etwas später doch noch auf?

Ja das bekomme ich auf, wird wohl von keinem Prozess belegt.

himitsu 19. Nov 2014 13:26

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Grundsätzliche Probleme, welche es geben könnte:

das Arbeitsverzeichnis -> FileExists geht auf absoluten Pfad, aber was ist bei der Connection eingestellt?
Und warum nimmt FileExist nicht einfach den Pfad von der Connection? (doppelte Buchhaltung)

fehlende Rechte -> Wie genau wird dein Programm gestartet?
Das WIE hat auch einfluss auf das Arbeitsverzeichnis.

AlexII 19. Nov 2014 13:36

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das wird wie folgt in die Registry aufgenommen:

Delphi-Quellcode:
// Anwendung in die Registry aufnehmen
procedure DoAppToRun(RunName, AppName: String);
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  with Reg do
   try
    begin
     RootKey := HKEY_CURRENT_USER;
     OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True);
     WriteString(RunName, AppName);
     CloseKey;
    end;
   Finally
   Free;
  end;
end;

...
DoAppToRun('Joblist', ParamStr(0));
...
So sieht da der Eintrag aus, siehe Screenshot.

AlexII 19. Nov 2014 14:22

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Ich hab's... :-D

Nachdem ich die DB-Komponenten im Objektinspektor auf Werkseinstellung gesetzt habe und die ganzen Einstallungen im Code festgelegt habe, läuft alles wie geschmiert.

Delphi-Quellcode:
SQLite3Connection1.DatabaseName := 'D:\myProg\db.db';
SQLTransaction1.DataBase := SQLite3Connection1;
SQLQuery1.Transaction := SQLTransaction1;

Auf die visuellen Komponente kann man sich also nicht immer verlassen, oder wie kann man das hier erklären?

Andreas L. 19. Nov 2014 19:50

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Zitat:

Zitat von AlexII (Beitrag 1280345)
Auf die visuellen Komponente kann man sich also nicht immer verlassen, oder wie kann man das hier erklären?

Das liegt sehr wahrscheinlich daran, dass beim aufrufen deines Codes (in FormCreate) die Eigenschaften der Komponenten (also auch SQLite3Connection1.DatabaseName) noch nicht (alle) gesetzt bzw. aus der DFM geladen wurden. Und das sleep() hilft nicht, weil der Lade-/Init-Vorgang nicht parallel zu FormCreate abläuft. D. h. sleep, etc. verzögert dies...

Sir Rufo 19. Nov 2014 19:58

AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
 
Ist eigentlich der typische Fehler, wenn die Anwendung erzeugt wird und die Active-Eigenschaft im OI auf
Delphi-Quellcode:
true
belässt.

Bevor FormCreate aufgerufen wird, werden alle Komponenten erzeugt und die Eigenschaften gesetzt (Active=true), tja was passiert dann wohl, wenn der Pfad zur DB nicht stimmt ;)

Also eigene Schludrigkeit ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.
Seite 1 von 2  1 2      

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