Ausliefern von Datenbankscripten in Programmen

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.

Ausliefern von Datenbankscripten in Programmen

Beitragvon Lemmy » 7. Jan 2019, 17:18 Ausliefern von Datenbankscripten in Programmen

Servus,

ich habe hier ein "kleines" Programm, das insbesondere Daten importiert. Dazu wird bei Bedarf auch die Datenbank angepasst (Felder hinzugefügt, StoredProcedures angepasst).

Die StoredProcedures wurden dabei lange Zeit aus Textdateien in eine Pascaldatei zusammengefasst mit je einer Funktion pro StoredProcedure die den DDL für die SP zurück geliefert hat. Eine weitere Methode ist alle Funktionen durch gelaufen und hat die SQL die zurück gegeben wurden ausgeführt.

Das Zusammenbauen der Unit ist im Buildprozess passiert. Das hat dazu geführt, dass aber die komplette Formatierung (Leerzeilen, Einrückung,..) aus den SPs verschwunden sind.

Ich habe das irgend wann umgebaut in ein Resourcefile, das hat deutlich geschmeidiger funktioniert, allerdings musste ich das Projekt von Delphi auf Lazarus portieren, weil die neue Zielplattform Linux ist. Ich könnte zwar mit Windres mit den Resourcen weiter machen, allerdings gibt es 2 Probleme:
1. Zielplattform ist Centos 7 und ich habe es noch nicht geschafft dort Windres installiert zu bekommen.
2. WIndows-Resourcen und Linuxplattform - irgend wie passt das nicht zusammen....

Welche Option habe ich sonst noch. Wie macht ihr das?

eine separate Datei mit den SQL in irgend einem Format wäre noch eine Option (JSON/XML Whatever), das macht das Updateprozedere aber wieder etwas komplexer.

Grüße
Lemmy
 
Beiträge: 27
Registriert: 23. Feb 2017, 06:18

Beitragvon MacWomble » 7. Jan 2019, 21:07 Re: Ausliefern von Datenbankscripten in Programmen

Meine Devise:
Entweder echtes Linuxprogramm erstellen oder eben gar nicht ... nach Möglichkeit plattformunabhängig bleiben!

Die DDLs kanns du doch in sql-files (.sql) vorhalten und aus dem Programm nach Bedarf einlesen und abarbeiten lassen.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
Lazarusforum e. V.
 
Beiträge: 792
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.1 Cinnamon / CodeTyphon LAB Version 6.90 / FP 3.3.1 Rev 42237 | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon MmVisual » 8. Jan 2019, 22:05 Re: Ausliefern von Datenbankscripten in Programmen

Mit Lazarus kann man eine Ressourcendatei erstellen:
Code: Alles auswählen
LazRes.exe MeineRessorce.lrs MeineDatei.txt=Meins


Und dann die mit Linken in das Projekt:
Code: Alles auswählen
initialization
{$I MeineRessorce.lrs}
 


Und als Stream zur Laufzeit auslesen:
Code: Alles auswählen
 
Uses ..., LResources, ...
 
st := TLazarusResourceStream.Create('Meins', 'TXT');


Diesen Stream kann man in eine TStringList mit LoadFromStream(st) einlesen, oder auch in einem TMemo darstellen. Damit bekommt man alles mit in die EXE gelinkt und hat es zur Verfügung.

Und sollten die Daten größer sein so kann man:
- alle Dateien Zippen
- Das eine ZIP als Ressource wandeln
- zur Laufzeit diese Ressource als Stream laden
- Mit der Komponnete TAbZipKit im RAM das ZIP in einen zweiten TMemoryStream entpacken und dann diesen zweiten Stream weiter verwenden

Funktioniert unter Windows und Linux.
MmVisual
 
Beiträge: 1059
Registriert: 10. Okt 2008, 22:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3) | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon Lemmy » 8. Jan 2019, 22:29 Re: Ausliefern von Datenbankscripten in Programmen

MacWomble hat geschrieben:Meine Devise:
Entweder echtes Linuxprogramm erstellen oder eben gar nicht ... nach Möglichkeit plattformunabhängig bleiben!


sehe ich auch so..
MacWomble hat geschrieben:Die DDLs kanns du doch in sql-files (.sql) vorhalten und aus dem Programm nach Bedarf einlesen und abarbeiten lassen.

wird dann zu kompilziert das auszurollen (ok nicht mein Problem, aber wenn was nicht funktioniert muss ich dann doch wieder ran) - wenn dann eine Datei mit den DDLs drin, sei es als komplettes Script oder als JSON/XML Datei

MmVisual hat geschrieben:Mit Lazarus kann man eine Ressourcendatei erstellen:


hm.. Aber LazRes ist doch "abgekündigt"?

http://wiki.freepascal.org/lazres
Lemmy
 
Beiträge: 27
Registriert: 23. Feb 2017, 06:18

Beitragvon MmVisual » 8. Jan 2019, 22:40 Re: Ausliefern von Datenbankscripten in Programmen

In der aktuellen Lazarus Version geht das noch und in Lazarus V2.0 auch noch. So schnell wird das auch nicht aus Lazaurs verschwinden
MmVisual
 
Beiträge: 1059
Registriert: 10. Okt 2008, 22:54
OS, Lazarus, FPC: Winux (L 1.6 FPC 3) | 
CPU-Target: 32/64Bit
Nach oben

Beitragvon af0815 » 8. Jan 2019, 22:42 Re: Ausliefern von Datenbankscripten in Programmen

LazRes als Ersatz für den Resourcenkompiler ja, aber nicht für andere Zwecke. Es steht dort nur, das es für Lazarus nicht mehr verwendet wird, das ist aber klar, da es einen normalen Resourcencompiler gibt. So nebenbei liefere ich mit diesem auch die nötigen Treiber unter Windows aus, also sollte es für andere Zwecke auch gehen. Man muss nur sehen wie man die Resourcen wieder zurūckwandeln kann.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3655
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon charlytango » 11. Jan 2019, 10:31 Re: Ausliefern von Datenbankscripten in Programmen

MacWomble hat geschrieben:Die DDLs kanns du doch in sql-files (.sql) vorhalten und aus dem Programm nach Bedarf einlesen und abarbeiten lassen.

Lemmy hat geschrieben:wird dann zu kompilziert das auszurollen (ok nicht mein Problem, aber wenn was nicht funktioniert muss ich dann doch wieder ran) - wenn dann eine Datei mit den DDLs drin, sei es als komplettes Script oder als JSON/XML Datei


grübel... was ist an DDL in einer eigenen Datei (.sql-file) kompliziert? Ist im übrigen ja egal wie du die Datei nennst und wenn du meinst dass der User da reinpfuschen könnst kannst die Datei ja auch verschlüsseln.

in größeren Applikationen mache ich das meist so:
Die Datenbank bekommt eine zusätzliche Tabelle, die als einzige Zeile ihre aktuelle Version mitführt.
Die Applikation bekommt eine Konstante, welche die für das Programm nötige DB-Version speichert.
Bei Programmstart wird beides verglichen und ggfs eine Routine gestartet die aus (in einem eigenen Verzeichnies liegenden) Dateien mit DDL-Statements die komplette Datenbank erstellt bzw alle nötigen Änderungen macht samt vorherigen DB-Backup. Diese Funktion ist oft nur mit Administratorrechten des Programms verfügbar.
Wenn ein Programm mit nicht zur aktuellen DB passenden DB-Version gestartet wird verweigert es bis zum DB-Update die Mitarbeit.

gut getestet klappt das seit >20 Jahren ... Ist vielleicht keine Raketentechnik, funktioniert aber verlässlich.
und wenn wirklich was passiert musst du eh selbst ran -- ich mach das dann meistens per Teamviewer et al.


Wäre vielleicht auch ein Anregung für grundlegende Applikationsbedürfnisse hier im Forum Units oder Komponenten zur Verfügung zu stellen, würde das Forum sicher auch aufwerten.

enjoy
charlytango
 
Beiträge: 164
Registriert: 12. Sep 2015, 11:10
Wohnort: Wien
OS, Lazarus, FPC: Laz 2.0.3 FPC 3.2 | 
CPU-Target: Win 32Bit, 64bit
Nach oben

• Themenende •

Zurück zu Datenbanken



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried