Announcement

Collapse
No announcement yet.

Datensatz wird bearbeitet - Wie kriege ich das raus ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datensatz wird bearbeitet - Wie kriege ich das raus ?

    Hi,

    ich habe folgendes Problem: Ich möchte, bevor ein bearbeiteter Datensatz geupdatet wird, festellen, ob er bereits gerade bearbeitet wird und vor allem von welchem User. Wie kriege ich denn sowas hin ?

    Vielen Dank

    Steffen

  • #2
    Steffen,<br>
    eine Datenbank verwaltet und speichert Informationen, aber sie verwaltet NICHT die Art und Weise der Zugriffe oder sonstige Informationen dazu. Wenn Du so etwas brauchst, musst Du selber dafür die Logik bereitstellen.<p>
    Eine Möglichkeit:<br>
    Jeder User bekommt bei der Anmeldung (client-seitig) eine Sitzungs-ID (per Generator) zugeteilt.<br>
    Vor dem Update (bzw. der Anforderung zum Update) schreibst Du diese ID in eine Spalte des entspr. Datensatzes (also machst ein UPDATE auf diesem Satz).<br>
    Wenn Du KEIN COMMIT machst, dann kann auch kein anderer Anwender den Datensatz bearbeiten (da auch er das Update versuchen würde, dabei aber einen Deadlock bekommt --> pessimistic Locking), oder Du machst ein COMMIT und fragst vor dem Ändern ab, ob der Datensatz gerade im Zugriff eines anderen Anwenders (Wert <> eigener SitzungsID ist).<br>
    Nach dem Speichern den Wert aber wieder auf NULL setzen ;-)<p>
    Luc

    Comment


    • #3
      Vielen Dank für den Hinweis, aber wie kann ich clientseitig eine Sitzungs-ID erzeugen ? Ich habe es jetzt so ersteinmal gemacht das ich eine Zusatzzahl in Delphi generiere, und die überall eintrage, wo der Datensatz von mir bearbeitet wird. Aber gibt es da nicht eine elegantere Lösung

      Comment


      • #4
        Steffen,<br>
        Einfach nach dem Login einen Generatorwert erzeugen.<br>
        Erzeuge einen Generator in der Datenbank:
        CREATE GENERATOR G_LOGIN;<br>
        Auf der Client-Seite kannst du einen Generatorwert abfragen / erzeugen mit einer ganz normalen Query:
        SELECT GEN_ID ( G_LOGIN, 1 ) FROM RDB$DATABASE;<br>
        Und schon hast du eine absolut eindeutige Session-ID.<br>
        Speicher die einfach als Property (oder ähnliches) in Deinem Datenmodul, dann hast (solltest!) Du überall Zugriff, wo Du mit der Datenbank arbeitest.
        Luc

        Comment

        Working...
        X