Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mit Filterfunktion nicht in Menü ?

Begonnen von OEACC, Oktober 30, 2010, 18:08:12

⏪ vorheriges - nächstes ⏩

OEACC

Hallo,

ich habe eine Abfrage, die Daten für unterschiedlichste Auswertungen enthält. Wenn ich die Abfrage direkt aufrufe, habe ich die Möglichkeit, jeweils unterschiedliche Filter zu setzen.
Im Menü kann ich jedoch nur Berichte integrieren, in denen aber keine Filter möglich sind. Welchen Weg gibt es, um aus einem Menü besagte Abfrage zu starten ? (Sonst müsste man ja etliche unterschiedliche Berichte machen.
Gruss OEACC

database


OEACC

Hallo,

nicht wirklich, da ich eine Vielzahl an Filtern nutzen möchte.
Gruss OEACC

database

Naja, da gäbe es dann auch die Möglichkeit den SQL-String deiner Abfrage dynamisch zusammenzusetzen und diesen dann der Abfrage zuzuweisen bevor der Bericht aufgerufen wird.

Die Kriterien KÖNNEN dazu in einem Formular zusammengeklickt oder/und ausgewählt werden, im Klickereignis
des Berichtaufruf-Buttons wird dann der SQL-String erstellt, der Abfrage zugewiesen und dann der Bericht aufgerufen.

wie klingt das?

Peter

OEACC

Hallo,

das klingt hervorragend - aber dafür reichen meine Kenntnisse nicht und bin damit überfordert
Gruss Erich

database

Würde dir ein kleines Beispiel helfen, das du dann in deine DB anpassen und einbauen kannst?

Wenn ja - was soll der Bericht in Etwa darstellen, welche Kriterien willst du beispielsweise setzen (2-3)

oder kannst du deine DB mit ein paar Testdaten zippen und hochladen?

OEACC

DB trotz komprimierung und zip zu gross für DFÜ.

Im bestehenden Bericht (Abfrage) wollte ich filtern (auch in Kombination) :
- Datum (eigentlich nur der Monat)
- Gast-Nr (Primärschlüssel)
- DIC-MA-Nr (Primärschlüssel)
- Kassen-Nr (Primärschlüssel)

database

Also dann mal in Kurzform ...

Die SQL deiner Abfrage - ich nehme an um diese hier dreht es sich - lautet:


SELECT DISTINCTROW Gast.GANR, Gast.GANA, Gast.GAVN, Gast.GAMNR, Gast.GAKNR, Kasse.KKNR, Kasse.KKNA, Kasse.KKPLZ, Kasse.KKORT, Kasse.KKSTR, Kasse.KKANR, Kasse.KKMW, Kasse.KKAPN, Kasse.KKAPV, Format$([Leistung].[LEDAT],'mmmm yyyy') AS [LEDAT nach Monaten], Sum(Gast.GAMNR) AS [Summe von GAMNR], Sum(Leistung.LEKKSU) AS [Summe von LEKKSU]
FROM Kasse INNER JOIN (Gast INNER JOIN (DIC INNER JOIN Leistung ON DIC.DCNR=Leistung.LEDCNR) ON Gast.GANR=Leistung.LEGANR) ON Kasse.KKNR=Gast.GAKNR
WHERE (((Leistung.LEKKSU)>0))
GROUP BY Gast.GANR, Gast.GANA, Gast.GAVN, Gast.GAMNR, Gast.GAKNR, Kasse.KKNR, Kasse.KKNA, Kasse.KKPLZ, Kasse.KKORT, Kasse.KKSTR, Kasse.KKANR, Kasse.KKMW, Kasse.KKAPN, Kasse.KKAPV, Format$([Leistung].[LEDAT],'mmmm yyyy'), Year([Leistung].[LEDAT])*12+DatePart('m',[Leistung].[LEDAT])-1
HAVING (((Month([LEDAT]))=[Monat eingeben]));


Mal angenommen die Abfrage heißt 'qryMonatsbericht' und du willst ein spezielles Monat haben dann müsste die SQL erst mal in einen String gefaßt werden und die WHERE-Klausel verändert werden.
Danach der ganze String zusammengesetzt und deiner Abfrage zugewiesen werden.
Das gewünschte Monat gibst du in einem Formularfeld ('txtMonat') als Zahl bekannt und drückst dann den Button 'cmdBericht' um den Bericht 'rptMonatsbericht' zu öffnen und anzuzeigen
so dann sieht das in Etwa so aus:


Private Sub cmdBericht_Click()

   Dim strSQL As String
   
   strSQL = "SELECT DISTINCTROW Gast.GANR, Gast.GANA, Gast.GAVN, Gast.GAMNR, Gast.GAKNR, Kasse.KKNR, Kasse.KKNA, Kasse.KKPLZ, Kasse.KKORT, " & _
           "Kasse.KKSTR, Kasse.KKANR, Kasse.KKMW, Kasse.KKAPN, Kasse.KKAPV, Format$([Leistung].[LEDAT],'mmmm yyyy') AS [LEDAT nach Monaten], " & _
           "Sum(Gast.GAMNR) AS [Summe von GAMNR], Sum(Leistung.LEKKSU) AS [Summe von LEKKSU] " & _
           "FROM Kasse INNER JOIN (Gast INNER JOIN (DIC INNER JOIN Leistung ON DIC.DCNR=Leistung.LEDCNR) ON Gast.GANR=Leistung.LEGANR) " & _
           "ON Kasse.KKNR=Gast.GAKNR " & _
           "WHERE (((Leistung.LEKKSU) > 0)) " & _
           "GROUP BY Gast.GANR, Gast.GANA, Gast.GAVN, Gast.GAMNR, Gast.GAKNR, Kasse.KKNR, Kasse.KKNA, Kasse.KKPLZ, Kasse.KKORT, Kasse.KKSTR, " & _
           "Kasse.KKANR, Kasse.KKMW, Kasse.KKAPN, Kasse.KKAPV, Format$([Leistung].[LEDAT],'mmmm yyyy'), Year([Leistung].[LEDAT])*12+DatePart('m',[Leistung].[LEDAT])-1"

    'Frage ob im Feld Monat etwas eingetragen wurde
    If Not IsNull(Me!txtMonat) Then
        'Es wurde ein Monat definiert daher wird der Filter für die gruppierte Abfrage gesetzt
        strSQL = strSQL & " HAVING Month([LEDAT])=" & Me!txtMonat & ";"
    End If

    'Die Abfrage ändern
    CurrentDb.QueryDefs("qryMonatsbericht").SQL = strSQL

    'Den Bericht aufrufen und anzeigen
    DoCmd.OpenReport "rptMonatsbericht", acViewPreview

End Sub


Sollte funktionieren...   ::)

Hoffe ich habs richtig herprogrammiert und du kannst dem folgen - ist ein wenig viel für die Uhrzeit aber ...  ;D

Grüße
Peter

OEACC

Holla, habe nur begrenzte Access Kenntnisse - brauche einige Zeit, das zu verstehen und zu probieren
melde mich dann wieder - bis dahin danke

GRuss Erich

database

 ;D ;D ;D

kein Problem, lass dir ruhig Zeit und schau dir die Sache gut an.

Schönen Sonntag
Peter