Gleichzeitiger Datenbankzugriff

Alles rund um die Programmierung mit Qt
Antworten
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Gleichzeitiger Datenbankzugriff

Beitrag von cyberduck »

Hallo,

in meinem Programm kann ich z. B. eine Datenbank-Tabelle über ein QSqlTableModel anzeigen und die Daten ggf. bearbeiten. Wie funktioniert es jetzt, wenn zwei oder mehr Benutzer mit dem Programm auf die gleiche Datenbank zugreifen?

Einfaches Beispiel, Benutzer eins lässt sich einige Daten anzeigen, macht eine Stunde pause und während dessen verändert Benutzer zwei die Daten. Nach der Pause führt Benutzer eins ebenfalls einige Änderungen durch. Wie kann ich jetzt gewährleisten das die neuen Daten nicht überschrieben werden?

Gibt es das bestimmte Funktionalitäten vom DBMS oder muss ich z. B. jeden Datensatz mit einem Zeitstempel versehen und diesen vor dem Speicher prüfen?

Beste Grüße,

Cyberduck
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Gleichzeitiger Datenbankzugriff

Beitrag von RHBaum »

Also die definitive Antwort lautet: kommt drauf an ^^
gibt es das bestimmte Funktionalitäten vom DBMS
Wenn die Datenbank MutiUserfähig sein soll, dann ja .... Aber datenbanken sind nicht alle gleich ....
Benutzer eins lässt sich einige Daten anzeigen, macht eine Stunde pause und während dessen verändert Benutzer zwei die Daten. Nach der Pause führt Benutzer eins ebenfalls einige Änderungen durch. Wie kann ich jetzt gewährleisten das die neuen Daten nicht überschrieben werden?
Da gibts mehrere Lösungsansaetze ....

Was die meisten unterstützen, sind Transaktionen.
Also in deinem Fall:
- U1 öffntet eine Transaktion ... und bekommt damit eine Art Snapshot
- U1 Lässt sich daten Anzeigen ...
...
- U2 öffnet eine Transaktion ... und bekommt auch den Snapshot auf die selben daten
- U2 modifiziert
- U2 macht ein Commit damit wird sein Snapshot zum aktuellen globalen datensatz
...
- U1 macht Änderungen (auf seinem Snapshot)
- U1 will commiten, die DB kriegt mit, das er auf nicht aktuellen Daten arbeit -> Konflikt. Meist gibts nen Error bei dem commit von U1. Manchmal wird auch gemergt, wenn möglich.


Gibt auch noch andere Möglichkeiten, je nach DB System.
Locks !
Du kannst datensätze locken, dann ist garantiert das keiner nen Update und in der Zeit macht.
Die Möglichkeiten sind aber wieder von System zu system verschieden ...

Manche können einzelne Felder einer Tabelle locken ... manche nur komplette Tabellen.
Manche koennen nur Komplettlocks, manche können Read und Writelocks ...
Und die SQL syntax dazu iss auch ned immer gleich ...

Ciao ....
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Re: Gleichzeitiger Datenbankzugriff

Beitrag von cyberduck »

Hallo,

vielen Dank für die tolle Antwort.

Soweit habe ich alles verstanden, wie Transaktionen mit Qt genutzt werden können ist mir auch klar. Welche Funktionen bietet mir aber Qt um einzelne Felder einer Tabelle zu locken?

Viele Grüße,

Cyberduck
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Gleichzeitiger Datenbankzugriff

Beitrag von RHBaum »

Welche Funktionen bietet mir aber Qt um einzelne Felder einer Tabelle zu locken?
Keine ....
Locken ist DB implementierung.
Wird meistens ueber SQL "erweiterungen" erreicht.

LOCK TABLE
oder LOCK TABLE... WHERE ....

sind so beispiele ....

einzige was Qt unterstützt(en muss) ist das SQL statements abzuschicken ...

Ciao ...
cyberduck
Beiträge: 16
Registriert: 14. Juli 2010 12:07

Re: Gleichzeitiger Datenbankzugriff

Beitrag von cyberduck »

Hi,

sehr schön erklärt, vielen Dank. Jetzt habe ich alles verstanden :-)

Viele Grüße,

Cyberduck
Antworten