Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Leere Vorgabedatenbank (https://www.delphipraxis.net/192587-leere-vorgabedatenbank.html)

sko1 3. Mai 2017 08:41

Datenbank: SQLite • Version: ? • Zugriff über: Firemonkey

Leere Vorgabedatenbank
 
Hallo,

in meinem Windows/Android-Projekt arbeite ich mit einer SQLite-Datenbank.
Diese wird bei Installation als leere Datenbank (ohne Tabellen usw.) angelegt und dann im Programm die Tabellen usw. erzeugt.

Jetzt bin ich am Suchen wie man
a) die leere Datenbank gleich irgendwie in die EXE verpacken kann oder
b) eine leere Datenbank per Code erstellen kann, bisher habe ich dafür den "DB Browser für SQLite" verwendet.

Ciao
Stefan

Union 3. Mai 2017 08:47

AW: Leere Vorgabedatenbank
 
Die Datenbank wird beim Öffnen der Verbindung automatisch erstellt, falls sie nicht existiert. Das Vorgehen mit einer leeren Vorgabedatenbank war eigentlich überflüssig.

DeddyH 3. Mai 2017 08:50

AW: Leere Vorgabedatenbank
 
Ich mache es immer so, dass ich eine TFDConnection einrichte und dieser zur Laufzeit (BeforeConnect) den Datenbanknamen zuweise.
Delphi-Quellcode:
procedure TMeinDataModule.LocalConnectionBeforeConnect(Sender: TObject);
const
  LOCALDBNAME = 'MeineDB.s3db';
begin
  LocalConnection.Params.Values['Database'] :=
    TPath.Combine(ConfigPath, LOCALDBNAME);
end;

Der schöne Günther 3. Mai 2017 09:05

AW: Leere Vorgabedatenbank
 
Ich nehme das Freeware-Tool meines Vertrauens "SQLite Expert" und lege damit meine gewünschte Struktur an. Zeitgleich kann er mir ein Buildscript daraus generieren, also wie man diese Tabellen und Regeln per SQL anlegen würde. Das kann aber sicherlich jedes andere Tool auch.

Wenn beim Programmstart die Datenbank nicht existiert nimmt das Programm dieses hinterlegte Skript und führt es aus. Dann habe ich meine erwartete Tabellenstruktur und bin fertig. Optional könnte dieses Buildskript schon Beispieldaten enthalten wenn man z.B. einen Demo-Modus haben möchte...


Praktisch habe ich eine Variable
Delphi-Quellcode:
mustRunBuildScript
die im OnBeforeConnect-Event der Verbindung auf True gesetzt wird wenn die Datenbank nicht existiert. Im OnAfterConnect-Event wird dann, wenn die Variable true ist, das Buildscript über
Delphi-Quellcode:
TFDConnection.ExecSQL(..)
ausgeführt.

Delphi-Quellcode:
procedure TStorageModuleSqlite.runBuildScript();
const
   fileName = 'buildscript_sqlite.sql';
var
   filePath: String;
begin
   filePath := TPath.Combine('...', fileName);
   connection.ExecSQL( TFile.ReadAllText(filePath) );
   mustRunBuildScript := False;
end;

sko1 3. Mai 2017 09:08

AW: Leere Vorgabedatenbank
 
Zitat:

Zitat von Union (Beitrag 1369957)
Die Datenbank wird beim Öffnen der Verbindung automatisch erstellt, falls sie nicht existiert. Das Vorgehen mit einer leeren Vorgabedatenbank war eigentlich überflüssig.

OOOOOHHHHHH!
Da mach ich "Kopfstände" und es ist sooo einfach! :)

Vielen herzlichen Dank für's "Brett vor dem Kopf entfernen"!

Unter Windows wird die DB problemlos erstellt, Android teste ich dann in Folge

Ciao
Stefan

p80286 3. Mai 2017 13:04

AW: Leere Vorgabedatenbank
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1369959)
Ich nehme das Freeware-Tool meines Vertrauens "SQLite Expert" und lege damit meine gewünschte Struktur an. Zeitgleich kann er mir ein Buildscript daraus generieren, also wie man diese Tabellen und Regeln per SQL anlegen würde. Das kann aber sicherlich jedes andere Tool auch.

Wenn beim Programmstart die Datenbank nicht existiert nimmt das Programm dieses hinterlegte Skript und führt es aus. Dann habe ich meine erwartete Tabellenstruktur und bin fertig. Optional könnte dieses Buildskript schon Beispieldaten enthalten wenn man z.B. einen Demo-Modus haben möchte...


Praktisch habe ich eine Variable
Delphi-Quellcode:
mustRunBuildScript
die im OnBeforeConnect-Event der Verbindung auf True gesetzt wird wenn die Datenbank nicht existiert. Im OnAfterConnect-Event wird dann, wenn die Variable true ist, das Buildscript über
Delphi-Quellcode:
TFDConnection.ExecSQL(..)
ausgeführt.

Delphi-Quellcode:
procedure TStorageModuleSqlite.runBuildScript();
const
   fileName = 'buildscript_sqlite.sql';
var
   filePath: String;
begin
   filePath := TPath.Combine('...', fileName);
   connection.ExecSQL( TFile.ReadAllText(filePath) );
   mustRunBuildScript := False;
end;

Abgesehen davon, daß ich das gut finde, prüfst du auch ob die Datenbank, die du findest, falls eine vorhanden sein sollte, auch die richtige ist?

Gruß
K-H

Der schöne Günther 3. Mai 2017 13:06

AW: Leere Vorgabedatenbank
 
Verstehe ich nicht: Wie ist denn eine Datenbank die "richtige"? Oder was wäre eine "falsche" und warum sollte sie dort liegen wo das Programm sie erwartet?

p80286 3. Mai 2017 16:56

AW: Leere Vorgabedatenbank
 
Na die richtige ist die, mit den erwarteten Tabellen und Feldern in den Tabellen.
z.B. könnten Versionsunterschiede (zus. Felder oder fehlende Felder / Typänderungen) Dein Programm ja etwas verwirren.

Gruß
K-H

Der schöne Günther 3. Mai 2017 17:12

AW: Leere Vorgabedatenbank
 
Das meinst du. Guter Punkt!

Ich habe eine Tabelle in welcher die "Versionsnummer" drin steht. Wenn die Datenbank-Version jetzt z.B. "1.4" ist, die Software nach einem Update aber nun mit einer Version "1.5" arbeiten möchte ... ja, dann führt sie noch ein Skript aus welches die Datenbank-Struktur von "1.4" auf "1.5" updatet.

sko1 4. Mai 2017 05:58

AW: Leere Vorgabedatenbank
 
Genau so mache ich das auch und dank der Tips hier muss ich keine leere Datenbank mehr als Grundausstattung "mitliefern"...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 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