Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Bericht mit dynamischen SQL Filter öffnen funktioniert nicht

Begonnen von EBlajs, September 28, 2010, 00:58:28

⏪ vorheriges - nächstes ⏩

EBlajs

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

database

#1
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



MzKlMu

#2
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.
Gruß Klaus

DF6GL

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...



EBlajs

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