Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

MS Access - Nur Änderungen eigener Datensätze erlauben





Frage

Liebe Experten, ich versuche eine MS Access Anwendung für eine Mehrnutzerumgebung zu entwerfen. Sicherheit auf Benutzerebene ist eingerichtet. Jedem Nutzer soll es erlaubt sein, nur von ihm selbst angelegte Datensätze zu ändern. Ist es besser, die von verschiedenen Nutzern eingegebenen Daten in verschiedenen Tabellen abzulegen oder gibt es Möglichkeiten, anhand eines Tabellenfeldes das Ändern des Datensatzes zu erlauben/ zu verweigern? Wie kann man ausserdem z.B. den Nutzernamen des gerade eingeloggten Nutzers automatisch in ein Tabellenfeld übertragen? Vielen Dank für jeden Hinweis, Tipp oder Link Masanja

Antwort 1 von Hilfsente

Hallo,

ich würde alles in einer Tabelle machen. Dazu in einem zusätzlichen Feld den Benutzer mit abspeichern, der den datensatz angelegt hat.

Dann musst du nur verproben, ob der angemeldete Benutzer mit dem Eintrag in der Tabelle übereinstimmt und abhängig davon in deinem Formular Änderungen zulassen oder nicht.

Gruss Hilfsente

Antwort 2 von Masanja

Hallo Hilfsente,
ja, das wäre auch meine bevorzugte Strategie.

Zitat:
Dann musst du nur verproben, ob der angemeldete Benutzer mit dem Eintrag in der Tabelle übereinstimmt und abhängig davon in deinem Formular Änderungen zulassen oder nicht.


Über welche Objekte/ Anweisungen kann man das verproben? Oder hast du einen Verweis auf eine Quelle, wo das erklärt wird?

Vielen Dank

Masanja

Antwort 3 von erik

Für jeden Benutzer eine Tabelle anzulegen wäre absoluter Wahnsinn, sofern du nicht auf einen SQL Server zugreifst. Den Wartungsaufwand kann man keinem Menschen zumuten.

Wie schon Hilfsente angedeutet hat, solltest du in jeder Tabelle ein weiteres Feld hinzufügen, in dem der Name des aktuellen Benutzers eingetragen werden. Wenn ein neuer Datensatz angelegt wird, dann wäre z.B. das Ereignis "Nach Eingabe" geeignet:

Private Sub Form_AfterInsert()
Me.BenutzerName = CurrentUser()
End Sub

Wenn ein fremder Benutzer den Datenzugriff wagt, dann gäbe es zwei Möglichkeiten, den Zugriff zu verhindern. Von vornherein könnte das Recht zum Bearbeiten und Löschen des Datensatzes entzogen werden. Ist es der richtige Benutzer, dann wird das Recht wiederum erteilt. Dazu eignet sich das Ereignis "Beim Anzeigen":

Private Sub Form_Current()
Me.AllowEdits=CBool(Me.BenutzerName = CurrentUser())
Me.AlllowDeletions = CBool(Me.BenutzerName = CurrentUser())
End Sub

Weiterhin wäre es möglich, direkt vor dem Speicherversuch selbiges zu verweigern. Allerdings wäre es aus der Sicht des Anwenders ärgerlich, wenn er mühsam Änderungen durchführt, nur um sie dann verwerfen zu müssen. Von daher sollte diese Variante eher nicht genutzt werden:

Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.BenutzerName <> CurrentUser() Then
MsgBox "Sie haben keinen Zugriff auf diese Daten.", vbExclamation
Cancel = True
End if
End Sub

Wenn der Anwender sowieso nur seine eigenen Daten sehen soll, dann kannst du die fremden Daten von vornherein komplett ausblenden:

Private Sub Form_Load()
Me.Filter= "BenutzerName = ´" & CurrentUser() & "´"
Me.FilterOn = True
End Sub

Viele Wege führen demnach nach Rom, du musst dir nur einen aussuchen. :-)

Antwort 4 von Masanja

erik,

vielen Dank für diese ausführliche Hilfestellung! Genau die Art von Stichworten, die mich weiterbringt.

Besten Dank nochmals.

Masanja

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: