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
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
Hallo,
nicht wirklich, da ich eine Vielzahl an Filtern nutzen möchte.
Gruss OEACC
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
Hallo,
das klingt hervorragend - aber dafür reichen meine Kenntnisse nicht und bin damit überfordert
Gruss Erich
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?
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)
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
Holla, habe nur begrenzte Access Kenntnisse - brauche einige Zeit, das zu verstehen und zu probieren
melde mich dann wieder - bis dahin danke
GRuss Erich
;D ;D ;D
kein Problem, lass dir ruhig Zeit und schau dir die Sache gut an.
Schönen Sonntag
Peter