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
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.
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.
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
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.
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 ?
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
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.
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
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.
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.
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 ?
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
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.
"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.
Hallo,
in dem Formular werden doch keine Daten erfasst, die Daten liegen doch per Import vor. Du brauchst das Formular nur zum Filtern. Das Formular zeigt immer alle Daten an und wird dann auf die gewünschte Abteilung und den gewünschten Zeitraum gefiltert. Die Abfrage bleibt dabei unverändert.
Die Filterung erfolgt mit extra ungebunden Feldern.
ZitatIn ca. 1 Stunde Teile ich einen Screenshot vom Code/Abfrage
Kein Screenshot bitte, als Text hier rein kopieren. In Screenshots kann man die Texte nicht kopieren, die müsste man abschreiben.
Sorry ist doch etwas länger geworden, ich kopiere dir morgen den Text, was für einen Code soll ich posten?
Grüße
Dr.C
Hallo,
ZitatBitte zeige mal den SQL Text der Abfrage die die Abteilungen zeigt.
Du hast ja geschrieben, dass der jetzige Bericht die Abteilungen ausgibt. Und von diesem Bericht die Datenherkunft (Abfrage) als SQL Text.
Hallo,
also der SQL Text der Abfrage auf den der Bericht zeigt sieht so aus:
SELECT Rohdaten.Kostenstelle, SAP_EXPORT.[Name Mitarb#/Bewerb#], SAP_EXPORT.[OrgEinh#], SAP_EXPORT.PersNr, Rohdaten.ZUBA, Rohdaten.[DM Bereich], SAP_EXPORT.[1_Jun_2016], SAP_EXPORT.[2_Jun_2016]
FROM Rohdaten RIGHT JOIN SAP_EXPORT ON Rohdaten.[OrgEinh#] = SAP_EXPORT.[OrgEinh#];
Grüße
Dr.C
Hallo,
ich dachte es wäre klar geworden, dass du einen Datensatz pro Tag brauchst und nicht separate Spalten für jeden Tag. ???
Gehen wir also davon aus, dass der Datensatz nur eine Datumsspalte hat.
Wenn du dann ein Formular (bspw. "frmAuswahl") hast zur Vorgabe der Parameter, so könnte der SQL-Code folgendermaßen erweitert werden:
SELECT Rohdaten.Kostenstelle, SAP_EXPORT.[Name Mitarb#/Bewerb#], SAP_EXPORT.[OrgEinh#], SAP_EXPORT.PersNr, Rohdaten.ZUBA, Rohdaten.[DM Bereich], SAP_EXPORT.[Datum]
FROM Rohdaten RIGHT JOIN SAP_EXPORT ON Rohdaten.[OrgEinh#] = SAP_EXPORT.[OrgEinh#]
WHERE SAP_EXPORT.[OrgEinh#] = Forms!frmAuswahl!txtOrgEinh AND SAP_EXPORT.[Datum] BETWEEN Forms!frmAuswahl!datvon AND Forms!frmAuswahl!datbis;
Oder du filterst beim Öffnen des Berichts:
DoCmd.OpenReport "repName", acViewPreview, , "SAP_EXPORT.[OrgEinh#] = " & Me!txtOrgEinh & " AND SAP_EXPORT.[Datum] BETWEEN " & Format(Me!datvon, "\#yyyy\/mm\/dd\#") & " AND " & Format(Me!datbis, "\#yyyy\/mm\/dd\#")
Hallo,
das Problem ist dass täglich 2000 Zeilen vom SAP exportiert werden, also muss man die (Arbeits)Zeiten in eine eigene Spalte packen da Access keine 2000 Datensätze speichern kann, ansonsten wäre ich schon längst fertig :-).
Gruß
Dr.
Du sprichst von Zeilen und Datensätzen, da ist die Zahl 2000 kein Problem für Access!
PS:
Zeig doch mal ein Beispiel einer aus SAP exportierten Datei, dann sehen wir weiter.
Hallo,
Zitatda Access keine 2000 Datensätze speichern kann
wie kommst Du darauf ?
Selbst 2.000.000 sind da keine Hürde.
Wohlgemerkt, Datensätze, so wie Du es geschrieben hast.
hab mal einen Screenshot vom Sap Export gemacht, dieser komm täglich neu auf das Netzlaufwerk, beinhaltet immer 1500-2000 Mitarbeiter inkl. deren Arbeitszeit etc....
Ich habe diese Datei einmal transponiert(Ausrichtung von vertikal auf horizontal) damit ich die Arbeitszeiten in eine Zeile packen kann, da war bei glaube 255 Schluss. Würde ich pro Tag ein Feld her nehmen, dann könnte ich die Arbeitszeit in dieses Feld importieren, aber wie wähle ich dann in einem Bericht den Zeitraum aus?
Gruß
Dr.
Hallo,
die Datei ist doch perfekt! Von der Idee des Transponierens solltest du dich endlich verabschieden. Die Tage gehören nicht nebeneinander sondern untereinander.
Wie du das später in einem Formular oder Bericht darstellst, ist eine ganz andere Sache. Da kannst du bei Bedarf eine Kreuztabellenabfrage einsetzen, um die gewünschte Ansicht zu erhalten.
Zitataber wie wähle ich dann in einem Bericht den Zeitraum aus?
Eben drum (!) speichert man die Daten separat, insbesondere zugunsten der besseren Auswertbarkeit.
ja aber wenn ich die Arbeitszeit täglich untereinander einfüge(hab ich das richtig verstanden?), wie schaffe ich dann einen Bezug zu den dazugehörigen Mitarbeitern bzw. zum Datum?
Ich meine, das wurde bereits gesagt, lediglich die folgenden Datenfelder werden in der Tabelle benötigt:
PersNr, Datum, Stunden (evtl. weitere)
Praktisch genauso wie du sie geliefert bekommst, nur das Datum musst du beim Import hinzufügen.
PS:
"untereinander" heißt: in separaten Datensätzen speichern, also zeilenweise in Excel-Denke.
Zitat von: MaggieMay am Mai 18, 2016, 13:57:29
Ich meine, das wurde bereits gesagt, lediglich die folgenden Datenfelder werden in der Tabelle benötigt:
PersNr, Datum, Stunden (evtl. weitere)
Praktisch genauso wie du sie geliefert bekommst, nur das Datum musst du beim Import hinzufügen.
PS:
"untereinander" heißt: in separaten Datensätzen speichern, also zeilenweise in Excel-Denke.
Ok gut und wie mache ich das mit dem Datum am Besten? dh. im Table wo täglich die Arbeitszeit importiert wird, muss auch dann noch ein zusätzl. Feld mit "Datum" eingefügt werden!?
Ich habe nochmal von vorne angefangen, meine derzeitigen Tables sehen so aus(Anhang):
Jetzt also noch beim Table "Korridor" eine Spalte/Feld mit "Datum" einfügen?
Danke für eure/deine Geduld!
Gruß
Dr.
Wenn die aus SAP exportierte Tabelle das Datum bereits enthalten würde wäre das natürlich optimal und würde der Fehlervermeidung dienen. Andernfalls musst du das Datum halt beim Import angeben, entweder per Formular oder Parameterabfrage.
Ansonsten brauchst du noch eine Personaltabelle mit allen mitarbeiterbezogenen Daten. In der täglich fortzuschreibenden Tabelle mit den Stunden brauchst du dann nur noch die Personalnummer als Referenz.
Hallo,
die Tabelle "Datentage" ist verzichtbar. In die Accesstabelle muss nur ein Feld für das Datum für das die Zeiten gelten. Monat und KW ist ohnehin überflüssig, da sich beides aus dem Datum ableiten lässt.
Du solltest auch unbedingt die Sonderzeichen (# /) aus den Feldnamen entfernen. Besonders der Gartenzaun (#) der Datumswerte kennzeichnet.
Die Tabellennamen finde ich verwirrend. Da gibt es die Tabelle Rohdaten, die ich als SAP Import erkennen würde. Aber da gibt es keinen Bezug zum MA.
Irgendwie denkst Du immer noch viel zu kompliziert. Das ist alles viel einfacher als Du denkst.
In der Accesstabelle werden 3 (mit PK 4) Spalten benötig (wie bereits gesagt).
In dem Datumsfeld kannst Du dann beliebige Zeiträume filtern, (KW, Monat, Jahr), alles über das eine Feld. Die Tabelle verlängert sich mit neuen Daten immer nach unten. Jeden Tag um 2000 DS.
IHR SEID DIE BESTEN!!!!
Jetzt habe ich es verstanden(hat etwas gedauert), ich musste einfach mein Excel Denken deaktivieren :-).
Daten werden erfasst, mit einer Anfügeanfrage füge ich täglich die Werte an den Table an(werde ich noch automatisieren). Somit fällt auch dieser dämliche Abgleich (ob neuer oder ausgeschiedener MA) weg, Hammer!
Jetzt habe ich allerdings noch eine letzte Hürde(der eigentliche Grund für diesen Thread):
Mit meinen drei Kombifeldern im Formular kann ich nun die Abteilung und das Datum aus den Tables auswählen(von und bis).
Wie muss der VBA Code des Buttons(Befehl57_Click()) aussehen damit folgendes passiert:
1. Kombifeld = Abteilung auswählen (Daten vom Table Rohdaten)
2. Kombifeld = von(Datum) (Daten vom Table Korridor) Format tt.mm.jjjj
3. Kombifeld = bis(Datum) (Daten vom Table Korridor) Format tt.mm.jjjj
Nun soll ein Bericht(bereits vorhanden) geöffnet werden(bis dahin habe ich den Code), der die Werte der Abteilung im ausgewählten Zeitraum ausgibt.
So sieht mein Code bis jetzt aus:
DoCmd.OpenReport "Bericht Korridor", acViewPreview, wherecondition:="ZUBA = '" & Me!txtOrgEinh.Value & "' AND Datum >= " & Me!datvon.Value & " AND Datum <= " & Me!datbis.Value
Vielen Dank für eure Hilfe!
Gruß
Dr.
Hallo,
das mit dem Datum geht so nicht. Datumswerte müssen SQL Konform verwendet werden entweder ISO Format (jjjj.mm.tt) oder US Format (mm.tt.jjjj).
Die Formateinstellung des Datumsfeldes ist dabei unbedeutend.
Siehe hierzu:
FAQ 6.8 Datum an SQL-String übergeben (http://www.donkarl.com?FAQ6.8)
Hallo,
das Datenfeld ZUBA ist vom Typ Text? Dann sollte es folgendermaßen klappen:
DoCmd.OpenReport "Bericht Korridor", acViewPreview, , "ZUBA = '" & Me!txtOrgEinh & "' AND Datum >= " & Format(Me!datvon, "\#yyyy\/mm\/dd\#") & " AND Datum <= " & Format(Me!datbis, "\#yyyy\/mm\/dd\#")
BTW:
"Datum" ist ein reservierter Name und sollte besser nicht für eigene Objekte verwendet werden.
ZUBA ist eine Zahl, das Datum ändere ich noch um in das og. Format um. Ich melde mich sobald ich fertig bin.
Danke nochmal!
Lg
Mario
ZitatZUBA ist eine Zahl
Dann lass die Hochkommata weg.
Zitatdas Datum ändere ich noch um
Was meinst du damit? Das Datenfeld sollst du nicht ändern, aber du musst die Format-Funktion so wie oben gezeigt auf die Formularfelder anwenden.
Zitat von: MaggieMay am Mai 19, 2016, 12:05:14
ZitatZUBA ist eine Zahl
Dann lass die Hochkommata weg.
Zitatdas Datum ändere ich noch um
Was meinst du damit? Das Datenfeld sollst du nicht ändern, aber du musst die Format-Funktion so wie oben gezeigt auf die Formularfelder anwenden.
Ich habe den Inhalt im Feld umgeändert (von dd.mm.yyyy auf yyyy.mm.dd)
Das Feld selbst habe ich umbenannt auf "Periode" und den Code etc. ebenfalls angepasst.
Klicke ich den Button, popt ein Fenster auf wo ich die Abteilung(ZUBA) eingeben muss, anschließend auch das Datum obwohl alles bereits in den Kombifeldern ausgewählt ist.
Was mache ich da falsch?
Ok die Auswahl funktioniert jetzt nach dem Entfernen der Hochkommas :-).
Eine Frage noch:
wie setze ich die Beziehung zwischen den Tables "Rohdaten" und "Korridor"?
Die OrgEinh soll dafür als Schlüssel dienen(ist in beiden Tables enthalten).
Danke !
Gruß Dr.
Hallo,
ZitatIch habe den Inhalt im Feld umgeändert (von dd.mm.yyyy auf yyyy.mm.dd)
nein, das ist völlig bdeutungslos. Das habe ich auch oben geschrieben. Das Datum muss in dem SQL String formatiert werden, wie von MaggieMay beschrieben und in meinem Link (FAQ...) erläutert. Das hat mit dem eingestellten Format nichts zu tun, das ist wurscht.
ZitatDie OrgEinh soll dafür als Schlüssel dienen(ist in beiden Tables enthalten).
Über diese Felder läuft auch die Beziehung.
Ich denke ich habe die Hochkommas falsch entfernt, jetzt wurde der Rest des Codes aus kommentiert.
Bitte noch einmal für Idioten, wo muss ich die Hochkommas entfernen damit die "ZUBA" als Zahl definiert wird?
Gruß und Danke!
Zitatwo muss ich die Hochkommas entfernen
Du musst halt unterscheiden zwischen Hochkomma (') und Gänsefüßchen ("), dann gibt es eigentlich nur
eine Wahl.
Jetzt habe ich einen Syntax Fehler(siehe Screenshot)
DoCmd.OpenReport "Bericht Korridor", acViewPreview, , "ZUBA = " & Me!txtOrgEinh & "' AND Periode >= " & Format(Me!datvon, "\#yyyy\/mm\/dd\#") & " AND Periode <= " & Format(Me!datbis, "\#yyyy\/mm\/dd\#")
Hallo,
auch für Az (") und Hochkomma (') gilt grundsätzlich nur paarweise verwendbar. Daher hilft zählen. ;D
Das Hochkomma vor And ist falsch.
Sorry, ja das habe ich übersehen :-).
Dennoch kommt jetzt wieder dieses dämliche Fenster "Parameterwert eingeben" obwohl alles bereits in den Kombifeldern ausgewählt ist.
Es ist zum verzweifeln...
Ist denn "txtOrgEinh" der Name des Kombifeldes?
Was genau steht denn in dem Parameterfenster, wofür wird die Eingabe verlangt?
Und/oder:
Setze mal einen Haltepunkt in den Code und schau dir an, was die einzelnen Steuerelemente tatsächlich enthalten.
Zitat von: MaggieMay am Mai 19, 2016, 14:45:00
Ist denn "txtOrgEinh" der Name des Kombifeldes?
Was genau steht denn in dem Parameterfenster, wofür wird die Eingabe verlangt?
Und/oder:
Setze mal einen Haltepunkt in den Code und schau dir an, was die einzelnen Steuerelemente tatsächlich enthalten.
Habs jetzt so weit dass das Formular meine Eingaben akzeptiert, nur wird einfach nichts gefiltert.
Ich habe jetzt mal die Beziehung unter die Lupe genommen, dort steht bei Beziehungstyp: Undefiniert.
Glaube es liegt auch daran, ich wähle eine ZUBA(Rohdaten) aus, anhand der OrgEinh müsste er dann die dazugehörigen Daten finden, da die OrgEinh der beiden Tables verknüpft sind(siehe Screenshot).
Schätze mal es liegt am Beziehungstyp...
Hi,
zeig doch bitte mal den SQL-Code der dem Bericht zugrunde liegenden Abfrage.
PS:
Beziehungen sollten grundsätzlich mit referentieller Integrität eingerichtet werden, aber damit hat der Fehler hier nichts zu tun.
SELECT Korridor_Daten.PersNr, Korridor_Daten.Mitarbeiter, Rohdaten.[OrgEinh#], Rohdaten.Kostenstelle, Rohdaten.[DM Bereich], Korridor_Daten.Anzahl
FROM Korridor_Daten INNER JOIN Rohdaten ON Korridor_Daten.OrgEinh = Rohdaten.[OrgEinh#];
Wo in der Abfrage siehst du das Datenfeld ZUBA??
Das hätte ich eigentlich eingefügt und den Haken bei "anzeigen" entfernt, da es im Bericht überflüssig wäre, warum es jetzt nicht im SQL Text angezeigt wird, verstehe ich auch nicht.
Heißt das also die ZUBA sowie die Periode müssen angezeigt werden(in der Query)?
Zitatwarum es jetzt nicht im SQL Text angezeigt wird, verstehe ich auch nicht.
Naja, vielleicht weil du den Haken rausgenommen hast?! :P
Natürlich müssen die Datenfelder nach denen du filtern willst auch in der Abfrage enthalten sein.
Trotzdem funktioniert der Filter nicht, auch wenn ich alles einblende... Öffnet man einfach die query, passt die Beziehung, also daran kann es nicht liegen.
Der Filter wird einfach nicht akzeptiert/genutzt...
Ich bin normalerweise kein Trinker aber heute brauch ich einen Schnaps :-)
Dann zeig doch bitte nochmal den aktuellen Stand deines Codes (SQL + VBA).
Hallo,
so weit so gut, jetzt funktioniert die Auswahl im Formular:
DoCmd.OpenReport "test_Kreuztabelle2", acViewPreview, WhereCondition:="ZUBA = " & Me!txtOrgEinh & " AND Periode BETWEEN #" & Format(datvon.Value, "yyyy\/mm\/dd") & "# AND #" & Format(datbis.Value, "yyyy\/mm\/dd") & "#"
Nun habe ich eine Kreuztabelle erstellt, damit das Datum als Spaltenüberschrift angezeigt wird, jetzt zum nächsten Problem:
MIt dem Bericht der aus der Kreuztabelle entsteht, funktioniert die Auswahl im Formular wieder nicht, meine Vermutung:
Er findet die Datumswerte nicht da diese jetzt als Überschrift dienen.
Kann man dies irgendwie umgehen?
Danke!
Gruß
Dr.
Hallo,
möglicherweise klappt es deshalb nicht:
DoCmd.OpenReport "test_Kreuztabelle2", acViewPreview, WhereCondition:="ZUBA = " & Me!txtOrgEinh & " AND Periode BETWEEN #" & Format(Me!datvon, "yyyy\-mm\-dd") & "# AND #" & Format(Me!datbis, "yyyy\-mm\-dd") & "#"
Hi,
ich denke die Vermutung, dass der auf der Kreuztabellenabfrage basierende Bericht nicht mehr nach dem Datum gefiltert werden kann, ist schon ganz richtig. Die Filterung müsste also vor oder in der KT-Abfrage passieren.
Wenn du dazu Hilfe brauchst, zeige bitte den SQL-Code der KT-Abfrage.
Hallo,
@df6: du meinst also ich soll die rot markierten Zeichen entfernen?
@MaggieMay: habe ich dann nicht wieder das Problem dass die Daten nicht aktualisiert werden?
Es kommen täglich 2000 neue Datensätze in den Table.
Dieses Projekt raubt mir noch den letzten Nerv!
Gruß
Dr.
@Dr.:
Ich kann dir nicht ganz folgen. Was hat das Filtern einer Kreuztabellenabfrage bzw. eines Berichts mit der Aktualisierbarkeit einer Tabelle zu tun?
Damit das neue Datum quasi autom. im Bericht angefügt wird.
Es hat keinen Sinn, ihr gebt euer Bestes um mir zu helfen, aber ein komplettes Projekt in einem Forum zu realisieren ist einfach unmöglich.
Werde mal mit dem Chef reden dass so etwas eine Zumutung für jemanden ist, der mit dieser Materie keinerlei Erfahrung hat.
Gruß
Dr.
Zitat von: Dr.Cornwallis am Mai 25, 2016, 11:04:33
Hallo,
@df6: du meinst also ich soll die rot markierten Zeichen entfernen?
@MaggieMay: habe ich dann nicht wieder das Problem dass die Daten nicht aktualisiert werden?
Es kommen täglich 2000 neue Datensätze in den Table.
Dieses Projekt raubt mir noch den letzten Nerv!
Gruß
Dr.
Sorry, hab ich vorhin übersehen, hier der Code:
TRANSFORM Sum(Korridor_Daten.Anzahl) AS SummevonAnzahl
SELECT Korridor_Daten.Mitarbeiter, Rohdaten.ZUBA
FROM Rohdaten INNER JOIN Korridor_Daten ON Rohdaten.[OrgEinh#] = Korridor_Daten.OrgEinh
WHERE (((DateSerial(Year([Periode]),Month([Periode]),1))=DateSerial(Year(Now()),Month(Now()),1)))
GROUP BY Korridor_Daten.Mitarbeiter, Rohdaten.ZUBA
PIVOT DateAdd("d",-(Weekday([Korridor_Daten]![Periode],1))+IIf(Weekday([Korridor_Daten]![Periode],7)=1,1,8),[Korridor_Daten]![Periode]);
DatAdd und DatSerial hat nicht geholfen, bzw. erreiche ich damit nicht das gewünschte Ergebnis.
Gruß
Dr.
Hallo,
nein, nicht entfernen, sondern korrigieren.....
wobei sich das nur auf richtige Formatierung eines Datumswertes bezieht und nicht unbedingt auf die Lösung Deines Problems.
IN Sql muss entweder das USA-Format oder das ISO-Format verwendet werden:
USA: #31/12/2016#
ISO: #2016-12-31#
Hi,
Zitat von: Dr.Cornwallis am Mai 25, 2016, 11:43:18DatAdd und DatSerial hat nicht geholfen
wer oder was hat dich denn auf diese Idee gebracht?
So hätte ich mir das vorgestellt:
TRANSFORM Sum(Korridor_Daten.Anzahl) AS SummevonAnzahl
SELECT Korridor_Daten.Mitarbeiter, Rohdaten.ZUBA
FROM Rohdaten INNER JOIN Korridor_Daten ON Rohdaten.[OrgEinh#] = Korridor_Daten.OrgEinh
WHERE ZUBA = Forms!formname!txtOrgEinh AND Periode BETWEEN Format(Forms!formname!datvon, "\#yyyy\/mm\/dd\#") AND Format(Forms!formname!datbis, "\#yyyy\/mm\/dd\#")
GROUP BY Korridor_Daten.Mitarbeiter, Rohdaten.ZUBA
PIVOT DateAdd("d",-(Weekday([Korridor_Daten]![Periode],1))+IIf(Weekday([Korridor_Daten]![Periode],7)=1,1,8),[Korridor_Daten]![Periode]);
wobei ich jetzt den PIVOT-Eintrag jetzt einfach mal übernommen habe, in der Annahme dass das so gewollt ist.
Danke für deine Mühe, muss ich dann wahrscheinlich noch den Code vom Button ändern(das der Bericht ohne Bedingung geöffnet wird)?
Gruß
Dr.
Öffne ich die Kreuztabelle manuell oder fülle das Formular aus, erhalte ich folgende Fehlermeldung(Anhang).
Code wurde an mein Formular natürlich angepasst.
Zitat von: Dr.Cornwallis am Mai 25, 2016, 13:44:18
muss ich dann wahrscheinlich noch den Code vom Button ändern(das der Bericht ohne Bedingung geöffnet wird)?
Ja, klar.
Zitaterhalte ich folgende Fehlermeldung
Die Gültigkeit der Namen kannst nur du überprüfen.
Gut möglich, dass die Parameter in der Abfrage deklariert werden müssen.
Wenn aber nur der eine angemeckert wird, liegt es wohl doch eher am Namen.
Ansonsten:
Parameters Forms!formname!txtOrgEinh Integer, Forms!formname!datvon Date, Forms!formname!datbis Date;als erste Zeile in die Abfrage einfügen.
also der Inhalt vom Kombifeld txtOrgEinh(sollte ich mal auf txtZUBA umändern) ist eine Zahl, die Orgeinheit selbst ist ein Text.
Hab den Code eingefügt, klappt dennoch nicht...vllt. Lust auf TeamViewer? :-) -> doch nicht, Firewall ist dagegen :-)
Gruß Dr.
Zitatwobei ich jetzt den PIVOT-Eintrag jetzt einfach mal übernommen habe, in der Annahme dass das so gewollt ist.
lassen wir das mal weg :-)
Du könntest eine Beispiel-DB hochladen mit dem zum Nachstellen des Problems benötigten Objekten (Formular, Abfrage(n), Bericht).
Ok, kann ich machen, das einzige Problem ist dass ich den Bericht nicht aus der Kreuztabelle erstellen kann, da bereits bei der Kreuztabelle das Problem entsteht bzw. dieser bei der Datenblattansicht bereits auftritt. Also kann ich keine Felder für den Bericht auswählen.
Moment ich erstelle kurz diese DB und lade sie dann hoch
Gruß
Dr.
DB ist leider zu groß, hat etwas über 1000KB...
So jetzt aber...DB im Anhang, natürlich nur mit dem relevanten Tables,Forms und Querys.
Im Table Korridor_Daten sind normalerweise 1000e von diesen Datensätzen
Gruß
Dr.
Hallo,
lies mal hier:
http://www.donkarl.com/?FAQ3.18
Du musst bei der Deklaration der Parameter in der KT-Abfrage natürlich auch den korrekten Formularnamen angeben, sonst wird das nichts.
Kannst du bitte mal mit Worten erklären, was du mit dem Pivot-Ausdruck (DateAdd...) bezweckst? Wieso ermittelst du den Wochentag mal auf Basis von 1 (=Sonntag) und 7 (=Samstag) als ersten Wochentag der Woche?
Zitat von: DF6GL am Mai 25, 2016, 16:16:40
Hallo,
lies mal hier:
http://www.donkarl.com/?FAQ3.18
Ein paar Posts weiter oben hat mir MaggieMay bereits den SQL Code dafür geschrieben, klappt trotzdem nicht.
@Maggie: ich habe die diesen Code geändert um zu verstehen was dieser Code macht.
Gruß
Hallo,
Zitat von: Dr.Cornwallis am Mai 27, 2016, 08:08:28@Maggie: ich habe die diesen Code geändert um zu verstehen was dieser Code macht.
ich weiß jetzt nicht recht, was du mir damit sagen willst.
Hast du die Parameters-Deklaration korrigiert? Dann sollte das klappen.
Die Erklärung bzgl. des PIVOT-Ausdrucks hätte ich auch noch gern.