Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: gromax am Februar 15, 2015, 17:30:37

Titel: Weiteres Filterkriterium zum Berichtsaufruf
Beitrag von: gromax am Februar 15, 2015, 17:30:37
Hallo, liebe Access-Gemeinde,

jetzt habe ich ein Problem und habe ob meiner defiziten Kenntnisse keine Lösung! Für eine Unterstützung bin ich - wie so oft schon – sehr dankbar.
Über ein Formular (frm_AuswahlRptEinzeln) mit einem Kombinationsfeld (cbo_FrmAuswahl) rufe ich einen Bericht zu Lehrkräften auf: also Namen (Verkettung von Nach- und Vornamen)  ausgewählt und der Bericht (rpt_EINZELBERICHT) mit Detaildaten zu Abwesenheitszeiten wird angezeigt.
Ich habe jetzt zwei Lehrkräfte, die gleichen Namens aber unterschiedlichem Geburtsdatum sind; diese werden im Kombinationsfeld korrekt untereinander angeordnet.
Über folgende Prozedur wird der Bericht aufgerufen:


Private Sub cbo_FrmAuswahl_AfterUpdate()
    ' Fehlerbehandlung einschalten
    On Error GoTo cmdOK_Error

    ' Benötigte String-Variable
    Dim sPerson As String
    Dim sKriterium As String
   
    ' Zuweisung der Auswahl aus den Kombinationsfelder
    sPerson = Me!cbo_FrmAuswahl

    ' Überprüfung auf Personenkreis
    ' Wenn ein Eintrag ausgewählt wurde, also die Länge
    ' der Zeiechenfolge größer 0 ist dann,
    If Len(sPerson) > 0 Then
        ' wurde etwas anderes ausgewält, als A = (Alle), dann
        If sPerson <> "A" Then
            ' Wurde bereits ein Kriterium erstellt, dann
            If Len(sKriterium) > 0 Then
                ' füge eine Und-Verknüpfung für die WHERE-Klausel
                ' bei
                sKriterium = sKriterium & " AND "
            End If
            ' Erstellung des Kriteriums für den Personenkreis,
            ' da hier eine Zeichenfolge übergeben wird, muss der
            ' Inhalt der Variable in Anführungszeichen gesetzt
            ' werden
            sKriterium = sKriterium & "[LEH_Name]='" & sPerson & "'"
        End If
    End If
   
    ' Aufrufen des Berichts in der Seitenansicht,
    ' mit Übergabe der Where-Klausel, falls gesetzt wurde.
    ' Wurde die Where-Klausel nicht gesetzt (sprich sie ist
    ' leer), werden alle Datensätze angezeigt
    DoCmd.OpenReport ReportName:="rpt_EINZELBERICHT", _
    WhereCondition:=sKriterium, View:=acViewReport
       
    ' Zurücksetzen des Fokus auf das Kombinationsfeld
    Me!cbo_FrmAuswahl.SetFocus

cmdOK_End:
    Exit Sub
cmdOK_Error:
    ' Fehlerbehandlung
    ' Falls der Berichtsaufruf abgebrochen wurde, dann
    If Err.Number = 2501 Then
        ' führe die nächste Anweisung durch
        Resume Next
    ' sonst
    Else
        ' Gebe die Fehlermeldung aus
        MsgBox "Fehernummer: " & Err.Number & vbCrLf & _
        "Fehler: " & Err.Description, vbOKOnly, "Fehler"
        Resume cmdOK_End
    End If
End Sub


(Um der Wahrheit die Ehre zu geben, diese Prozedur habe ich irgendwoher abgekupfert!)

Das Problem:
Der Bericht behandelt die beiden Kollegen wie einen einzelnen Kollegen und summiert die entsprechenden Fehlzeiten unabhängig des tatsächlichen Namensaufrufs. Wohl wird ausschließlich der Namen dem Bericht als Filter übergeben.
Wie kann ich denn zusätzlich das Geburtsdatum als Filterkriterium einpflegen?

Vorab vielen Dank für die Unterstützung!
Viele Grüße
gromax

Titel: Re: Weiteres Filterkriterium zum Berichtsaufruf
Beitrag von: MzKlMu am Februar 15, 2015, 17:46:56
Hallo,
ZitatIch habe jetzt zwei Lehrkräfte, die gleichen Namens aber unterschiedlichem Geburtsdatum sind;
mit einem Primärschlüssel in der Lehrertabelle (wie es in einer Datenbank sein sollte) wäre das kein Problem. Und die Übergabe reduziert sich auf ein Feld. Ich halte den Einbau eines Primärschlüsselfeldes (Autowert) für unerlässlich. Eine Datenbanktabelle ohne Primärschlüssel ist wertlos.
Mit Primärschlüssel reduziert sich der obige Code auf 4-5 Zeilen, wenn überhaupt.
Titel: Re: Weiteres Filterkriterium zum Berichtsaufruf
Beitrag von: gromax am Februar 15, 2015, 18:45:56
Hallo MzKIMu,

danke für die schnelle Antwort, aber ich habe natürlich einen Primärschlüssel gesetzt (vgl. Anlage).
Für eine "einfache Lösung" bin ich immer zu haben?!

Viele Grüße
gromax
Titel: Re: Weiteres Filterkriterium zum Berichtsaufruf
Beitrag von: MzKlMu am Februar 15, 2015, 19:02:42
Hallo,
und warum verwendest Du den dann nicht, das ist doch der Sin eines PS, Eindeutigkeit sicher zu stellen.
welcher Datentyp ist der PS, Autowert ? Falls Autowert dann so:
Private Sub cbo_FrmAuswahl_AfterUpdate()
On Error GoTo cmdOK_Error
    If Me!cbo_FrmAuswahl <> "A" Then
        DoCmd.OpenReport "rpt_EINZELBERICHT", acViewReport, , "LEH_PS = " & Me!cbo_FrmAuswahl
    Else
        DoCmd.OpenReport "rpt_EINZELBERICHT", acViewReport
    End If
        Me!cbo_FrmAuswahl.SetFocus
cmdOK_End:
    Exit Sub
cmdOK_Error:
    ' Fehlerbehandlung
    ' Falls der Berichtsaufruf abgebrochen wurde, dann
    If Err.Number = 2501 Then
        ' führe die nächste Anweisung durch
        Resume Next
    ' sonst
    Else
        ' Gebe die Fehlermeldung aus
        MsgBox "Fehernummer: " & Err.Number & vbCrLf & _
        "Fehler: " & Err.Description, vbOKOnly, "Fehler"
        Resume cmdOK_End
    End If
End Sub
ungetestet. Bei Fehler bitte melden.
Das Kombifeld muss als 1.Spalte den Primärschlüssel (LEH_PS) anzeigen. Wird aber mit Spaltenbreite 0cm ausgeblendet. In der Abfrage für das Kombi muss die 1.Spalte der PS sein. Gebundene Spalte das Kombis: 1, Spaltenzahl >1, je nachdem wie viele Spalten das Kombi anzeigen soll.
Titel: Re: Weiteres Filterkriterium zum Berichtsaufruf
Beitrag von: gromax am Februar 15, 2015, 19:21:54
Hallo Klaus,

Du bist 'ne Wucht! Ich beneide Euch, die Ihr solche Prozeduren schreiben könnt, wie ich dies vielleicht bei Glückwunschkarten kann!

Vielen Dank! Du hast mir sehr geholfen!!

Noch einen schönen Sonntag und einen guten Start in die Woche!
gromax