Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Access 2010 Abfrage zusammenfassen (Dynamische Abfrage)

Frage Entwicklung Datenbanken

Mitglied: cp-com

cp-com (Level 1) - Jetzt verbinden

10.11.2011, aktualisiert 14:09 Uhr, 7598 Aufrufe, 17 Kommentare

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:

01.
SELECT Count (xPhone) FROM Tabelle  
02.
WHERE xPhone = TRUE AND Hamburg = TRUE  
03.
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
Mitglied: thaenhusen
10.11.2011 um 14:42 Uhr
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.

01.
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
Bitte warten ..
Mitglied: cp-com
10.11.2011 um 15:11 Uhr
Zitat von thaenhusen:
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.

Danke für die schnelle Antwort.

Kannst du mir das vielleicht etwas näher erklären? Klingt schon mal sehr gut !
Bitte warten ..
Mitglied: thaenhusen
10.11.2011 um 15:24 Uhr
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
Bitte warten ..
Mitglied: cp-com
10.11.2011 um 15:51 Uhr
Hm ich muss mich glaube ich erst mal ein bisschen durch Report.Recordsource durchlesen. Vielleicht verstehe ich ja dann was du meinst ;)
Bitte warten ..
Mitglied: vossi31
10.11.2011 um 16:13 Uhr
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
Bitte warten ..
Mitglied: cp-com
11.11.2011 um 08:22 Uhr
Moin Henning,

ich verstehe nicht wieso Boolean-Felder ein solches Problem mitsichbringen? Das es nicht das eleganteste ist, ist mir klar. Wo liegen die Probelme wenn ich einen neune Standpunkt hinzufüge (was in der Regel nicht vorkommen sollte)?
Ich lass mich gerne von einem Pulldown-Menu überzeugen :P. (Aber nicht vom wesentlichen abkommen).

LG
Bitte warten ..
Mitglied: cp-com
11.11.2011 um 08:52 Uhr
Ok ich hab es schon selber gemerkt :D Ich mache es mit Pulldown-Menu, vielen Dank für die Kritik.
Bitte warten ..
Mitglied: cp-com
11.11.2011 um 10:30 Uhr
Zitat von thaenhusen:

01.
> Me.RecordSource = "SELECT Count (xPhone) FROM Tabelle WHERE xPhone = TRUE AND " & 
02.
> Forms("Formularname").Standort &  " = TRUE AND Verkaufsdatum Between #"  & 
03.
> Forms("Formularname").StartDatum & "# AND #"  & Forms("Formularname").EndDatum & 
04.
> "#" 
05.
> 

Hat hierzu vielleicht jemand ein Beispiel Formular , sorry.
Bitte warten ..
Mitglied: cp-com
21.11.2011 um 14:33 Uhr
Sorry wenn ich nerve aber das Thema ist immer noch aktuell ...
Muss ich für die o.g. VBA schon ein Bericht angelegt haben? Wird dieser durch den Code geändert?
Vielleicht kann mir jemand die Funktion auch nochmal erklären, bzw. einen guten Link dazu posten.

Vielen Dank
Bitte warten ..
Mitglied: thaenhusen
21.11.2011 um 16:39 Uhr
Moin.

Ja, der Bericht muss existieren und funktionieren. Mit dem Code jubelst Du quasi nur die Datenquelle unter.
Also einen Bericht für das konkrete Beispiel erstllen und dann beim Laden die RecordSource neu rein schieben.

HTH
MK
Bitte warten ..
Mitglied: cp-com
23.11.2011 um 09:47 Uhr
01.
Private Sub Befehl8_Click() 
02.
Me.RecordSource = "SELECT Count (xPhone) FROM Haupt_Tbl WHERE xPhone = TRUE AND " & Forms("Formular1").Kombinationsfeld2 & " = TRUE AND verkaufDatum Between #" & Forms("Formular1").Text4 & "# AND #" & Forms("Formular1").Text6 & "#" 
03.
DoCmd.OpenReport ReportName:="Auswertung", View:=acViewPreview 
04.
End Sub
Fehlermeldung:
Laufzeitfehler '3075':

Syntaxfehler in Datum in Abfrageausdruck 'xPhone = TRUE AND Hamburg = TRUE AND verkaufDatum Between #01.01.2011# AND #31.01.2011'.

Klar ist mir beim Datum 31.01.2011, das die letzte # fehlt. Wie muss ich den Code oben anpassen? Ist der Rest soweit i.O.?
Bitte warten ..
Mitglied: thaenhusen
23.11.2011 um 10:53 Uhr
Moin.

Das kann schon mal nicht funktionieren, da Du versuchst dem Formular eine neue Datensatzherkunft zu geben.

Der Code:
01.
Private Sub Befehl8_Click() 
02.
 
03.
Dim db as Database 
04.
Dim rs as dao.Recordset 
05.
Dim SQL as String 
06.
 
07.
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) 
08.
set rs = db.openrecordset(SQL) 
09.
 
10.
if not rs.eof then 
11.
  if rs![cnt] > 0 then  
12.
    DoCmd.OpenReport ReportName:="Auswertung", View:=acViewPreview  
13.
  end if 
14.
end if 
15.
 
16.
set rs = nothing 
17.
db.close 
18.
 
19.
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:

01.
Private Sub Report_Open(Cancel As Integer) 
02.
  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) 
03.
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
Bitte warten ..
Mitglied: Biber
23.11.2011 um 20:02 Uhr
[OT bzw. nur als Fussnote]

Zeile 08 im ersten Schnipsel hat einen Tippfehler
08 set rs = db.openrecortset(SQL)
Gemeint ist
08 set rs = db.openrecordset(SQL)

[/OT bzw. nur als Fussnote]
Bitte warten ..
Mitglied: thaenhusen
23.11.2011 um 20:45 Uhr
Moin Biber.

Danke für den Hinweis. Das musste etwas schnell gehen.
Habe ich eben korrigiert.

Schöne Grüße
MK
Bitte warten ..
Mitglied: cp-com
12.12.2011 um 08:35 Uhr
Hey,

sorry das ich mich jetzt erst melde.
Vielen Dank für die Hilfe MK.
Ich bekomme leider immer eine Fehlermeldung beim ausführen der Abfrage: "Benutzerdefinierter Typ nicht definiert", dabei ist diese Zeile 03. Dim db as Database
markiert (während wie Fehlermeldung auftritt). Wenn ich die Fehlermeldung dann wegklicke ist die Zeile 01. Private Sub Befehl8_Click() gelb markiert. (Befehl8 heißt be mir nun Auswertung umd ein bisschen Ordnung reinzubringen)

Ich hatte gegoogelt und rausgefunden das mir die Microsoft DAO 3.6 Object Library fehlt und das in Zeile 03. vor dem Database ein DAO. sein sollte.

Hmm ja wie ihr seht, ich bin nicht gerade talentiert für SQL, Access oder sonst etwas was mit Datenbanken zutun hat und würde das ganze am liebsten aufgeben - aber das geht leider nicht :D.

Ich würde nun gerne eine Beispieldatenbank der hier beschriebenen Datenbank hochladen das ihr euch vielleicht angucken könnte wo ich was falsch gemacht habe.
Gibt es die möglichkeit direkt im Forum etwas hochzuladen?

LG
Bitte warten ..
Mitglied: thaenhusen
12.12.2011 um 09:16 Uhr
Moin.

Hochladen geht so nicht.
Kannst es aber ja ins Netz legen und uns den Link posten oder per PN zu schicken.

HTH
MK
Bitte warten ..
Mitglied: cp-com
12.12.2011 um 09:49 Uhr
Hey,

hab ein Bekannten der wird das hoffentlich gleich hochladen, sobald ich ein Link habe schicke ich dir eine PN.

Vielen Dank
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst Access 2010 Abfrage erster Werktag (10)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Datenbanken
gelöst Access 2010 komplizierte Abfrage (3)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Datenbanken
gelöst Syntaxfehler VBA Access 2010 (6)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...