Seite 1 von 1

lock unloack Table

Verfasst: 11.11.2016 18:14
von michstro
Hallo zusammen,
also ich möchte von mehrereren Rechnern aus in eine SQLite datenbank schreiben. wenn ich in Purebasic eine Datenbank mit OpenDatabase(0, DatabaseFile$, "", "") öffne und in dieser irgendwas schreibe, kann ich nicht von anderer Stelle in die Datei schreiben. Was ja eigentlich auch gut ist.

Wie gehe ich aber geschickt damit um,
  • muss ich die Datenbank immer geschlossen halten?
  • wie kann ich das kontrolieren? habe irgendwo was von lock und unlock gelesen, aber nichts genaues gefunden.
  • Wie kann ich nach vollendetem Schreiben die Datenbank für andere wieder freigeben?
  • Wie Frage ich das von anderen Rechnern ab und reagiere darauf; der soll ja da auch auf jeden Fall schreiben können und nur evt 1-2 Sekunden warten.
Vielen Dank im Vorraus
Mikk

Re: lock unloack Table

Verfasst: 11.11.2016 18:42
von NicTheQuick
Aus der SQLite-FAQ:
SQLite-FAQ hat geschrieben: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.
Kurz gesagt, es können immer mehrere Lesen, aber immer nur einer Schreiben. Vorausgesetzt du nutzt kein NFS-Dateisystem.

Generell empfehle ich aber direkt auf einen richtigen MySQL-Server oder vergleichbares zu wechseln, wenn du Lock/Unlock und mehrere Anwendungen oder Threads auf eine Datenbank zugreifen lassen willst. Mit Commit/Rollback hast du dann sogar noch bessere Möglichkeiten bei komplexen Queries.

Re: lock unloack Table

Verfasst: 11.11.2016 19:12
von edel
Anstatt direkt in die Datenbank zu schreiben, koenntest du ein drittes Programm dazwischen schalten, welches dann in die Datenbank schreibt.

Re: lock unloack Table

Verfasst: 11.11.2016 21:21
von michstro
Danke für dei Antworten,
falls ich je in eine Datei geschrieben habe, wie kriege ich die Sperre weg?
Ich würde jetzt mal drauf tippen, einfach schliessen und wieder öffnen?
Falls jemand geschrieben hat und die Datei ist noch offen, wie kann ich den Fehler auslesen?
DatabaseError()?
müsste ich mir dann ne routine schreiben die eine gewisse Zeit wartet und dann wiederrum versucht und nach einigen versuchen abbricht und den Benutzer warnt?
Mit einem Requester Retry oder abbruch. Oder gehts irgendwie eleganter?

Mit dem Programm das dann durch andere Programme angesteuert wird funktioniert nicht da die rechner nicht untereinander erreichbar sind.
Aber jeder zugriff auf eine Freigabe hat.
Vielen Dank für eure antworten
Mikk

Re: lock unloack Table

Verfasst: 14.11.2016 11:41
von edel
Du koenntest auch einfach eine Textdatei in der Freigabe ablegen, welche dann wieder von einem Programm eingelesen wird.