Hallo,
ich versuche einen Bericht vor dem Öffnen mit einem dynamischen SQL String zu filtern. Ähnliche Lösungen habe ich an anderen Stellen schon zum Laufen gebracht aber in diesem Fall öffnet sich der Bericht immer mit allen DS der dahinterliegenden Abfrage, egal was ich einstelle/mache. Vielleicht hat jemand Tipps, was ich bei diesem einfachen Ansatz falsch machen könnte. Vielen Dank,
Ernst
Option Compare Database
Option Explicit
_________________________________
Private Sub MakeSQL()
Dim Krit As String
Krit = ""
If Not IsNull(Me!Kst) Then Krit = Krit & " AND Kst LIKE '" & Me!Kst & "*'"
If Not IsNull(Me!KstTr) Then Krit = Krit & " AND KstTr LIKE '" & Me!KstTr & "*'"
If Not IsNull(Me![Prüfungszeitraum-von]) Then Krit = Krit & " AND Belegdatum >= #" & Format(Me![Prüfungszeitraum-von], "yyyy-mm-dd") & "#"
If Not IsNull(Me![Prüfungszeitraum-bis]) Then Krit = Krit & " AND Belegdatum <= #" & Format(Me![Prüfungszeitraum-bis], "yyyy-mm-dd") & "#"
If Krit <> "" Then
Krit = Mid(Krit, 5)
End If
End Sub
___________________________________________
Private Sub Befehl26_Click()
Dim Krit As String
MakeSQL
DoCmd.OpenReport "rptJahresrechnungsprüfung", acViewPreview, , Krit
End Sub
Guten Morgen,
ich kann mir nicht vorstellen, dass das funzt denn ...
In der Befehl26_Click deklarierst du Krit ein weiteres mal und übergibst dann dem Open-Befehl eine LEERE Variable als Parameter!
Lösung:
Mache aus Private Sub MakeSQL eine Function:
Private Function MakeSQL()as String
Dim Krit As String
Krit = ""
If Not IsNull(Me!Kst) Then Krit = " AND Kst LIKE '" & Me!Kst & "*'"
If Not IsNull(Me!KstTr) Then Krit = " AND KstTr LIKE '" & Me!KstTr & "*'"
If Not IsNull(Me![Prüfungszeitraum-von]) Then Krit = Krit & " AND Belegdatum >= #" & Format(Me![Prüfungszeitraum-von], "yyyy-mm-dd") & "#"
If Not IsNull(Me![Prüfungszeitraum-bis]) Then Krit = Krit & " AND Belegdatum <= #" & Format(Me![Prüfungszeitraum-bis], "yyyy-mm-dd") & "#"
If Krit <> "" Then
Krit = Mid(Krit, 5)
End If
MakeSQL = Krit
End Sub
und ändere die Befehl26_Click ...
Private Sub Befehl26_Click()
Dim Kriterium as String
Kriterium = MakeSQL
DoCmd.OpenReport "rptJahresrechnungsprüfung", acViewPreview, , Kriterium
End Sub
Alternativ KÖNNTEST du auch den gesamten Code in der Befehl26_Click ausführen ... ;D
Mal sehen ob's jetzt besser geht ...
HTH
Peter
Hallo,
die Sub sollte zu einer Funktion werden.
Private Function MakeSQL() As String
Dim Krit As String
Krit = ""
If Not IsNull(Me!Kst) Then Krit = Krit & " AND Kst LIKE '" & Me!Kst & "*'"
If Not IsNull(Me!KstTr) Then Krit = Krit & " AND KstTr LIKE '" & Me!KstTr & "*'"
If Not IsNull(Me![Prüfungszeitraum-von]) Then Krit = Krit & " AND Belegdatum >= #" & Format(Me![Prüfungszeitraum-von], "yyyy-mm-dd") & "#"
If Not IsNull(Me![Prüfungszeitraum-bis]) Then Krit = Krit & " AND Belegdatum <= #" & Format(Me![Prüfungszeitraum-bis], "yyyy-mm-dd") & "#"
If Krit <> "" Then
MakeSQL = Mid(Krit, 5)
End If
End Function
Die Funktion braucht auch einen Rückgabewert.
Aufruf:
Private Sub Befehl26_Click()
DoCmd.OpenReport "rptJahresrechnungsprüfung", acViewPreview, , MakeSQL
End Sub
Das Kriterium selbst habe ich nicht nachgesehen.
Hallo,
wenn
Dim Krit As String
aus den Subs herausgenommen wird und als
Private Krit As String
im Formularmodulkopf zu stehen kommt, dann kann es bei der SUB als solches bleiben.
Wobei eine Funktion mit Rückgabewert zu bevorzugen ist...
Hallo,
herzlichen Dank an Alle, die sich die Mühe gemacht haben zu antworten. Habe den Vorschlag von MzKlMu umgesetzt und es funktioniert jetzt natürlich. Als Neuling steht man oft ganz schön weit daneben. Nochmals Dank.
Ernst