Access 2010 Abfrage zusammenfassen (Dynamische Abfrage)
Ich habe mal wieder ein Datenbanken Problem. Ich möchte eine Auswertung einer Tabelle durchführen mittels eines Abfrage/Such Formulares.
Die Datenbank beinhaltet eine Tabelle mit Datensätzen, die über ein Formular erweitert werden. Bsp.: Ein Handy-Shop verkauft an 10 Standpunkten jeweils 32 verschiedene Handys.
So nun möchte ich für jeden Standpunkt Auswertungen machen können. Die Abfrage hierfür ist im Wesentlichen immer Gleich:
Erklärung: Ich möchte herausfinden, wie viele xPhone Handys ich im Januar 2011 am Standpunkt Hamburg verkauft habe. Die Standpunkte und die Handys sind dementsprechend natürlich Boolesche Werte.
Wenn ich nun jede Abfrage Manuel erstellen muss, und jeden Monat und das gesamte Jahr auswährten möchte käme ich nach meiner Rechnung auf 4160 Abfragen, die ich wegen dem Datum jedes Jahr erneuern müsste! Das möchte ich nicht ;)
Ich suche nach einer Lösung um das Ganze auf 32 Abfragen zu minimieren, also brauch ich eine Lösung, wo der Standpunkt und die beiden Datum dynamisch vom User verändert werden können.
Desweiteren soll dann die Abfrage als Bericht ausgegeben werden.
Für eure Hilfe bin ich sehr dankbar, sollte etwas noch unklar sein bitte ich dieses zu entschuldigen und werde es versuchen ausführlicher zu formulieren.
LG
cp-com
Die Datenbank beinhaltet eine Tabelle mit Datensätzen, die über ein Formular erweitert werden. Bsp.: Ein Handy-Shop verkauft an 10 Standpunkten jeweils 32 verschiedene Handys.
So nun möchte ich für jeden Standpunkt Auswertungen machen können. Die Abfrage hierfür ist im Wesentlichen immer Gleich:
SELECT Count (xPhone) FROM Tabelle
WHERE xPhone = TRUE AND Hamburg = TRUE
AND Between #01/01/2011# AND #01/31/2011#
Erklärung: Ich möchte herausfinden, wie viele xPhone Handys ich im Januar 2011 am Standpunkt Hamburg verkauft habe. Die Standpunkte und die Handys sind dementsprechend natürlich Boolesche Werte.
Wenn ich nun jede Abfrage Manuel erstellen muss, und jeden Monat und das gesamte Jahr auswährten möchte käme ich nach meiner Rechnung auf 4160 Abfragen, die ich wegen dem Datum jedes Jahr erneuern müsste! Das möchte ich nicht ;)
Ich suche nach einer Lösung um das Ganze auf 32 Abfragen zu minimieren, also brauch ich eine Lösung, wo der Standpunkt und die beiden Datum dynamisch vom User verändert werden können.
Desweiteren soll dann die Abfrage als Bericht ausgegeben werden.
Für eure Hilfe bin ich sehr dankbar, sollte etwas noch unklar sein bitte ich dieses zu entschuldigen und werde es versuchen ausführlicher zu formulieren.
LG
cp-com
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 176076
Url: https://administrator.de/contentid/176076
Ausgedruckt am: 15.11.2024 um 18:11 Uhr
17 Kommentare
Neuester Kommentar
Moin.
Ich würde ein Formular mit einer Klappbox über die Standorte und Zwei Kalenderfelder bauen und
beim Laden des Bericht des SQL-String zusammenbauen und als Report.Recordsource mitgeben.
Dann brauchst Du gar keine Abfragen bauen.
Beim Berichtladen sieht das dann so aus.
Eleganter wäre wenn mann ein Feld Standort in den Daten hätte und nicht jetzt Standort als Boolean-Feld.
HTH
MK
Ich würde ein Formular mit einer Klappbox über die Standorte und Zwei Kalenderfelder bauen und
beim Laden des Bericht des SQL-String zusammenbauen und als Report.Recordsource mitgeben.
Dann brauchst Du gar keine Abfragen bauen.
Beim Berichtladen sieht das dann so aus.
Me.RecordSource = "SELECT Count (xPhone) FROM Tabelle WHERE xPhone = TRUE AND " & Forms("Formularname").Standort & " = TRUE AND Verkaufsdatum Between #" & Forms("Formularname").StartDatum & "# AND #" & Forms("Formularname").EndDatum & "#"
Eleganter wäre wenn mann ein Feld Standort in den Daten hätte und nicht jetzt Standort als Boolean-Feld.
HTH
MK
Moin.
Du musst ein Doofes Formular mit drei Feldern haben.
Wie oben beschrieben und einen Knopf zum Report öffnen.
Beim Knopf prüfst Du dann, ob gültige Werte gewählt wurden und öffnest dann den Report.
Im Öffnen-Ereignis des Reports rufst Du dann den Code aus dem vorigen Post auf,
Fehlerbehandlung dazu und die Sache ist geritzt.
Das kann ich nicht genauer erklären. Sonst schick mir mal ne Beispiel Datenbank mit drei Datensätzen und ich gucke mir das an.
Bin aber erst am Montag wieder im Lande...
HTH
MK
Du musst ein Doofes Formular mit drei Feldern haben.
Wie oben beschrieben und einen Knopf zum Report öffnen.
Beim Knopf prüfst Du dann, ob gültige Werte gewählt wurden und öffnest dann den Report.
Im Öffnen-Ereignis des Reports rufst Du dann den Code aus dem vorigen Post auf,
Fehlerbehandlung dazu und die Sache ist geritzt.
Das kann ich nicht genauer erklären. Sonst schick mir mal ne Beispiel Datenbank mit drei Datensätzen und ich gucke mir das an.
Bin aber erst am Montag wieder im Lande...
HTH
MK
Hallo cp-com,
wenn ich Dich richtig verstanden habe hast Du eine Tabelle u.a. mit den Feldern "Hamburg, Hannover, Bremen ...München", alle jeweils als boolsche Felder.
Dann würde ich erstmal denjenigen, der die Tabelle designt hat, fragen was das denn wohl soll. So wird das auf elegante Weise gar nichts.
Und was ihr macht wenn der nächste Standpunkt dazu kommt weiss ich auch nicht.
Henning
wenn ich Dich richtig verstanden habe hast Du eine Tabelle u.a. mit den Feldern "Hamburg, Hannover, Bremen ...München", alle jeweils als boolsche Felder.
Dann würde ich erstmal denjenigen, der die Tabelle designt hat, fragen was das denn wohl soll. So wird das auf elegante Weise gar nichts.
Und was ihr macht wenn der nächste Standpunkt dazu kommt weiss ich auch nicht.
Henning
Moin.
Das kann schon mal nicht funktionieren, da Du versuchst dem Formular eine neue Datensatzherkunft zu geben.
Der Code:
gehört auf den Knopf im Formular. Darum könntest Du noch prüfen, ob es überhaupt Datensätze gibt etc. Aber das kannst Du auch später noch machen.
Im Report muss der Code dann irgendwie so aussehen:
FeldA, ..., FeldZ musst Du jetzt an die Tabellen-/Reportfelder anpassen.
Dein Code sieht sehr nach "QuickAndDirty" aus und Du scheinst VBA auch noch nicht wirklich verstanden zu haben.
Als erstes solltest Du Dir angewöhnen Namen vernünftig zu vergeben und nicht Befehl18 und Text6 in Formular1.
Da steigst Du in ein paar Wochen nicht mehr durch.
HTH
MK
Das kann schon mal nicht funktionieren, da Du versuchst dem Formular eine neue Datensatzherkunft zu geben.
Der Code:
Private Sub Befehl8_Click()
Dim db as Database
Dim rs as dao.Recordset
Dim SQL as String
SQL = "SELECT Count (xPhone) as cnt FROM Haupt_Tbl WHERE xPhone = TRUE AND " & Forms("Formular1").Kombinationsfeld2 & " = TRUE AND verkaufDatum Between " & cdate(Forms("Formular1").Text4) & " AND " & cdate(Forms("Formular1").Text6)
set rs = db.openrecordset(SQL)
if not rs.eof then
if rs![cnt] > 0 then
DoCmd.OpenReport ReportName:="Auswertung", View:=acViewPreview
end if
end if
set rs = nothing
db.close
end sub
gehört auf den Knopf im Formular. Darum könntest Du noch prüfen, ob es überhaupt Datensätze gibt etc. Aber das kannst Du auch später noch machen.
Im Report muss der Code dann irgendwie so aussehen:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = "SELECT FeldA, .., FeldZ FROM Haupt_Tbl WHERE xPhone = TRUE AND " & Forms("Formular1").Kombinationsfeld2 & " = TRUE AND verkaufDatum Between " & cdate(Forms("Formular1").Text4) & " AND " & cdate(Forms("Formular1").Text6)
End Sub
FeldA, ..., FeldZ musst Du jetzt an die Tabellen-/Reportfelder anpassen.
Dein Code sieht sehr nach "QuickAndDirty" aus und Du scheinst VBA auch noch nicht wirklich verstanden zu haben.
Als erstes solltest Du Dir angewöhnen Namen vernünftig zu vergeben und nicht Befehl18 und Text6 in Formular1.
Da steigst Du in ein paar Wochen nicht mehr durch.
HTH
MK