Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: ere72070 am Januar 22, 2015, 10:29:26

Titel: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: ere72070 am Januar 22, 2015, 10:29:26
Hallo,
ich erstelle Gerade eine Zeiterfassungsdatenbank.
Es gibt keinen Login, sondern der Nutzer wird durch auslesen des Windows Logins identifiziert.
(Function fosUserName = Windows Username)
Wenn der Nutzer auf den Button frmZeit klickt öffnet sich das Unterformular frmZeit was die Tabelle EZIS in Tabellenform darstellt.

Ich möchte das die Personalnummer der Mitarbeiters automatisch an das Unterformular übergeben wird und nur die Daten mit den Zeiten des Mitarbeiters angezeigt werden.

Wenn ich im ButtonZeiterfassung --> Daten --> Where-Klausel für Navigation:  "Personalnummer=PersNr" eingebe öffnet sich ein Fenster in dem ich die PErsonalnummer händisch eingeben muss. Ich möchte das aber gerne automatisch über die Tabelle tblMitarbeiter auslesen und übergeben lassen.

Tabellen:
tblMitarbeiter  (Stammdaten)
   Anmeldename (Text), Vorname(Text), Nachname(Text), Personalnummer(Zahl) 
EZIS:   (Zeiten pro Mitarbeiter)
   Personalnummer(Zahl), Datum, Anwesenheit (Stunden)

Formulare:
frmNavigation = Navigationsformular  (Start, frmZeit, Reports, Admin)
frmZeiterfassung = Tabelle EZIS

Der Button ButZeiterfassung startet das Fomular frmZeit.

Ich habe es auch schon über ein Makro versucht, hat aber nicht geklappt:
Private Sub ButZeiterfassung_Click()

Dim PersNr As Integer
    PersNr = DLookup("[MA_Nummer]", "tblMitarbeiter", "[Anmeldename]='" & fOSUserName & "'")
    Me.Filter = "Personalnummer Like '" & PersNr & "'"
End Sub


Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: MaggieMay am Januar 22, 2015, 11:45:49
Hallo,

wo soll denn die PERSNR wohl herkommen bzw. genommen werden?!

Versuche es mal mit dem folgenden Kriterium:Anmeldename=Forms!Navigationsformular!loginalso mit Bezug auf das Formularfeld mit dem Benutzernamen.

Der sollte dann allerdings gleich beim Öffnen des Formulars dort eingestellt werden.
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: ere72070 am Januar 22, 2015, 12:16:01
Hallo,
danke, aber ich habe die Antwort leider nicht ganz verstanden.
Was ich meinte war:

bei klick auf den Button "ButtonZeiterfassung" sollte die Personalnummer über die Tabelle tblMitarbeiter ermittelt werden. Der Login Name ist ja schon bekannt (fosUsername).
z.b. könnte die Abfrage zur Ermittlung der Personalnummer so aussehen:
PersNr = DLookup("[MA_Nummer]", "tblMitarbeiter", "[Anmeldename]='" & fOSUserName & "'")

Danach müsste das Unterfomular ftmZeiterfassung geöffnet und dabei nach "Personalnummer=PersNr" gefiltert werden.

Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: database am Januar 22, 2015, 12:56:03
Hallo,

versuche einmal:


Private Sub ButZeiterfassung_Click()

    Dim PersNr As Integer
    PersNr = DLookup("[MA_Nummer]", "tblMitarbeiter", "[Anmeldename]='" & fOSUserName & "'")
    If Not IsNull(PersNr) Then
        DoCmd.OpenForm "frmZeiterfassung",,,"Personalnummer=" & PersNr
    Else
        MsgBox "Personalnummer existiert nicht!"
    End If   

End Sub

Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: DF6GL am Januar 22, 2015, 13:00:36
Hallo,


kleiner Hinweis:

Dim PersNr As Variant

und

..."[Anmeldename]='" & fOSUserName() & "'")

falls fOSUserName eine Funktion ist.
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: database am Januar 22, 2015, 13:03:56
Hi,
wenn die PersNr keine Integerzahl ist passt die Where-Klausel auch nicht  ???
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: DF6GL am Januar 22, 2015, 13:05:27
Tja...
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: database am Januar 22, 2015, 13:06:50
Hmm...  :D
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: ere72070 am Januar 22, 2015, 13:09:23
Hallo Peter,
vielen Dank das hat super geklappt.
Leider öffnet sich aber beim klicken ein neues Formularfenster und das Formular ist komischerweise nicht mehr in Tabellenformat sondern im Datensatzformat.

Gibt es eine Möglichkeit das Formular innerhalb des Navigationsmenüs zu öffnen ?
So wie im Screenshot DB3.

Danke

Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: MaggieMay am Januar 22, 2015, 13:27:25
Zitat von: ere72070 am Januar 22, 2015, 12:16:01danke, aber ich habe die Antwort leider nicht ganz verstanden.
Was ich meinte war:
stelle das Kriterium der Abfrage für das Unterformular so wie von mir vorgeschlagen ein oder alternativ so:Anmeldename=fOSUserName()
Das Datenfeld "Anmeldname" muss natürlich in der Datenherkunft der Abfrage enthalten sein.

Eine andere Möglichkeit wäre, ein Hilfsfeld mit folgendem Steuerelementinhalt ins Hauptformular zu setzen:=DomWert("[MA_Nummer]"; "tblMitarbeiter"; "[Anmeldename]=fOSUserName()")und sich in der Abfrage darauf zu beziehen.
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: ere72070 am Januar 22, 2015, 13:55:52
Danke es hat geklappt !

VBA Navigationsformular:
Dim PersNr As Integer
PersNr = DLookup("[MA_Nummer]", "tblMitarbeiter", "[Anmeldename]='" & fOSUserName & "'")
Forms![frmNavigation]![txtPersNr] = PersNr

Und im Entwufsmodus in Navigationsformular auf das Textfeld verlinken:
WHERE Klausel für Navigation: Personalnummer=txtPersNr

so klappt das im Naviformular.

Besten Dank


Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: database am Januar 22, 2015, 14:00:48
OK, das direkte Navigieren zu einem Register eines Navi-Forms sollte auch so gehen


Private Sub ButZeiterfassung_Click()

    Dim PersNr As Integer
    PersNr = DLookup("[MA_Nummer]", "tblMitarbeiter", "[Anmeldename]='" & fOSUserName & "'")
    If Not IsNull(PersNr) Then
       'Das Navigationsformular öffnen
        DoCmd.OpenForm "frmNavigation"
       'zur gewünschten Registerkarte navigieren
       DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
       ObjectName:="frmZeiterfassung", _
       'im Folgenden den Namen des Navigationsunterformulars eintragen,
       'wenn du diesen nach der Erstellung geändert hast
       PathToSubformControl:="frmNavigation.Navigationsunterformular", _
       'Nur Daten der ausgewählten PersNr anzeigen         
       WhereCondition:="Personalnummer=" & PersNr, _
       Page:="", _
       DataMode:=acFormEdit
    Else
        MsgBox "Personalnummer existiert nicht!"
    End If   

End Sub




probier das bitte mal aus
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: MaggieMay am Januar 22, 2015, 14:20:47
Hi,

kleine Anmerkung:
Eine Integer-Variable kann nicht den Wert NULL annehmen.
An der Stelle würde es dann knallen, besser also als Variant deklarieren oder NZ() einsetzen.
Titel: Re: Navigationsformular - Where Klausel für Navigation - per Variable ansteuern
Beitrag von: database am Januar 22, 2015, 17:29:13
Hi,
stimmt natürlich, danke für den Nachtrag!

Daher:
Dim PersNr As Variant