Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: lutschi83 am November 18, 2015, 09:13:22

Titel: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 09:13:22
Hallo Leute,
ich bekomme die Dlookup-Funktion einfach nicht zum laufen.
Ich lasse in einem Formular "Auftrag" beim Laden den Benutzernamen in ein Textfeld "test" auslesen.
Der Benutzername ist aber kein Name bei mir, sondern eine U-NR....In der Tabelle "user" habe ich die Felder "UNR", "Username", "Abteilung. Also ist hier der Username zu der ausgelesenen UNR hinterlegt.
Im Formular Auftrag, möchte ich aber im Feld "Ersteller" den "Username" angezeigt bekommen, damit dieser dann in der Tabelle "auftrag" steht.
Ich weiß, dass ich das mit der dlookup-funktion machen muss, aber wie sieht der Syntax aus?
Ich hoffe Ihr könnt mir dabei helfen!
Vielen Dank schon einmal.
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 09:18:23
Hallo,
zeige bitte Deine Versuche, damit man gleich die richtigen Objektnamen hat.
Welcher Datentyp ist das Feld "UNR" ?
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 09:22:24
Hi,

Private Sub test_AfterUpdate()
Me.Ersteller.Value = DLookup("Username", "User", "[UNR] = '" & UNR.Text & "'")
End Sub


Das Feld "UNR" ist ein Textfeld
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 09:38:08
Hallo.
das Ereignis ist ungeeignet, denn es wird bei einem automatischen Eintrag nicht ausgelöst. Die Eigenschaft .Text ist hier auch falsch.
Du kannst im Feld einfach folgende Formel eintragen.
=DomWert("Username"; "User"; "[UNR] = '" & UNR & "'")
Beachte (deutsches Access): DLookup = Domwert und statt Komma Semikolon.

Zitatangezeigt bekommen, damit dieser dann in der Tabelle "auftrag" steht
Das solltest Du aber nicht tun. Auch in den Auftarg gehört nur die UNR. Den Usernamen kannst Du jederzeit ganz einfach über eine Abfrage ermitteln.
Das geht übrigens auch mit dem jetzigen Formular. Einfach beide Tabellen (Auftrag und User) in die Abfrage mit aufnehmen, mit einer Verknüpfung über die UNR. Dann hast Du alle Felder aus allen Tabellen zur Verfügung. Ohne VBA und ohne Formel.

Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 09:49:56
Das mit "domWert" funktioniert nicht. Bekomme den Fehler "#Name?" im Textfeld angezeigt.
Wenn ich deine 2. Variante machen möchte, wie muss dann die Syntax aussehen, dass im Feld "Ersteller" der Username und nicht die "UNR" angezeigt wird.
Ich steh da gerade etwas auf dem Schlauch!
Titel: Re: dlookup-Funktion
Beitrag von: el_gomero am November 18, 2015, 10:02:52
Moin,

wenn es sich um den Windows-Benutzernamen handelt, kannst du die Umgebungsvariable verwenden


=Envirion("username")


Sonst bietet sich an den Namen in einer globalen Variablen vorzuhalten.
Titel: Re: dlookup-Funktion
Beitrag von: DF6GL am November 18, 2015, 10:07:18
Hallo,

-- eine Anzeige in einem Formular-Textfeld unter Verwendung des Steuerelementinhaltes hat keine Speicherung des Wertes in der Tabelle zur Folge

-- welchen Datentyp hat "UNR" in der Tabelle?
Falls Datentyp Zahl, Long und im Steuerelementinhalt eines Form-Textfeldes:
=DomWert("Username"; "User"; "[UNR] = " & [UNR])  ' <edit> fehlerhaftes ME! entfernt </edit>


Falls Datentyp TEXT und im Steuerelementinhalt eines Form-Textfeldes:
=DomWert("Username"; "User"; "[UNR] = '" & [UNR] & "'")

Die "2. Variante" bedeutet:

Ein Formular, das die Auftragsfelder und die UNR anzeigt .
Im Steuerelementinhalt  eines weiteren Textfeldes einen der oben genannten Ausdrücke (Datentyp-abhängig) schreiben.
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 10:17:56
@Franz
Me! kann in einer Formel (Steuerelementinhalt) nicht verwendet werden.
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 10:23:53
Hallo,

also leider bekomm ich weiterhin den Fehler (#Name?) angezeigt. Das Feld UNR in der Tabelle User ist ein Text. Wie gesagt, bekomme ich im Textfeld "Test" die UNR angezeigt.
Es fehlt praktisch nur der Eintrag des Usernamen in das Feld "Ersteller".
Wie bekomme ich dass nun hin? Einen einfachen Abgleich der UNR aus dem Formular mit der Tabelle User, damit im Formular der Username angezeigt wird....
Ich bekomme es einfach nicht hin...
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 10:29:54
Hallo,
zeige bitte den aktuell verwendeten Code/Formel.

Und denke daran, den Namen auch in der Tabelle zu speichern ist in jedem Fall überflüssig.

Wie leist Du die UNR aus zur Anzeige in Test ?
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 10:33:40
Hallo,
Option Compare Database
Option Explicit
   
Private Declare Function apiGetUserName Lib "advapi32.dll" _
                          Alias "GetUserNameA" (ByVal lpBuffer As String, _
                                                nSize As Long) As Long
   
Function fOSUserName() As String
      Dim lngLen As Long, lngX As Long
      Dim strUserName As String
     
      strUserName = String$(254, 0)
      lngLen = 255
      lngX = apiGetUserName(strUserName, lngLen)
      If lngX <> 0 Then
         fOSUserName = Left$(strUserName, lngLen - 1)
        Else
         fOSUserName = ""
      End If
End Function[/code]

Private Sub Form_Load()
test = fOSUserName
End Sub


Titel: Re: dlookup-Funktion
Beitrag von: el_gomero am November 18, 2015, 10:39:35
wenn du Antwort #5 gelesen und umgesetzt hättest, wär das ganze Gedöns obsolet gewesen ...
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 10:49:41
@el_gomero: diese Variable gibt den gleichen Wert aus. Nämlich die U-Nr!
Titel: Re: dlookup-Funktion
Beitrag von: el_gomero am November 18, 2015, 10:51:33
also bei mir ergeben sowohl fOSUserName als auch Environ("username") den Windows-Anmeldenamen ;)
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 10:55:28
Aber wie bekomme ich meine "Übersetzung" zum realen Namen des Benutzers aus der Tabelle "User" hin? Ich habe gedacht, dass es über dlookup einfach zu erstellen gehen würde, aber anscheinend habe ich mich da geirrt. :-[
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 10:57:27
Hallo,
@Jürgen
Du kennst ja nicht die Strukturen von lutschi83.
Es kann ja sein, dass die UNR der Windows Anmeldename ist und in der Usertabelle ein Name hinterlegt ist, der mit dem Anmeldenamen nichts zu tun hat.
@lutschi83
nach der Formel im Feld hatte ich auch gefragt.
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 11:06:07
Also du hast es genau erfasst. Die UNR ist der Windows-Anmeldename. Welche Formel im Feld meinst du? Private Sub Form_Load()
test = fOSUserName
End Sub

Damit steht im Feld "test" die UNR aus der Windows-Anmeldung. Wie bekomme ich nun den Namen aus der Tabelle "User" in das Feld "Ersteller"???
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 11:09:21
Hallo,
ich meine die Formel mit dem DomWert.
Aber ich habe gesehen, meine Formel war sowieso falsch.
Versuche es mal so:
=DomWert("Username"; "User"; "[UNR] = '" & Test & "'")
Oder so:
=DomWert("Username"; "User"; "[UNR] = '" & fOSUserName() & "'")
In Letzterem kannst Du auf das Feld Test verzichten.
Versuche das fOSUserName mal mit und ohne Klammerpaar (), bin gerade nicht sicher.

Und noch mal der Hinweis, der Klarname gehört nicht in die Tabelle, der sollte nur angezeigt werden.

In das Feld Ersteller schreibst Du als Standardwert
=fOSUserName()
In jedem neuen Datensatz wird jetzt die UNR eingetragen, was reicht und richtig ist.
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 11:14:55
=DomWert("Username"; "User"; "[UNR] = '" & UNR & "'")
Habe ich als Steuerelementeinhalt eingetragen. Da bekomme ich den Fehler #Name?
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 11:16:58
Hallo,
siehe mein Nachtrag in #17.
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 11:23:17
Super! Danke, hat geklappt!!!!!
Titel: Re: dlookup-Funktion
Beitrag von: MzKlMu am November 18, 2015, 11:31:00
Hallo,
was hat jetzt geklappt?
Titel: Re: dlookup-Funktion
Beitrag von: lutschi83 am November 18, 2015, 12:39:04
=DomWert("Username"; "User"; "[UNR] = '" & fOSUserName() & "'")
Mit diesem Code, hat es funktioniert. Jetzt bekomme ich den Namen und in einem anderen Feld auch noch die Abteilung angezeigt!
Vielen Dank nochmals!!!
Titel: Re: dlookup-Funktion
Beitrag von: DF6GL am November 18, 2015, 13:06:30
Hallo,

ja, sorry, ich korrigiere das im Beitrag