Autor Beitrag
barnti
Hält's aus hier
Beiträge: 3


D7
BeitragVerfasst: Di 19.08.03 19:36 
Hallo,
ich schreibe an einer Client-Server-Datenbankanwendung. Dabei sollen mehrere Clients (ca. 20) auf eine mySQL-DB zugreifen. Ich weiß allerdings noch nicht wie ich bei geöffneten Tupeln ein zweites Öffnen im Editiermodus verhindere.
Ich möchte also, dass ein bestimmter Datensatz immer nur von einem Client schreibend geöffnet werden kann.

Löse ich dies über Vergabe verschiedener Session-Objekte? Oder muss ich jede einzelne Query auf seinen State überprüfen und dann darüber eine Entscheidung treffen?
Ich weiß, dass es in mySQL Tabellen-Typen gibt, die dies unterstützen, nur wie kann ich mit Delphi darauf zugreifen?

Danke für Hilfestellung
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Fr 22.08.03 14:47 
so auf die schnelle fällt mir nur ein:
füge eine zusätzliche Spalte (varChar(1)) hinzu mit per default='N'
Jeder Client der einen Datensatz abruft setzt diesen auf 'Y'
Jeder Client der diesen Datensatz verlässt setzt ihn wieder auf 'N'

der Rest ist Programmcode (lesen ja, aber nicht zurückschreiben)

Vorteil: Das funktioniert auf allen DBs. Wenn du das ganze noch mit Stored Procedures machst, gehts noch besser.

grez
msch
barnti Threadstarter
Hält's aus hier
Beiträge: 3


D7
BeitragVerfasst: Sa 23.08.03 08:09 
Titel: Tja...
Hallo MSCH,

die Idee hatte ich auch schon, allerdings reicht da ein "ja" "nein" nicht aus. Denn wenn du die Änderung "commitest" wird das dataset gaschossen. Will der selbe Client jetzt auf den Datensatz zugreifen ist dieser gesperrt.

Das würde heißen ich muss stattdessen ein Kennzeichen für den benutzenden User abspeichern.

Ich denke aber ich werde einen anderen Weg wählen. Dazu gehört die Umstellung der Tabellen auf Transaktionsunterstützung. Beim Lesen werde ich dann das Sperren veranlassen.

Trotzdem danke fürs Mitdenken,

Grüße,

Barnti