Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Hilfe bei Kombifeld und Formular

Begonnen von Dr.Cornwallis, Mai 12, 2016, 14:10:40

⏪ vorheriges - nächstes ⏩

Dr.Cornwallis

Liebe Gemeinde,

vorab:

Ich bin weder ein Datenbankentwickler noch ein Access Guru, leider kam ich durch Zufall zu diesem Projekt(eig. IT Techniker).

Ziel der Db soll eine Auswertung der täglichen Arbeitszeit der Mitarbeiterin in einem ausgewählten Zeitraum sein(mit Formular Standort+Zeitraum auswählen, im Bericht anzeigen.

Ich möchte ein Access Formular basteln, bei diesem soll folgendes passieren:
Ich habe ein Kombifenster wo ich die jeweiligen Standorte auswählen kann, nun möchte ich noch zusätzlich ein 2. u. 3. Kombifenster einbauen um den Zeitraum festzulegen. Bit einem Button wird dann ein Bericht  geöffnet werden, der auf eine Abfrage zeigt.

Als Ziel soll ein Bericht geöffnet werden der alle Datensätze mit dem ausgewählten Standort + Zeitraum ausgibt.

Einen Screenshot vom prim. Table findet ihr im Anhang.

Das Problem:

Jeder Tag (1.6.2016 - 31.12.2016) ist eine eigene Spalte im Table, die eine Zahl(Arbeitszeit) enthalten.
ich möchte aber im Kombifeld nicht den Spalteninhalt auswählen, sondern die Spalte selbst.

Kann man dies irgendwie realisieren?


Danke für eure Hilfe!


Gruß

Dr.C

MzKlMu

Hallo,
grundsätzlich falscher Aufbau. Das ist Exceldenke, was für eine Datenbank unbrauchbar ist. Du brauchst eine extra Tabelle mit dem Datum als einzelnes Feld. In diese Tabelle muss der Mitarbeiter als Fremdschlüssel, jeder Tag gibt einen Datensatz und kein Feld. In diese Tabelle kommt dann auch das Feld für die Stunden. Du kannst dann völlig problemlos einen Zeitraum filtern, denn für das Datum gibt es ja nur eine Spalte.
Weiterhin wird eine extra Tabelle benötigt für die Abteilung. In der Mitarbeitertabelle ist dann nur ein Fremdschlüssel zur Abteilung.
In der Arbeitszeittabelle kommt kein Feld für die Abteilung, es sei denn die Mitarbeiter arbeiten wechselnd für unterschiedliche Abteilungen.

Was ist denn der dau#Code ?
Hast Du wirklich solche Feldnamen mit # und / ?
Das solltest Du schleunigst ändern.
Gruß Klaus

DF6GL

Hallo,

gleich zum Eingewöhnen:  Vergiss diese Konstruktion.


Access läuft anders (als Excel). Es bedarf zunächst eine normalisierte Tabellenstruktur mit Definition von Beziehungen über die entpr. Schlüsselfelder.  Formulare und Berichte sind im Moment noch nicht an der Reihe.

Mindestaufbau:

tblMitarbeiter
MAID (PK,Autowert)
MA_Vorname (Text)
MA_Nachname (Text)
MA_PersNr ( Text, falls führende Nullen oder Buchstaben vorkommen, ansonsten Long, eindeutiger Index)
.
.
.


tblOrgEinheiten
OEID  (PK, Autowert)
OE_Name  (Text)
.
.


tblKalender  (nicht unbedingt erforderlich, aber empfehlenswert, wenn z. B. Feiertage, Brückentage, Urlaubstage usw. in irgendeiner Weise zu berücksichtigen sind---> Betriebskalender)


tblMAZeiten

MAZID (PK,Autowert)
MAZ_MAID (Long , FK zu tblMitarbeiter)
MAZ_OEID (Long, FK zu tblOrgEinheiten)
MAZ_Kreis (Long, was auch immer dies bedeutet, evtl. ist eine Tabelle tblKreise erforderlich)
MAZ_VCode  ( dito wie Kreis,  grundsätzlich KEINE SONDERZEICHEN im Namen verwenden)
MAZ_Datum (Datum/Uhrzeit,  entweder mit Datepicker ausgewählt oder bei Verwendung von tblKalender von dort ausgewählt.
MAZ_ArbZeit (Datum/Uhrzeit,  evtl. Double (oder Währung) mit Einheit "Industrieminuten" --> 1h = 100IM)
.
.
.


Alle Tabellen über die Schlüsselfelder in Beziehung gesetzt.




Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Dr.Cornwallis

Die Feldnamen kamen von dem exportierten SAP Report.
Es wird jeden Tag eine Excel vom SAP exportiert, diese beinhaltet Mitarbeiter, PersNr und Arbeitszeit(in einer Zahl zb. 8 steht für 8Stunden, Pause etc. sind bei diesem Wert bereits berücksichtigt.)Damit soll eine Auswertung entstehen, wie viele Überstunden im Zeitraum X, von Abteilung Y etc...

Ich importiere via VBA diesen SAP Report(xlsx) täglich in einen eigenen Table(SAP_EXPORT_AKTUELL), neue bzw. ausgeschiedene MA werden mit einer Abfrage(bezogen auf PersonalNr.) vom TABLE SAP_EXPORT gelöscht oder hinzugefügt. Dies ist dann der Table mit den aktuellen Mitarbeitern.

Jetzt das Problem dabei:

Ich kann die Arbeitszeiten nicht in einem Datensatz packen(und die Tage in eine Spalte), da diese beim exportieren aus dem SAP vertikal angelegt sind, weiters befinden sich in dieser Excel ca. 2000 Zeilen, da kommt Access an seine Grenzen(Spalten). Somit wäre es doch gara nicht möglich die Zeiten in einen Datensatz zu packen oder irre ich mich?

Ich bin leider der einzige IT Techniker im Unternehmen, somit kam ich ohne jegliche Vorkenntnisse zum Handkuss..War nicht meine Idee, aber ich soll jetzt das Beste daraus machen  :o...

Ps: Danke für die schnellen Antworten!

Gruß

Dr.C

DF6GL

Hallo,

wie auch immer,  wenn die Daten nicht wie vorgeschlagen in Access-Tabellen importiert werden können, wird es nicht zum dauerhaften Erfolg führen..

Zitatdiese beinhaltet Mitarbeiter, PersNr und Arbeitszeit
Das ist doch genau das, was gebraucht wird....  also einen DS pro MA und einer(!) Arbeitszeit. Wo die restlichen und erforderlichen Daten herkommen, z. B. der Arbeitstag (Datum) , musst Du selber erkunden. Jedenfalls ist eine Zusammenführen von Tagen (Datum) als Auflistung von Feldern in einen(!) Datensatz nicht brauchbar.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
um mit Access arbeiten zu können, ist ein normalisierter Tabellenaufbau erforderlich. Du wirst nicht umhinkommen, die Daten umzustrukturieren.
Über die Spalten so wie das jetzt ist, kannst Du nicht auswerten. Das ist nicht datenbankgerecht.
Wenn Du täglich importierst, ist das doch immer nur ein Datum, oder ?
Hängst Du dann am nächsten Tag die neuen Zeiten als Felder an, oder wie entstehen die Datumsfelder nebeneinander ?
Zitatdiese beinhaltet Mitarbeiter, PersNr und Arbeitszeit(
Das sind 3 Felder, das Datum noch dazu sind das 4 Felder.
Das sind 2000 DS jeden Tag. Da wird Access sicher eines Tages an seine Grenzen kommen. Es hängt vom gewünschten Zeitraum ab, aber 2.000.000 DS sind 1000 Tage = ca. 3 Jahre.
Reicht das ?
Gruß Klaus

Dr.Cornwallis

Ok, das hat mir jemand in einem anderen Forum auch gesagt, also fang ich mit der Strukturierung noch mal von vorne an :'(.
Wie würdet ihr vorgehen? Ich fasse noch einmal zusammen:
Täglich eine Excel, die kommt vom SAP, diese beinhaltet folgende Spalten: Pers.NR, MA und die Stunden die er an diesem Tag gearbeitet hat, ca. 2000 Mitarbeiter.
Die Mitarbeiter ändern sich fast täglich, Ziel soll ein Formular sein, wo man in einem Kombifeld die Abteilung sowie den Zeitraum auswählen kann, damit soll dann ein Bericht geöffnet werden der die Arbeitszeiten der Mitarbeiter im gewählten Zeitraum darstellt, die Zeiten müssen nicht addiert oder ähnliches werden. Quasi: Mitarbeiter, PersNr, Abteilung, 1.6.2016, 2.6.2016, 3.6.2016 usw...

Danke für eure Hilfe!

Grüße
Dr.C

MzKlMu

Hallo,
einfach den Import aus SAP immer an die Tabelle als Datensatz anhängen. Mit einer Anfügeabfrage. In dieser Abfrage wird auch das Datumsfeld gefüllt.
Wo steht dann in dem SAP Import die Abteilung, kann ich nicht erkennen.
Gruß Klaus

Dr.Cornwallis

Funktioniert das anhängen als Datensatz auch wenn der SAP Export immer einen anderen Namen hat(Abfrage TT.MM.JJJJ.xlsx)?
Sorry, in dieser Datei befindet sich auch die Abteilung, hab ich vorhin nicht beachtet.
Das einzige was nicht in dieser Excel enthalten ist, ist die Kostenstelle und der Bereich.
Diese habe ich in einem eigenen Table, ebenfalls mit der PersonalNr eingepflegt.

Grüße

Dr.c

MzKlMu

Hallo,
Du kannst die Anfügeabfrage per VBA zusammenbauen und dann im VBA Code nach dem Dateinamen fragen. Die SAP Tabelle muss vorher importiert werden.
Erst dann kannst Du mit der Anfügeabfrage die Daten übertragen.
Gruß Klaus

Dr.Cornwallis

Ok, soweit bin ich (denke ich) schon, ich habe 2 Abfragen die den aktuellen Import mit dem letzten Vergleich, ausgeschiedene Mitarbeiter werden entfernt, neue hinzugefügt(via VBA Code) und der Personalnummer nach sortiert(wie in der Excel)
Nur wie realisiere ich nun die Auswahl des Zeitraumes in der Abfrage?

Gruß

Dr.

MzKlMu

Hallo,
die Abfrage wird auf den gewünschten Zeitbereich gefiltert.
Wie soll der Zeitbereich sein, tagweise, monatsweise ?
Und willst Du per Kombi ein Datum auswählen oder einen Monat, oder auch mehrere Monate ?
Gruß Klaus

Dr.Cornwallis

Der Zeitraum bzw. der Bericht soll aus 3 Kombifeldern entstehen:
1. Feld: Abteilung
2. Feld: Von(zB. 1.6.2016)
3. Feld: Bis(zB. 7.6.2016)

Daraus soll der Bericht entstehen, der jetzige kann nur die Abteilung ausgeben, mit allen   
Arbeitszeiten die sich im Table befinden. Dieses Formular funktioniert also bis zu diesen Punkt.
Ich könnte natürlich die Abfrage jedes mal manuell ändern und das gewünschte Datum auswählen, das wäre aber zu umständlich.

Grüße

Dr.C

MzKlMu

Hallo,
aber irgendwie musst Du doch das Datum angeben, wie soll das gehen, als Feldeintrag in einem Formular ?

Bitte zeige mal den SQL Text der Abfrage die die Abteilungen zeigt.
Gruß Klaus

Dr.Cornwallis

"aber irgendwie musst Du doch das Datum angeben, wie soll das gehen, als Feldeintrag in einem Formular ?"

Genau das ist mein Problem :-), ich wüsste nicht wie ich das lösen könnte, es ist mir auch klar dass ich für das Formular eine eigene Spalte für das Datum brauche, so kann ich aber nicht die Daten erfassen...es ist hoffnungslos :-).
Kann man das nicht irgendwie programmieren, dass man im Kombifeldern die Spalten auswählen kann und nicht deren Inhalt? Der Inhalt der Spalte soll dann im Bericht angezeigt werden.

In ca. 1 Stunde Teile ich einen Screenshot vom Code/Abfrage.

Danke!

Gruß

Dr.