![]() |
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:
Bin für jede Hilfe dankbar!
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; |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
Bekommst du in der gleichen laufenden Anwendung denn später die Datenbank noch auf? |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
Ja manuell startet es immer. Manuell kann ich es sofort nach der Anmeldung starten, automatisch startet es auch nach Minuten nicht. |
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?
|
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
|
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. |
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:
So sieht da der Eintrag aus, siehe Screenshot.
// 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)); ... |
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? |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
|
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:
belässt.
true
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 ;) |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
FireDAC kann zwischen Designzeit und Laufzeit unterscheiden. So kann man trotzdem immer ein "Active = True" in der IDE haben, dort testen und alles, im kompilierten Programm ist es dann aber nicht vom Start weg aktiv.
Das nur am Rande. |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
Das habe ich jetzt nicht verstanden... was habe ich falsch gemacht? :roll: |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Wenn du dein Programm zusammenklickst und ein paar Komponenten auf die Form wirfst und dann bei diesen Komponenten etwas einstellst, wie merkt sich das erzeugte Programm das wohl?
Genau, diese Eigenschaften werden gespeichert (wenn abweichend vom Standardwert). Und wann werden die geladen? Genau, immer dann wenn die Form erzeugt wird. Und nun haben wir da eine Datenbank-Verbindungs-Komponente wo die Eigenschaft Active auf True steht. Was passiert dann beim Erstellen? Genau, da wird dann die Verbindung geöffnet ... und wenn der Pfad nicht passt, ja dann knallt es eben (so wie erlebt). Und da das alles vor dem Aufruf von
Delphi-Quellcode:
passiert, kannst du dort reinschreiben was du willst.
TForm.OnCreate
|
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Zitat:
Und außerdem wenn ich das Prog manuell starte funkt doch alles, nur beim Autostart nicht. Und den Unterschied habe ich immer noch nicht verstanden. Wenn ich was falsch mache, dann muss es doch manuell und automatisch nicht funktionieren. Beides nein, oder beides ja. :roteyes: |
AW: Mit SQLite verbinden, wenn Prog mit Windows startet?
Ja, das wundert mich jetzt ehrlich gesagt auch.
Ist das nur bei der sqLite-Datenbank so? Oder tritt das auch auf, wenn du eine einfache Textdatei aus dem gleichen Verzeichnis wie die DB öffnen wolltest? Gibt
Delphi-Quellcode:
vielleicht etwas besonderes aus? Kannst du das mal mitloggen?
ParamStr(0)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz