Frage von killjam, 67

Access Variable in VBA mit Tabelle vergleichen?

Hallo zusammen.

Ich versuche derzeit verschiedene Nutzungsrechte für die Datenbank mit demjeweiligen Windowsaccount zu verknüpfen. Dazu wir der Anmeldename durch eine Funktion ermittelt. Jetzt möchte ich diesen Anmeldenamen mit den in einer Tabelle hinterlegten Namen vergleichen. Wenn dieser vorkommt, dann soll der Code abgebrochen werden, ansonsten fortgeführt. Ich hatte es schon mit Dlookup versucht, jedoch ohne erfolg.

Bitte helfen Vielen Dank und Grüße!!

Antwort
von daCypher, 56

Mal kurz ohne Prüfung zusammengebastelt:

Public Function isAuthorized(TaskID As Integer)
 As Boolean
On Error GoTo err_isAuthorized
Dim DB As Database
Dim RS As Recordset
Dim SQL As String

Set DB = CurrentDb
SQL = "SELECT Username " _
    & "FROM UserRoles " _
    & "WHERE TaskID = " & TaskID & " AND Username = """ & Environ("username") & """"
Set RS = DB.OpenRecordset(SQL, dbOpenDynaset) ' evtl. noch dbSeeChanges ergänzen

If RS.RecordCount > 0 Then
    isAuthorized = True
Else
    isAuthorized = False
End If

exit_isAuthorized:
Exit Function

err_isAuthorized:
MsgBox Err.description
Resume exit_isAuthorized
End Function

Für die Funktion bräuchtest du dann eine Tabelle namens UserRoles, in der es eine Spalte TaskID und eine Spalte Username gibt. In der TaskID kannst du eine Zahl für die jeweilige Aufgabe eintragen (z.B. 1 = Programm öffnen, 2 = im Programm Daten verändern, 3 = Menüpunkt xy aufrüfen etc.) und bei Username trägst du halt den Anmeldenamen des Benutzers ein.

Ich weiß nicht, wie deine Funktion zum Auslesen des Benutzernamens aussieht, aber das passiert in meiner Funktion mit  Environ("username").

Wenn der aktuell angemeldete Benutzer mit der übergebenen Aufgaben-ID in der Tabelle gefunden wurde, gibt die Funktion Wahr zurück. Ansonsten gibt sie Falsch zurück.

Kommentar von daCypher ,

Was ich noch vergessen hab: Wenn du deine Prozedur abbrechen willst, wenn ein Name gefunden wurde, kannst du es z.B. so machen:

Private Sub Button1_Click()

' Dein Code

If isAuthorized(1) Then ' Je nachdem, welche Nummer du für die Aufgabe vergibst, kann es auch was anderes als 1 sein
    Exit Sub
End If

' Dein Code, der nur bei nicht gefundenen Benutzern ausgeführt werden soll

End Sub

Ich hab das ganze übrigens absichtlich ohne Dlookup gemacht, weil ich die Erfahrung gemacht hab, dass Dlookup sehr langsam ist.

Kommentar von daCypher ,

PS: Wäre nett, wenn ich wenigstens irgendeine Reaktion auf meine Antwort kriegen würde. Hab immerhin eine Weile gebraucht, um das zusammenzutippen. Wenn es mit dem Code nicht funktioniert, dann sag mir, wo es hängt. 

Falls du das in Excel und nicht in Access einbaust, muss man eine kleine Änderung vornehmen.

Falls er sagt, dass er den benutzerdefinierten Typ "Database" nicht findet, musst du in den Verweisen die "Microsoft Office 12.0 Access database engine Object Library" hinzufügen.

Keine passende Antwort gefunden?

Fragen Sie die Community