AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FreePascal Mit SQLite verbinden, wenn Prog mit Windows startet?

Mit SQLite verbinden, wenn Prog mit Windows startet?

Ein Thema von AlexII · begonnen am 19. Nov 2014 · letzter Beitrag vom 19. Nov 2014
Antwort Antwort
Seite 1 von 2  1 2   
AlexII

Registriert seit: 28. Apr 2008
1.707 Beiträge
 
FreePascal / Lazarus
 
#1

Mit SQLite verbinden, wenn Prog mit Windows startet?

  Alt 19. Nov 2014, 11:49
Datenbank: SQLite • Version: 3 • Zugriff über: SQLite3Connection
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!
Miniaturansicht angehängter Grafiken
fehler.png  
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.221 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 19. Nov 2014, 13:03
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?
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.707 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 19. Nov 2014, 13:14
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.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.221 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

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

  Alt 19. Nov 2014, 13:22
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?
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.707 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 19. Nov 2014, 13:25
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.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
35.843 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 19. Nov 2014, 13:26
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.707 Beiträge
 
FreePascal / Lazarus
 
#7

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

  Alt 19. Nov 2014, 13:36
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.
Miniaturansicht angehängter Grafiken
regscreenshot.png  
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.707 Beiträge
 
FreePascal / Lazarus
 
#8

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

  Alt 19. Nov 2014, 14:22
Ich hab's...

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?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Andreas L.

Registriert seit: 23. Mai 2011
Ort: Sulzbach-Rosenberg
293 Beiträge
 
Delphi 10.3 Rio
 
#9

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

  Alt 19. Nov 2014, 19:50
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...
Andreas Lauß
CookieCrumbler Blog
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

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

  Alt 19. Nov 2014, 19:58
Ist eigentlich der typische Fehler, wenn die Anwendung erzeugt wird und die Active-Eigenschaft im OI auf 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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf