Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

In Tabelle suchen

Begonnen von pjo12345, August 31, 2010, 00:10:38

⏪ vorheriges - nächstes ⏩

pjo12345

Moin,

habe da mal wieder eine Frage.
Ich habe eine Tabelle mit den Namen der Mitarbeiter, der Abteilung und dem Windows-Benutzername.
Beim Laden des Formulars ermittel ich mit einer Funktion den bei Windows angemeldeten User (Windows-Benutzernamen). Dann möchte ich diesen in der Tabelle suchen und den dazugehörigen Namen und die Abteilung auf dem Formular in zwei Textfeldern anzeigen lassen. Also allgemein gefragt, wie suche ich in Tabellen.

Gruß pjo12345
***Kommasetzung nach Gefühl*** (Trefferquote 90%)

oma

Hallo,

also hat mein Vorschlag mit der Ermittlung des Windows-Benutzernames geklappt. Wenn ja oder nein; man sollte jede Frage im Forum irgendwie beantworten!

ZitatAlso allgemein gefragt, wie suche ich in Tabellen

Ist zu allmein; in Tabellen wird garnicht gesucht, es wird stets in Formulare nach Werten aus Tabellen gesucht.

Wenn du ein Formular hast, das als Datenherkunft die besagte Tabelle als Datenherkunft hat, kannst du im Formularkopf ein ungebundenes Feld (oder Felder) zur Eingabe von Suchbegriffen erstellen. Nun musst du entscheiden, willst du Suchen (springen auf den ersten gefundenen Wert) und entspechend weitersuchen oder willst du selektieren, d. h. als Anzeige alle DS bekommen, die den Suchbegriff entsprechen.

Erläutere mal wie dein Suchvorgang vonstattengehen soll.


Groß Oma
nichts ist fertig!

pjo12345

Mit deinem Vorschlag(Benutzername) bin ich nicht weitergekommen, wollte da aber noch einiges ausprobieren. Deshalb noch keine Antwort.

So nun zu dem anderen Problem:

Also ich habe eine Tabelle. In der stehen die Namen der Mitarbeiter, deren Abteilung und der Windows-Benutzername. Beim Start wird der Windows-Benutzername ermittelt und an die Variable fOSName übergeben. In dem Formular soll jetzt der zum Windows-Benutzernamen gehörende "richtige" Name und die Abteilung angezeigt werden. Also zwei Textfelder: "Name: Herr Müller" und "Abteilung: ABC"

Ich müsste also mit dem Windows-Benutzernamen (Variabel fOSName) "suchen" und den entsprechenden Datensatz finden, um diesen dann anzuzeigen. Es soll nur dieser eine Datensatz angezeigt werden.

Ich hoffe das ich mich verständlich ausgedrückt habe.

Gruß pjo12345
***Kommasetzung nach Gefühl*** (Trefferquote 90%)

oma

Hallo,

also wenn du ein Formular an die Tabelle mit den Namen der Mitarbeiter bindest, kannst du folgendes Ereignis nutzen:

Private Sub Form_Open(Cancel As Integer)
    Me.Filter = "Mitarbeiter= '" & Environ("UserName") & "'"
    Me.FilterOn = True
End Sub


Somit wird das Formular beim Öffnen mit den aktuellen Windows-Benutzer gefiltert

Gruß Oma
nichts ist fertig!

database

Hallo,


...und wenn dein eine andere Datenherkunft hat, als von oma vorgeschlagen - auch kein großes Mirakel :)

Wenn ich recht in der Annahme gehe, dass hierbei ...
ZitatBeim Start wird der Windows-Benutzername ermittelt und an die Variable fOSName übergeben
die Variable fOSName eine Public-Variable darstellt, KANNST du mit den folgenden Zeilen Code im
Ereignis 'BeimÖffnen' des Formulars die beiden gewünschten Felder mit Daten versorgen.

Private Sub Form_Open(Cancel As Integer)
   Me!DeinNamensfeld = DLookup("richtigerName","DeineTabelle","WinBenutzerName='" & fOSName & "'")
   Me!DeinAbteilungsfeld = DLookup("Abteilung","DeineTabelle","WinBenutzerName='" & fOSName & "'")
End Sub


Solltest du haben wollen, dass Name und Abteilung NICHT in einem Textfeld sondern in einem Bezeichnungsfeld (Label) angezeigt werden (Kein Überschreiben oder Ändern oder Löschen möglich) dann
Erzugst du am Formular die beiden Labels, nennst sie z.B. lblName und lblAbteilung und gibst als Text einen Punkt mit.
Den obigen Code änderst du dann folgendermaßen ab:


Private Sub Form_Open(Cancel As Integer)
   Me!lblName.Caption = DLookup("richtigerName","DeineTabelle","WinBenutzerName='" & fOSName & "'")
   Me!lblAbteilung.Caption = DLookup("Abteilung","DeineTabelle","WinBenutzerName='" & fOSName & "'")
End Sub


HTH
Peter

pjo12345

Hallo,

@oma: Irgendwie komme ich mit Environ("UserName") nicht klar. Ich glaube da wird nicht der Username von Windows ermittelt sondern der User der Datenbank. Habe aber eine Lösung bekommen. Danke...

@database: Hat alles bestens geklappt. Danke!


Ich habe ja schon einige Sachen Visual Basic programmiert. Habe aber nicht gedacht, dass VBA sich doch ganz schön von VB unterscheidet. Bin wohl etwas blauäugig an die Accessprogrammierung rangegangen. Aber was solls, weiter gehts.


Gruß pjo12345
***Kommasetzung nach Gefühl*** (Trefferquote 90%)

MzKlMu

Hallo,
in neueren Accessversionen >=2007 kann Environ("UserName") nicht direkt verwendet werden. Das wird durch die Sicherheitseinstellungen verhindert.

Man muss eine Funktion schreiben:

Public Function AktBenutzer() As String
    AktBenutzer = Environ("UserName")
End Function


Den Usernamen kann man dann mit der Funktion ermitteln:
=AktBenutzer()
Als Steuerelementinhalt. Oder mit dem Beispiel von OMA:

Private Sub Form_Open(Cancel As Integer)
    Me.Filter = "Mitarbeiter= '" & AktBenutzer() & "'"
    Me.FilterOn = True
End Sub


Nur als Hinweis, falls neueres Access.
Gruß Klaus

database

Hallo,

zur Ermittlung des angemeldeten Benutzers (Windows-Benutzer):

In den neuen VBA-Versionen von Access 2007 und 2010 kann Environ("UserName") nicht (mehr) ohne den Aufruf aus einer Function heraus verwendet werden.

Mit folgendem Code ermittle ich in einer VB6 Applikation den aktuellen Benutzernamen.
Dieser Code kann auch unter VBA verwendet werden!


Option Explicit

Declare Function GetUserName Lib "advapi32.dll" _
 Alias "GetUserNameA" (ByVal lpBuffer As String, _
 nSize As Long) As Long


Public Function GetBenutzer() As String

   'Ermittelt den aktuell angemeldeteten Benutzer
   
   Dim UserName As String
   Dim Result As Long
   
   UserName = Space$(256)
   Result = GetUserName(UserName, Len(UserName))
   
   If InStr(UserName, Chr$(0)) > 0 Then
       UserName = Left$(UserName, InStr(UserName, Chr$(0)) - 1)
   End If


   GetBenutzer = UserName
   
End Function


p.s.
ZitatHabe aber nicht gedacht, dass VBA sich doch ganz schön von VB unterscheidet
Natürlich gibt es Unterschiede, die meisten sind aber Access-spezifische Dinge, die an sich aber nicht in der Überzahl sind :)
M.M. nach gleichen sich VB6 und VBA (6) bis zu 90%

oma

Hallo,

sorry, das man in Accessversionen >=2007  Environ("UserName") nicht direkt verwendet werden kann, habe ich nicht gewusst, da ich bislang bewusst noch auf Access2007 verzichte.

Bei mir (Access2003) klapt mein Beispiel ohne Tadel, aber man kann ja mit den Hinweis von Klaus die Sache einfach umschreiben!

Gruß Oma
nichts ist fertig!

database

Hallo,

@oma
...also mit den vielen guten Taten, die du hier schon vollbracht hast sollte es kein Problem sein den kleinen Mangel (kein Acc 2007) zu verzeihen  ;D ;D ;D ;D

Mit dem Schnippsel aus meinem Beitrag wäre es dann eine Art der Ermittlung, die von Access-Interna unabhängig arbeiten kann.

Zitataber man kann ja mit den Hinweis von Klaus die Sache einfach umschreiben
...auf jeden Fall, man erspart sich dabei auch ein paar Zeilen Code zusätzlich...

oma

Hallo,

@Peter:

irgendwann werde ich mich ja "beugen" müssen und mit Acc2007 arbeiten, (zumindest als Testversion auf dem 2.-Rechner ;D) da ja nun schon Acc2010 im Anmarsch ist.

Da ich nun hier schon oft ins Leere gelaufen bin, würde ich Andreas vorschlagen, bei jedem Beitrag die Version mit anzugeben; oder findest du das übertrieben ??

Gruß Oma
nichts ist fertig!

database

Hallo oma,

die Verion mit anzugeben kann nur hilfreich sein - bald haben wir es ständig mit 4! verschiedenen zu tun (XP, 2003, 2007 u. 2010) möglicherweise kommt das eine oder andere 97-er noch dazu.

Ich selbst verwende inzwischen 2007 als Standard (auch berufsbedingt) habe aber XP, 2003 und 2010 in virtuellen Maschinen am Laufen.

Peter