Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: OEACC am Oktober 30, 2010, 18:08:12

Titel: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: OEACC am Oktober 30, 2010, 18:08:12
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
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: database am Oktober 30, 2010, 18:12:36
Hallo,

hilft dir vielleicht dieser Beitrag weiter?

http://www.access-o-mania.de/forum/index.php?topic=3748.0 (http://www.access-o-mania.de/forum/index.php?topic=3748.0)

Grüße

Peter
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: OEACC am Oktober 30, 2010, 18:21:01
Hallo,

nicht wirklich, da ich eine Vielzahl an Filtern nutzen möchte.
Gruss OEACC
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: database am Oktober 30, 2010, 18:28:27
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
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: OEACC am Oktober 30, 2010, 18:33:39
Hallo,

das klingt hervorragend - aber dafür reichen meine Kenntnisse nicht und bin damit überfordert
Gruss Erich
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: database am Oktober 30, 2010, 18:51:26
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?
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: OEACC am Oktober 30, 2010, 18:57:02
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)
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: database am Oktober 30, 2010, 21:04:21
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
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: OEACC am Oktober 31, 2010, 13:22:13
Holla, habe nur begrenzte Access Kenntnisse - brauche einige Zeit, das zu verstehen und zu probieren
melde mich dann wieder - bis dahin danke

GRuss Erich
Titel: Re: Abfrage mit Filterfunktion nicht in Menü ?
Beitrag von: database am Oktober 31, 2010, 14:10:38
 ;D ;D ;D

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

Schönen Sonntag
Peter