dr.cornwallis
Goto Top

Dynamischer Bericht in Access, ist das möglich?

Liebe Gemeinde,

Ich habe in Access einen Table, dieser beinhaltet Benutzerdaten und das Datum(täglich bis Jahresende).
table

Nun habe ich ein Formular mit Kombifeld gebastelt wo man das Gebäude auswählen kann, dieses öffnet via Button mit VBA einen Bericht mit dem Kombifeld als Filter.
Code der beim Klicken des Buttons ausgeführt wird:
Private Sub Befehl5_Click()
DoCmd.OpenReport "KST_EXPORT_KOMBI", acViewPreview, wherecondition:="[Station] = '" & Me.Kombinationsfeld0.Value & "'"  
Reports!kst_export_kombi.Printer.Orientation = acPRORLandscape

End Sub

Jetzt zur eigentlichen Frage:

ich möchte ein 2. Kombifeld einbauen wo man zusätzlich noch das Datum auswählen kann, also quasi Gebäude und Zeitraum, mit diesen Optionen soll dann der Bericht generiert werden.

Leider überschreitet das meine Access/VBA skills komplett bzw. wüsste ich nicht ob das überhaupt möglich ist.

Bitte um Hilfe!


Besten Dank!


Gruß


Dr.C

Content-Key: 304302

Url: https://administrator.de/contentid/304302

Printed on: April 26, 2024 at 17:04 o'clock

Mitglied: 129148
129148 May 12, 2016 updated at 07:44:03 (UTC)
Goto Top
Wieso erstellt man für jeden Tag im Jahr eine extra Spalte?? Normalerweise stehen die in den Zeilen und nicht in den Spalten. Da ist wohl die Planung miserabel gewesen.

Wie im letzten Post geschrieben kannst du einfach die SQL (Where) Condition im letzten Parameter mit einem AND ergänzen und so dein Datum als zusätzliches Kriterium mit einbauen.
Dazu brauchst du kein VBA Wissen nur minimales SQL Abfragen-Verständnis, denn die Where Condition ist eine SQL Query nur ohne das Schlüsselwort WHERE.

Wäre vielleicht mal angebracht das du dir die Doku dazu anschaust.
https://support.office.com/en-us/article/Access-SQL-WHERE-clause-753bbc1 ...
Member: Dr.Cornwallis
Dr.Cornwallis May 12, 2016 at 07:53:08 (UTC)
Goto Top
Hier werden Zeiten von jedem User täglich eingefügt, als Ziel soll ich dann eine Auswahl mit Station und den Zeitraum(zb. von 1_jun_2016 bis 3_jun_2016) haben, die dann die gefilterten Zeilen ausgibt.

Ich habe leider weder in VBA noch in SQL Erfahrung, darum wende ich mich ja an dieses Forum, da es für jemanden der täglich damit zu tun hat, bestimmt ein Klax ist.

Gruß

Dr.C
Mitglied: 129148
Solution 129148 May 12, 2016 updated at 08:03:33 (UTC)
Goto Top
Da wir hier fast Null Info über den genauen Aufbau der Tabelle haben etwa nach diesem Schema
DoCmd.OpenReport "KST_EXPORT_KOMBI", acViewPreview, wherecondition:="[Station] = '" & Me.Kombinationsfeld0.Value & "' AND [DATUMSSPALTE] >= " & Me.KombinationsfeldDatumVON.Value & " AND [DATUMSSPALTE] <= " & Me.KombinationsfeldDatumBIS.Value  
usw. und sofort, denke jetzt sollte die Vorgehensweise klar sein wie man Bedingungen verknüpft. Bitte aber noch beachten das bei manchen Datentypen Hochkommas um die Werte nötig sind, z.B. bei Strings.

Access Fragen sind eben immer problematisch wenn zu wenig Infos über die DB und deren Aufbau vorhanden sind face-sad

Aber an einer Access DB ohne jegliche VBA und SQL Kenntnisse zu hantieren ist schon sportlich ...
Member: Dr.Cornwallis
Dr.Cornwallis May 12, 2016 at 08:37:56 (UTC)
Goto Top
"Aber an einer Access DB ohne jegliche VBA und SQL Kenntnisse zu hantieren ist schon sportlich ..."

Hatte leider keine Wahl, begeistert bin ich davon auch nicht, aber der einzige IT Techniker im Unternehmen, so kam natürlich ich zum Handkuss face-smile.


Besten Dank für deine Hilfe!!

Gruß

Dr.C
Member: Dr.Cornwallis
Dr.Cornwallis May 12, 2016 updated at 08:57:52 (UTC)
Goto Top
Die DB soll die Arbeitszeit erfassen(täglich) das Formular greift auf eine Abfrage zu die die erforderlichen Daten ausgibt, diese werden dann mit dem Bericht ausgegeben.
Im Formular soll ich dann die Station sowie den Zeitraum festlegen können.
Die Hauptdb(wo die Daten gesammelt werden) sieht wie folgt aus, dabei beinhaltet die Datumsspalte kein Datum sondern eine Zahl(Arbeitszeit):
table1

Dann soll folgendes passieren: gib die Arbeitszeit aller Mitarbeiter der Station "X" im Zeitraum von zb. 1.6 - 5.6.2016 (je nachdem was man im Kombifeld festlegt) aus. Die Arbeitszeit muss nicht addiert werden, man soll nur sehen wie lange täglich gearbeitet wurde.

Gruß

Dr.C
Mitglied: 129148
129148 May 12, 2016 updated at 09:22:07 (UTC)
Goto Top
Klarer Fall von schlechtem Tabellendesign oder Abfrage.

Normalerweise hat man eine Tabelle Mitarbeiter und dann eine Tabelle Arbeitszeiten. In der Tabelle Arbeitszeiten gibt es dann ein verknüpftes Fremdschlüsselfeld für den Mitarbeiter, ein Feld Datum und ein Feld für die Arbeitszeit. D.h. für jeden Tag den irgendein Mitarbeiter arbeitet gibt es eine neue Zeile. Damit kann man vernünftig arbeiten und auch effektiv mit Abfragen filtern und Summen für bestimmte Zeiten etc. generieren.

Sorry aber dieses Tabellendesign ist schlichtweg unpraktikabel. Deine Abfragen solltest du besser strukturieren.
Member: Dr.Cornwallis
Dr.Cornwallis May 12, 2016 at 09:51:55 (UTC)
Goto Top
Das Problem ist dass sich die Mitarbeiter fast täglich ändern, dafür habe ich eine Abfrage gebaut, der Abgleich funktioniert soweit, ich importiere die Daten einer Excel(diese kommt täglich vom SAP auf ein Netzlaufwerk), in dieser sind die Mitarbeiter, Station und die Arbeitszeit enthalten.
Wenn ich jetzt die Arbeitszeit und die MA trenne, wird's (für mich) noch komplizierter...
Ich bräuchte im 2. und 3. Kombifeld nicht den Spalteninhalt zur Auswahl(da diese kein Datum sondern die Zeit enthalten), sondern die Spalten an sich für jeden Tag(1.6 - 31.12.2016), von diesen ausgewählten Spalten soll dann der Inhalt mit den Mitarbeitern angezeigt werden.

Kann man das so also gar nicht realisieren, das wäre verdammt schade da die DB so gut wie fertig ist, es fehlt nur noch diese Funktion...

Gruß

Dr.C
Mitglied: 129148
129148 May 12, 2016 updated at 09:55:21 (UTC)
Goto Top
Deswegen plant man sein Tabellendesign bevor man eine Datenbank auf dieser Basis entwickelt, nicht umgekehrt.
https://www.teialehrbuch.de/Kostenlose-Kurse/Access-2010-Basis/2-Datenba ...
Member: Dr.Cornwallis
Dr.Cornwallis May 12, 2016 at 10:52:30 (UTC)
Goto Top
Ok, du würdest also den Table "Arbeitszeit wie folgt aufbauen:

1. Spalte Personalnummer(als Schlüssel)
2. Spalte Datum
und dann in die jeweiligen Zeilen vom Datum die Arbeitszeit einfügen, habe ich das richtig verstanden?
Das Problem dabei ist, dass ich vom SAP die Arbeitszeiten in einer Spalte (1. Spalte Name, 2. Spalte PersNr, 3. Spalte Arbeitszeit)erhalte, nicht in einer Zeile, somit müsste ich ca. 2000 Einträge händisch einpflegen oder die Daten vor dem Import hoizontal auslegen.

Gruß

Dr.C