Hallo Leute,
ich habe ein Formular mit einem Unterformular, dass über Private Sub Filter_Click()
Dim strVon As String
Dim strBis As String
Dim strKrit As String
If IsDate(Me.txtvon) And IsDate(Me.txtbis) Then
strVon = Format(Me!txtvon, "\#yyyy\-mm\-dd\#")
strBis = Format(Me!txtbis, "\#yyyy\-mm\-dd\#")
strKrit = "Rechnungsdatum Between " & strVon & " AND " & strBis
Forms!faktura!Faktura_ufa.Form.Filter = strKrit
'Debug.Print strKrit
Forms!faktura!Faktura_ufa.Form.FilterOn = True
Else
Forms!faktura!Faktura_ufa.Form.Filter = ""
Forms!faktura!Faktura_ufa.Form.FilterOn = False
End If
End Sub gefiltert wird.
Nun möchte ich, dass dieser Filter auf meinen erzeugten Bericht übergeben wird, wenn ich den Button "Bericht" klicke.
Bisher habe ich folgende Prozedur beim klicken laufen Private Sub Bericht_Click()
DoCmd.OpenReport "faktura", acViewReport, , "[Firma]='" & Me.Firma & "'"
End Sub
Wie muss ich diesen Code ergänzen, dass die gefilterten Datensätze aus dem Unterformular übergeben werden?
Hi,
du könntest folgendes versuchen:
- übergib den Filter via OpenArgs beim Öffnen des Berichts
- greife im Open-Ereignis des Unterberichts mit Me.Parent.OpenArgs darauf zu und setze den Filter
Danke für die Antwort....
Aber ich bin leider nicht fit in VB und hab keine Ahnung, wie dieser Code aussehen soll... :-[
Hi,
so wird der Filter übergeben:
DoCmd.OpenReport "faktura", acViewReport, , "[Firma]='" & Me.Firma & "'", , Me!Faktura_ufa.Form.Filter
Und so könnte er im Unterbericht eingesetzt werden:
If Me.Parent.OpenArgs <> "" Then
Me.Filter = Me.Parent.OpenArgs
Me.FilterOn = True
End If(ungetestet)
Muss ich dann den Code If Me.Parent.OpenArgs <> "" Then
Me.Filter = Me.Parent.OpenArgs
Me.FilterOn = True
End If beim Laden des Berichtes eintragen oder was ist mit "Unterbericht" gemeint?
Das hatte ich bereits geschrieben:
Zitat von: MaggieMay am Mai 18, 2015, 11:10:49
- greife im Open-Ereignis des Unterberichts mit Me.Parent.OpenArgs darauf zu und setze den Filter
Oder hast du gar keinen Unterbericht? Dann beschreibe die Zusammenhänge bitte genauer.
Was wird im Haupt- und Unterformular dargestellt und was soll der Bericht zeigen?
Hi,
ich habe die Datenbank mal angehängt. Im Formular "Faktura" setze ich den Filter für das Unterformular und nun möchte ich, dass der Bericht die gefilterten Datensätze anzeigt.
Es handelt sich also nur um einen Hauptbericht, da kannst du den erweiterten Filter beim Öffnen des Berichts folgendermaßen übergeben:
Private Sub Befehl102_Click()
Dim strKrit As String
strKrit = "[Firma]='" & Me.Firma & "'"
If Me!Faktura_ufa.Form.FilterOn = True Then
strKrit = strKrit & " AND " & Me!Faktura_ufa.Form.Filter
End If
DoCmd.OpenReport "faktura", acViewReport, , strKrit
End Sub
Allerdings sollte nach Möglichkeit stets über die ID gefiltert werden und nicht über den Namen.
BTW:
Was mir noch aufgefallen ist, betrifft die Verbindung zwischen Bestelldetails und Artikeln, und zwar sollte auch hier die Datensatz-ID verwendet werden, zunmal die Artikelbezeichnung nicht eindeutig ist. Weitere Artikel-Datenfelder werden in der Tabelle nicht benötigt und sollten entfernt werden.
Des weiteren solltest du allen Feldern eindeutige Namen geben, und auch nicht einfach nur ID für den Datensatzschlüssel verwenden. Fremdschlüssel können durch ein angehängtes "_F" kenntlich gemacht werden. Auf Sonderzeichen inkl. Leerzeichen) sollte generell verzichtet werden, ebenso auf allzu lange Namen.
Sinnvoll ist es auch, den Objektnamen sprechende Präfixe zu geben, wie bspw. tbl, abf, frm, rpt, etc.