SQLLITE

  • kleine frage,

    Ich habe ein Programm laufen das db Einträge macht, die db liegt auf dem Netzwerk Laufwerk.

    Mir ist grad aufgefallen obwohl das Programm läuft und auch fleißig sendet.

    Auf dem Rechner wo die das Programm grad am Arbeiten ist, wird mir die aktuellen Einträge beim kontrollieren angezeigt, über das Netzwerk aber nicht?

    Kennt jemand das Problem?

  • Problem kenne ich nicht - hätte aber noch eine Frage zum Problem:

    Im Moment verstehe ich das so:

    Die Datenbankeinträge werden lokal erzeugt - und in eine auf dem Server liegende Datenbank geschrieben.

    Tauchen denn die Datensätze grundsätzlich am Server auf oder nur verspätet?

    Was siehst Du am Arbeitsplat? Eine locale Kopie der Datenbank - oder siehst Du lediglich den erzeugten Datensatz (für den Moment der Erstellung)

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Ich vermute mal du nutzt SQLite.

    SQLite kann zwar mit mehreren Anwendungen gleichzeitig lesen, aber nur mit einer schreiben.

    SQLite FAQ: Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at any moment in time, however.

    In diesem Fall würde ich aber vermuten, dass Windows die Datei lokal cached, solange sie offen ist und erst am Ende auf die Netzwerkdatei schreibt.

    Probier mal aus, ob die Daten da sind, wenn du deine schreibende Anwendung beendest.

    Wenn das der Fall ist: Probier mal mit SQLITE_Close die Datenbank zu schließen und schau ob dann die Daten geschrieben wurden.

    Wäre etwas doof, weils mehr Zeit kostet, wenn du jedesmal die Datenbank öffnen und wieder schließen musst, aber wenn du nur zwischendurch mal was schreibst sollte das gehen.

  • falsch in diesem Szenario es ist 1 Datei also Beispiel mein.db

    die einfach im Netzlaufwerkliegt, im selben Verzeichnis wie das Programm.

    Das Programm wird vom Klienten ausgeführt auf einem anderen PC. Das Programm soll eigentlich diese Datenbank die im selbem Verzeichnis liegt füllen.

    Es ist auch keine andere Anweisung im Programm vorhanden, das nicht auf den Skript Ordner verweist.

    Ich habe nun das Programm nicht geschlossen um zu sehen ob ich dann die aktuellen daten auslesen kann.
    Aber normalerweise sollte ich doch die aktuellen daten sehen können wenn ich es mit DB Browser for SQLite auslese von einem anderem PC aus, der auf dieses Netzlaufwerk zugreifen kann.

  • Kanashius

    Danke das habe ich auch gemerkt und extra einbaut falls das Programm auf 2 verschiedenen Rechnern läuft er eine worked status in der Datenback setzt solange er am beschreiben ist, und dann wartet das 2te gestartete Programm bis es wieder zurückgesetzt ist.

    die Datenbank wird immer geschlossen solange er nichts zu tun hat.

    :/ aber dennoch konnte ich es nicht auslesen mir wurden nur die daten der letzten paar tage gezeigt aber nicht die aktuellsten. ich werde morgen die exe mal beenden und dann rein schauen.

    Ich habe vor dem letzten Compilern nochmal etwas getestet vielleicht habe ich ja die Zeile ausersehen ausgeklammert oder gelöscht.

    Ich muss morgen mal schauen, weil davor konnte ich ja auch nachsehen, erstmal guter tipp mit SQLITE_Close

    2 Mal editiert, zuletzt von MojoeB (28. September 2023 um 16:24)

  • Moin,

    SQLite verwender zusätzlich zum OS-Cache noch eigene lokale Caches. Sämtliche schreibenden Aktionen schreiben zunächst einmal in den lokalen Cache und werden erst nach einem automatischen (Voreinstellung) oder expliziten COMMIT in die Daenbankdatei geschrieben. Wenn das aus welchen Gründen auch immer nicht passiert, können andere Verbindungen die Änderungen nicht sehen.

    Single File Commit

  • MojoeB 1. Oktober 2023 um 23:25

    Hat das Label [ gelöst ] hinzugefügt.