Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: itaflo am März 02, 2015, 08:13:57

Titel: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 08:13:57
Hallo

ich habe folgendes problem,

ich habe eine Zeiterfassungsdatenbank erstellt in der ich ein Hauptformular (Anmeldeformular Benutzer, Passwort) der nach dem Login in ein anderes Formular soll. Das funktioniert auch soweit, nur habe ich in dem Formular noch eine Abfrage in denen verschiedene Spalten sind unter anderem die Spalte Benutzer (Customer).
ich habe versucht über mein Bestehenden VBA code noch die funktion einzubinden in dem es mir erlaubt nach dem Login auf einen der Spalte "Benutzer" nach einen Namen zu Filtern.

If Username = "***" And Password = "***" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", acNormal, "", ""
DoCmd.OpenForm "frmClockIn", , , "Customer = '***'"
Else

irgendwie geht das aber leider nicht wie erhofft.

ich hoffe ihr könnt mir weiter helfen.
Titel: Re: VBA filter in Formular
Beitrag von: Nadeshiko am März 02, 2015, 08:40:34
Guten morgen!

Hier zwei Alternativen:

1. Filter direkt im Formular, beim Einloggen:
    DoCmd.OpenForm "FormularName"
        With FormularName.Recordset
            .FindFirst "[Customer] = " & 'Kriterium'
        End With

2. Oder du setzt den Filter beim Laden des darauffolgenden Formulars

Sprich:

Das Formular öffnet sich, dann ladet er den Filter:

                'Öffnen des Formulars
     
      Dim strfilter As String

     strfilter = "Customer ='" & Kriterium & "'

         
     With FormularName.Form
         .Filter = strfilter
         .FilterOn = True
    End With


PS: Je nachdem ob du einen Wert zurückgegeben haben willst (1ste Alternative) oder mehrere (2te Alternative)
Titel: Re: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 09:04:26
Hallo,

ich wollte das er mir nicht einen Bestimmten Filter setzt sondern Benutzerspezifisch heist, wenn beispielsweise Thomas Müller sich im Anmeldeformular einloggt das dann auch nach dem Namen gefiltert wird.
Da es aber mehrere Benutzer gibt würde das aber leider nicht funktionieren

If Username = "Thomas Müller" And Password = "123" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", acNormal, "", ""
DoCmd.OpenForm "frmClockIn", , , "Customer = 'Thomas Müller'"Else

vielleicht liegt es daran dass ich eine Abfrage als Unterformular habe?
Titel: Re: VBA filter in Formular
Beitrag von: DF6GL am März 02, 2015, 09:31:48
Hallo,

die ganze Vorgehensweise ist nicht zielführend..

Im Login-Form:

Sub btnLogin_Click()

' Hier Code zur Verifikation der Anwendernamens und des Passwortes und holen der UserID aus der User-Tabelle

Select Case UserID   
Case 1   
DoCmd.OpenForm "frmClockIn" ' 1 ist z. B. der Admin

Case 2
'  Tu was, wenn UserID = 2 ist
   
Case Else
DoCmd.OpenForm "frmClockIn", , , "Customer = '" & Me!Username & "'"    'falls das Form das Feld "Customer" in seiner Datenherkunft enthält.

End Select

End Sub
Titel: Re: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 10:25:55
Hallo

If Username = "Thomas Müller" And Password = "123" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", acNormal, "", ""

dieser Code funktioniert einwandfrei

das Feld Customer ist aus einer Abfrage als Unterformular drin

das Unterformular heist: frmClockIn_SUB

und die Abfrage qry_ReviewTime

ich wollte den Code erweitern in dem Er mir für einen bestimmten User auch einen bestimmten Filter setzt

der Ganze lautet so:

Private Sub Befehl4_Click()

If attempts >= 3 Then
MsgBox "Sie haben keine Rechte, die Datenbank zu öffnen. Bitte kontaktieren Sie den Administrator", vbCritical, "Access Denied"
Application.Quit
End If

If Username = "Thomas" And Password = "123" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", acNormal, "", ""
DoCmd.OpenForm "frmClockIn", , , "Customer = 'Thomas'"
Else

If Username = "Maximilian" And Password = "456" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", acNormal, "", ""
DoCmd.OpenForm "frmClockIn", , , "Customer = 'Maximilian'"

Else

If Username = "" And Password = "" Then
MsgBox "Sie müssen einen Benutzer und ein korrektes Passwort eingeben"
attempts = attempts + 1

Else

MsgBox "Falscher Benutzer oder falsches Passwort", vbOKOnly, "Invalid Data"
Username = ""
Password = ""
Username.SetFocus
attempts = attempts + 1
End If
End If
End If


End Sub
Titel: Re: VBA filter in Formular
Beitrag von: Nadeshiko am März 02, 2015, 11:22:56
Hallo,

bin mir aber trotzdem nicht sicher warum du zwei mal das gleiche Formular ins Fokus bringst :)

DoCmd.OpenForm "frmClockIn", acNormal, "", ""
DoCmd.OpenForm "frmClockIn", , , "Customer = 'Thomas'"

Du öffnest quasi das Formular frmClockIn und dann nochmals, aber mit Kriterium. Wenn das einmal schon geöffnet ist, weiß ich nicht, ob er bei der zweiten Zeile nun das Kriterium übernimmt (weil das Formular ja schon offen ist). Habs aber noch nicht ausprobiert.
Eigentlich sollte das vollkommen ausreichen:
DoCmd.OpenForm "frmClockIn", , , "Customer = 'Thomas'"

Jetzt habe ich es selbst noch nie probiert, aber wenn es immer noch nicht klappt und es an der Abfrage liegt, musst du wohl auf SQL umsteigen. Kopier einfach den SQL Text aus der Abfrage und benutz diese per VBA mit der Übergabe des WHERE-Kriteriums






Titel: Re: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 11:55:08
stimmt

hab es abgeändert

If Username = "Thomas" And Password = "123" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn_SUB", , , "Customer = 'Thomas'"
Else

das problem jetzt aber ist das nach dem Login nur das unterformular geöffnet wird ohne das eigentliche formular selber

filter hätte auch funktioniert
Titel: Re: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 12:39:19
so langsam komme ich der Sache näher aber Accsess sagt mir das das Ausgesprochene Feld Thomas nicht gefunden werden kann

If Username = "Thomas" And Password = "123" Then
DoCmd.Close acForm, "Login Form", acSaveNo
DoCmd.OpenForm "frmClockIn", , stLinkCriteria
Forms(frmClockIn)![frmClockIn_SUB].Form.Filter = "[Customer]= " & Me![Thomas]
Forms(frmClockIn)![frmClockIn_SUB].Form.FilterOn = True
Else

was ist hier falsch
Titel: Re: VBA filter in Formular
Beitrag von: DF6GL am März 02, 2015, 12:40:21
Hallo,

wenn Du ein (Haupt)-Form öffnest mit Where-Condition-Parameter-Angabe, dann wird doch nicht das Unter-Formular gefiltert....


Wie ist denn überhaupt der Zusammenhang zwischen Haupt- und Unterform ? Gibt es da Verknüpfungseinstellungen?

Probier mal folgendes:

If Username = "Thomas" And Password = "123" Then
DoCmd.Close acForm, "Login Form"[u], acSaveNo[/u]
DoCmd.OpenForm "frmClockIn"
Forms!frmClockIn!frmClockIn_Sub.Form.Filter =  "Customer = 'Thomas'"
Forms!frmClockIn!frmClockIn_Sub.Form.FilterOn =True
Else



Und nochmal:  Das Ganze ist nicht zielführend... ::)
Titel: Re: VBA filter in Formular
Beitrag von: itaflo am März 02, 2015, 12:55:15
Unglaublich das ist genau das was ich gesucht habe
vielen Dank  ;D