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.
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.
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