User abgleich

Liebe/-r Experte/-in,
ich habe ein kleines problem.
ich bin anfänger in VBA und will folgendes machen in access:
-ich habe eine Tabelle: Users
in dieser Tabelle 3 Spalten ID(Autowert), Name und
Sicherheitsstufe(String).
-ich habe ein Modul zum abrufen des Windows
Benutzernamens die ich aufrufe mit GetUser(), da
steht hinterher der Username drin als String
-ich habe ein Formular das beim öffnen das modul
ausführt, den Benutzer in eine Variable läd und dann
soll der Benuzter verglichen werden.

ich will nun den Benutzernamen mit der Tabelle abgleichen. wenn der name vorhanden ist soll die sicherheitsstufe des entsprechenden datensatzes in eine Globale Variable geladen werden.
wenn der name nicht vorhanden ist soll in der variable für die sicherheitsstufe „Gast“ eingetragen werden.

ich habe es geschafft den Benutzernamen zu extrahieren und in eine Globale Variable zu laden damit ich ihn mit dem formular verarbeiten kann.
aber ich bekomme es nicht hin, das der String mit der Spalte Name in der tabelle Users verglichen wird.

kann mir jemand helfen??
mfg
Markus

Hallo,

poste doch mal Deinen SQL-Befehl, den du zum Abgleich nimmst. Der SQL-String muss mit dem aus Windows gewonnenen Benutzernamen-String konkateniert werden. So zum Beispiel:

„SELECT * FROM USER_TABELLE WHERE Name =’“ & WindowsBenutzerName & „’“

MfG xtc99

hi,
diesen befehl habe ich in ein modul geschrieben und ruf den einfach auf wenn ich ihn brauche:

Private Declare Function GetUserNameA Lib „advapi32.dll“ _
(ByVal lpBuffer As String, nSize As Long) As Long

Function GetUser()
Dim s As String * 255
GetUserNameA s, Len(s)
GetUser = Left$(s, InStr(s, vbNullChar) - 1)
End Function

mfg
Markus

Hallo,

Deine Funktion GetUser(), welche wiederum auf die Windows-DLL zurückgreift, holt sich die Windows-Login-Daten. Dieser Teil funktioniert ja nach deiner Aussage. Mit der Datenbank-Tabelle hat dies jedoch nichts zu tun.

Da der Abgleich bei Dir aber immer noch nicht funktioniert, hakt es anscheinend ja noch bei der Datenbankabfrage. Eine solche macht man am sinnvollsten per SQL. Ich habe in meinem letzten Post einen derartigen Befehl vorgeschlagen („SELECT …“), weiss aber natürlich nicht, ob er im Rahmen Deines Programms seinen Zweck erfüllen würde.

Bitte poste deinen SQL-Befehl mal.

Hi,
Ich habe noch keinen drinn.
Ich habe noch nie in SQL programmiert. Ich versuche es mit vba
Ich habe es mit dlookup versucht, jedoch kein zufrieden stellendes Ergebnis.
Ich Versuchs mal mit dein SQL Befehl.
MfG
Markus

Hi,
Habes hinbekommen mit deinem code.
Vielen dank Funktioniert.
wenn ich mir die abfrage jetzt so anschau weiß ich auch was ich falsch gemacht habe.
bei Kriterien hatte ich nur GetUser() geschrieben und nicht „“ & GetUser() & „“
Danke :smile:
mfg
Markus

Hallo Markus,

wenn ich Dich richtig verstanden habe, hast Du ja bereits den Usernamen. Nun kannst Du mit der DLookup-Formel dessen Existenz überprüfen und dabei gleich den Status mit auslesen.
Ich nehme dafür immer gerne eine Variable vom Typ Variant (wegen einem möglichen Nullwert als Ergebnis) also so in der art:

Dim myStatus as variant

myStatus = dlookup(“Sicherheitsstufe“, “Users“, “[Name]=“““ & VariableMitUsername & ““““)
’ Wenn der Rückgabewert NULL ist, gibt es den Benutzer nicht, also Gast
if isnull(myStatus ) then
myStatus="Gast
end if

Da Name ein gültiger VBA-Befehl ist, musst Du diesen in eckige Klammern setzen (oder besser noch, Tabellenfelder nicht mit internen Namen belegen *G*)

Ich hoffe, das hilft Dir weiter,
Burkhard

Sorry Markus,
aber da bin ich der falsche …

Hallo Markus,
ich glaube, ich bin im Moment in Form für Deine Anfrage, aber ich bräuchte einfach mal Deinen Sourcecode (Programmierzeilen oder die ganze Access-Datenbank, gerne auch in abgespeckter Form)

Habe es hinbekommen.
Funktionier.
Danke :smile:

Habs jetzt noch nicht 100%ig hinbekommen, es hapert gerade beim SQL Statement mit dem Autowert für die ID, da gibt es auch einen speziellen Befehl glaube ich, aber die Tipps habe ich hier gefunden:
http://www.schmittis-page.de/index.html?/excel/vba/t…

Sub UserVergleich()
Dim tblUsers As DAO.Recordset
Dim gefunden As Boolean

gefunden = False
Set tblUsers = CurrentDb.OpenRecordset(„Users“)

Do While Not tblUsers.EOF
If „Globale_Variable“ = tblUsers.Fields(„Name“).Value Then gefunden = True

tblUsers.MoveNext
Loop

If Not gefunden Then CurrentDb.Execute „INSERT INTO Users VALUES(…)“
End Sub

Vergiss nicht, den Verweis auf die DAO Bibliotheken zu setzen (siehe Link)

Hallo Markus,

entschuldige die späte Antwort - ich war im Urlaub.

Wenn Du mit Formeln arbeitest, wäre es sicher leichter, wenn das Ergebnis der Funktion GetUser in einer Zelle steht - für einige Funktionen ist das sogar Pflicht.

Wenn das der Fall ist, könnte man mit einer Datenbank-Funktion die Sicherheitsstufe herausfinden - z.B. SVerweis. Diese Funktion ist in der Online-Hilfe recht gut beschrieben.

Liebe Grüße,
Kurt