SQLite Datenbank wieder in exe integrieren?

  • Hallo Zusammen,

    in meinem Programm habe ich eine SQLite Datenbank integriert, die beim Start aus der exe-Datei auf den PC kopiert wird und beim Schliessen des Programmes wieder gelöscht wird.

    Nun habe ich das Programm angepasst und aktualisiere die Datenbank während der Arbeit mit dem Programm.

    Gibt es eine Möglichkeit, diese aktualisierte SQLite-Datenbank nicht zu löschen, sondern in die exe-Datei zu integrieren damit die aktualisierten Daten erhalten bleiben?

    Danke und Grüsse, Mike

  • In die Exe integrieren evtl. mit Umwegen, jedes Mal neu kompilieren. Deutlich einfacher:

    AutoIt
    FileInstall(".\Equipments.sqlite", ".\Equipments.sqlite", 0)


    und

    AutoIt
    ;	If FileExists(".\Equipments.sqlite") Then FileDelete(".\Equipments.sqlite" )

    damit sollte doch alles geregelt sein.

  • Hallo autoBert,

    danke für Deine Antwort. Ich habe mich etwas unklar ausgedrückt, sorry.

    Die User erhalten eine einzige exe-Datei von mir. Startet ein User das Programm, so wird die in die exe-Datei integrierte (kompilierte) SQLite-DB auf den PC kopiert,
    so daß vom Programm darauf zugegriffen (DELETE, UPDATE, INSERT) werden kann.

    Beim Schliessen des Programmes soll beim User automatisch die aktualiserte SQLite-DB in die exe-Datei integriert/importiert werden, damit beim nächsten Start die
    neuen Daten verfügbar sind.

    Vielen Dank und Grüsse, Mike

  • Naja. Muss er so nicht. Man könnte es an die EXE anhängen, hinter dem QUellcode mit ner Zeichenkette zu filtern, die nicht im Porgramm vorkommt.
    Schwierigkeit -> Dein Programm darf nicht laufen, während der kram in die EXE geschrieben wird, da sonst der Zugriff blockiert wird. Also erstmal die Programmdatei kopieren, dann die kopie ausführen mit parametern. In dem Fall soll das Programm dann warten, bis das andere Programm beendet ist und dann die EXE einlesen, alles hinter der Zeichenkette löschen und die neue Datenbank dort anhängen.
    Anschließend muss es beendet werden und sich selbst löschen.

    Die Eigentliche Frage ist: Warum sollte man das wollen? Das ist nicht sehr Performant, die EXE wird irgendwann riesig,...
    Da wärs einfacher die Datenbank einfach irgendwo in nem Unterordner abzulegen oder so...

    • Offizieller Beitrag

    Den Sinn dahinter verstehe ich auch nicht.
    Es ist doch, im Gegenteil, von Vorteil, wenn man Programm und Daten voneinander trennt.
    So kann man viel besser Backups der Daten machen, die dann auch nicht durch das Programm aufgebläht gespeichert werden müssen.
    Also entweder die Datenbank in ein Unterverzeichnis des Programmverzeichnisses (für eine mobile Version) oder in ein Verzeichnis im Anwendungsordner der Benutzers (für eine installierte Version).
    Abspeichern in die Programm-Exe würde ich auf keinen Fall empfehlen.

  • Seh ich genauso. Macht garkeinen Sinn die DB ständig in aktueller Fassung zu integrieren. Was willst du machen wenn du auch nur eine winzige Änderung am Programm vornehmen musst? Wie willst du dann an all die individuellen DB Änderungen deiner Nutzer kommen wenn du Ihnen die aktualisierte Programmversion zukommen lässt? Dein Programmupdate würde den Nutzercontent dann wohl einfach ignorieren/verwerfen müssen. Ausser du betreibst enormen Aufwand für die Updateroutine wie oben skizziert. Dabei wirst du je nach Virenscanner aber auf Probleme stossen.

    Wenn du die eigentliche Standard DB die du mitlieferst nicht zugänglich machen willst bietet es sich noch an die Änderungen des Benutzers als SQL Statements in eine Log-Datei zu schreiben. So kannst du dann bei jedem Programmstart all die gemachten Änderungen des Benutzers erneut in deine Standard DB übernehmen. Performant ist das aber sicher auch nicht.

    Auch sehe ich keinen Grund was dein Problem damit ist, wenn die vollständige DB nach Programmende im Verzeichnis verbleibt. Während der Laufzeit ist diese ohnehin vorhanden und könnte kopiert/manipuliert werden. Das ließe sich btw über eine in memory sqlite DB lösen anstatt mit einer vorkompilierten Datei DB per fileinstall zu arbeiten.

  • Hallo an alle Antworter,

    das Script prüft jetzt beim Start des Tools, ob die SQLite-DB bereits auf dem Client existiert.

    Falls nein wird sie aus der exe extrahiert, falls ja wird die vorhandene verwendet.

    Beim Schliessen des Tools wird die SQLite-DB nicht gelöscht, sondern bleibt auf dem Client.

    Mit dieser Lösung kann ich sehr gut leben!

    Vielen Dank an alle Antworter :party: