Multi-User Datenbank

Alles rund um die Programmierung mit Qt
Antworten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Multi-User Datenbank

Beitrag von Whitefurrows »

Hi,

mit QSqlQuery bzw. QSqlQueryModel lese dich Daten aus der Datenbank, in einen verctor ein. Diese Daten werden anschließend im Programm angezeigt, Änderungen werden in den vector geschrieben. Beim speichern der Daten wird der Inhalt des verctors wieder in die Datenbank geschrieben.

Wie kann ich die geöffneten Datensätze sperren, damit nicht der gleiche Datensatz von zwei Benutzern gleichzeitig bearbeitet werden kann?

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hast du dich schon mal mit Transaktionen beschäftigt?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Nein ich habe mich noch nicht mit Transaktionen beschäftigt. Das könnte aber die Lösung für mein Problem sein ;-)

Mir ist aber nicht ganz klar wie ich damit einzelne Datensätze zum löschen oder bearbeiten sperren kann. So wie ich das bis jetzt verstanden habe, kann ich mit transaction() die SQL-Anweisungen beginnen, waren diese erfolgreich, bestätige ich diese mit commit(), falls dies nicht erfolgreich war, können die zuvor ausgeführten Aktionen mit rollback() zurückgesetzt werden.

Ich müsste alle Datensätze die über die Select-SQL eingelesen werden für andere Benutzer zum löschen sperren, da diese dem Bearbeiter angezeigt werden und im vector enthalten sind. Wird ein Datensatz im Programm, bzw. im vector geändert, müsste dieser Datensatz für andere Anwender zusätzlich zum Bearbeiten gesperrt werden.

Kennst du zufällig ein kleines Beispiel, im dem etwas Derartiges veranschaulicht wird. Macht meine oben beschriebene Vorgehensweise überhaupt einen sinn oder sollte das Programm anders aufgebaut werden?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wiederspricht sich Multi-User und Sperren von vielen Datensätzen über einen längeren Zeitraum nicht?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Ja irgendwie schon, deshalb habe ich auch gefragt, wie man so ein Programm sinnvoll aufbauen kann, damit jeder Benutzer die richtigen Daten angezeigt bekommt. Deshalb wäre ich für weitere Tipps dankbar. Irgendwie müssen die Daten ja Temporär zur anzeige im Programm vorhanden sein, sprich in einem vector oder zumindest in einem Widget. Wie soll dann aber ein weiterer Benutzer die Änderungen angezeigt bekommen? Selbst wenn die Daten direkt gespeichert werden, das Programm müsste ja alle Datenbank zugriffe überwachen und die aktuellen Änderungen neu laden und anzeigen.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Unter Postgres gäbe es die Möglichkeit mit NOTIFY Änderungen zu überwachen, leider kann man dies mit der QtSql-Api nicht benutzen.

Dann gibt es noch die Möglichkeit im 10-Sekunden-Takt (1Min, 5Min, nach Bedarf) irgendwelche Timestamps abzufragen und bei Änderungen zu refreshen.

Oder die andere (verbreitetere) Möglichkeit: Der User entscheidet selbst wann er refreshen will und bekommt dazu einen Button.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nachtrag: Trolltech hat den Vorschlag in den Task-Tracker aufgenommen PostgreSQL-Notify mit dem Signal-Slot-System zu verbinden.
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Wen es interessiert: Hab hier schon mal was versucht. Für Postgres und Interbase/Firebird.
Dateianhänge
sqlNotifier.tar.gz
(2.5 KiB) 178-mal heruntergeladen
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Whitefurrows hat geschrieben:Ja irgendwie schon, deshalb habe ich auch gefragt, wie man so ein Programm sinnvoll aufbauen kann, damit jeder Benutzer die richtigen Daten angezeigt bekommt.
Es kommt doch darauf an, was dein Programm ueberhaupt macht, wieviele User damit parallel arbeiten usw.
Eine Aktualisierung der Daten im Client ist in der Regel schon ab einigen Benutzern nicht mehr sinnvoll.
Erwartet der Benutzer eine automatische Aktualisierung?
Wie hoch ist die Wahrscheinlichkeit, dass verschiedene Benutzer gleiche Daten zur selben Zeit bearbeiten?


Goos
Antworten