Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Beziehung in Abfrage

Begonnen von Malina, Juni 15, 2024, 20:09:20

⏪ vorheriges - nächstes ⏩

Malina

Hallo zusammen
Ich raffe echt nicht was ich gemacht habe und wo das Problem liegt!
Ich habe eine Tabelle Namens Kalender. Dies ist eigentlich die Haupttabelle, daraus entsteht ein Kalender.
Nun habe ich zwei weitere Tabellen, auf welche dann in Beziehung zur Tabelle Kalender eine Abfrage erstellt wird. Die Tabellen heissen Journal und Diensteinteilung. Dann habe ich Formulare mit Unterformularen. Die Formulare basieren auf der Tabelle Kalender, die Unterformulare auf die entsprechende Abfrage.
Bei der Abfrage Diensteinteilung funktioniert alles wie es soll, bei der anderen nicht!
Den einzigen Unterschied den ich finden konnte ist, dass bei der Beziehung Diensteinteilung der rechte Spaltenname in[] gesetzt ist. Bei der anderen Beziehung nicht!
Kann dies das Problem sein, falls ja... Wie löse ich dieses?
Ich habe schon etliche Male die falsche Tabelle Journal, deren Abfrage und Formulare gelöscht und neue erstellt! Ich krieg es einfach nicht hin!!!
Besten Dank für eure geschätzte Hilfe!

MzKlMu

#1
Hallo,
was funktioniert denn nicht ?
Das Klammerpaar [] spielt keine Rolle.

Zeige mal ein Bild des Beziehungfensters.

PS:
Die Bilder sind keine Beziehungen, sondern Verknüpfungen (es heißt ja auch Verknüpfungseigenschaften).
Verknüpfungen können von den Beziehungen abweichen, können aber auch gleich sein. Mit anderen Worten, Beziehungen und Verknüpfungen sind 2 verschiedene Dinge.
Gruß Klaus

Malina

Also, ich habe jetzt nochmals von vorne begonnen. Das ursprüngliche Problem besteht nicht mehr. Jenes mit den Klammern. Aber das Problem ist, dass wenn ich die entsprechende Abfrage mit Doppelklick öffne, filtert es mir bei der Abfrage (Diensteinteilung) die Daten und bei der Abfrage Journal nicht. Die beiden Abfragen sind genau gleich aufgebaut, einzig hat die Tabelle Journal andere Felder als jene der Diensteinteilung!
Ich begreife echt nicht, wo das Problem liegt... Kann ja nicht mehr als alles genau gleich machen!
Sorry für den falschen Ausdruck, bin schon ein bisschen müde. Aber besser wird es die nächsten Tage nicht mehr  :-\

Malina

Ach so, hier noch ein Printscreen von meinen beiden Abfragen:
- Diensteinteilung -> funktioniert wie es soll
- Journal -> geht nicht!

MzKlMu

#4
Hallo,
warum stellst Du in den Beziehungen keine referentielle Integrität ein ?

Ich habe immer noch nicht verstanden was genau nicht funktioniert.

Das Datenmodell mit den Wochentagen scheint mir fragwürdig, wie unterscheidest Du denn die Wochen ?

Was steht denn in den Feldern "Kalender_Montag" (usw) ein Datum, oder sind das Ja/Nein Felder.

PS:
Es ist vorteilhaft (gerade für einen Anfänger) wenn es in der ganzen DB keine Felder gibt mit gleichen Namen.
Und nenne die PK Felder nicht einfach ID, sondern nimm Bezug auf den TAbellennamen. An die Fremdschlüsselfelder hängst Du dann ein _F an.

Zu den beiden neuen Bildern:
Wenn Du unterformulare verwendest, so ist die Filterung in den Abfragen überflüssig.
Wenn Hafo und Ufo über die Schlüsselfelder verknüpft sind, wird automatisch gefiltert.
Gruß Klaus

Malina

Hi Klaus
Also, die Idee ist folgende. Bis anhin haben meine Kollegen mit unzähligen Excel-Tabellen gearbeitet. Als ich da mal ein Problem mit dem VBA-Code lösen musste, weil die irgendwas gemacht haben und dann nicht mehr wusste wie sie das Problem verursacht haben, bekam ich die Tabelle das erste Mal zu Gesicht. Mir wurde Angst und Bange was die da alles hinterlegt haben und versuchen mit etlichen Verweisen über tausend Ecken noch irgendwelche Daten zu filtern. Da hab ich den Vorschlag gemacht, dass dies besser und einfach zu lösen wäre wenn man es schlau macht. Nur so schlau bin ich leider auch wieder nicht, hab gedacht es geht einfach.
Leider bietet Access keinen Kalender. So habe ich mich auf die Suche gemacht nach einer Lösung und wurde im Netz fündig.
Die Tabelle Kalender hat folgende Einträge:
- ID -> Klar, fortlaufende Nummer
- Montag bis Sonntag -> dort steht dann jeweils das Datum. Wenn die ID eins höher wird beginnt die neue Woche.
Daraus entstand dann das Hauptformular frm_Kalender (siehe Anhang)
Dort kann man nun die entsprechenden Daten eintragen. Auf der Hauptseite sind nur die wenigsten Einträge vorhanden und das funktioniert bis jetzt. Wenn ich nun im frm_Kalender auf das Datum klicke, welches grau hinterlegt ist, geht mir der Tagesplan auf. Der Tagesplan ist ein Hauptformular und ist auf die Tabelle Kalender aufgebaut. Darin enthalten ist ein Unterformular (Endlosformular), welches sich dann auf die Abfrage Diensteinteilung abstützt. Da pro Tag mehrere Personen im Dienst sind, muss ich dort auch mehrere Mitarbeiter auswählen können. Bis dahin funktioniert alles wie gewollt.
Wenn ich dann auf dem entsprechenden Tag bin, kann ich noch das Tagesjournal (mittels Button) öffnen. Das Hauptformular frm_Journal ist wieder (genau wie beim Tagesplan) auf die Tabelle frm_Kalender abgestützt und enthält ein Unterformular, welches die Abfrage Journal als Quelle hat. Und dort funktioniert es mir nicht, dass es mir im Endlosformular (Unterformular) die entsprechenden Datensätze anzeigt, welche ich schon eingegeben habe. Er soll ja dort nach ID und z.B. am Montag nach dem Datum vom Montag filtern. Oder dann die ID (der Dienstag dieser Woche hat dann die gleiche ID) und zusätzlich noch das Datum vom Dienstag. Dann komme ich immer auf den korrekten Tag.
Noch zu deiner Frage, im Feld Kalender_Montag steht das entsprechende Datum. Also zur ID-Nr. 24 steht da z.B. 10.06.2024, bei der ID-Nr. 25 dann 17.06.2024.
Vermutlich hätte ein Profi das ganz anders gemacht oder eine besser Idee gehabt... Das bin ich mir bewusst. Ich schnall einfach nicht, wieso es beim einen Formular funktioniert und beim zweiten, welches gleich aufgebaut ist und einfach eine andere Abfrage als Quelle hat, nicht.
Besten Dank für die Hilfe!
Liebe Grüsse - Nicole

Beaker s.a.

Hallo Malina,
ZitatNoch zu deiner Frage, im Feld Kalender_Montag steht das entsprechende Datum. Also zur ID-Nr. 24 steht da z.B. 10.06.2024, bei der ID-Nr. 25 dann 17.06.2024.
Vermutlich hätte ein Profi das ganz anders gemacht
Höchstwahrscheinlich. Ich bin zwar auch keine Profi, aber eine Kalendertabelle
sieht meist anders aus.
Das Datum wäre der PK, weil immer eindeutig. In weiteren Feldern kann man die
KW, den Wochentag und Weiteres (z.B. Feiertage) hinterlegen.
Schau mal hier.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MzKlMu

#7
Hallo,
ich glaube im Moment nicht, dass man da eine Kalendertabelle braucht, denn ich denke hier muss der Wochentag und Feiertage gar nicht berücksichtigt werden, denn in den Dienstplan müssen alle Tage.

Ich denke, auch die einzelnen Felder für den Wochentag sind auch überflüssig, denn wenn ohnehin ein Datum eingetragen wird, ist der Wochentag bekannt. Warum soll das heutige Datum extra in ein Feld mit Sonntag, wenn aus dem Datum der Wochentag völlig problemlos sowohl als Zahl (Sonntag=7) als auch als Klartext angezeigt werden soll. Im Regelfall wird man für den Wochentag immer die Zahl speichern, weil nur dann die Tagfolge richtig sortiert werden kann. Wobei, wenn das Datum gespeichert wird stimmt auch die Reihenfolge der Wochentage wenn man nach dem Datum sortiert.
Ich würde einfach den Dienstplan als fortlaufende Tabelle mit einem Datum und Zeit, einem Bezug zur Person und einem Bezug zur Tätigkeit erstellen. Alle Felder mit dem Wochentag können ersatzlos gelöscht werden.

Ich habe hier ein Bild angehängt, sind das die Tätigkeiten ?
In welcher Tabellen stehen diese?
Sind diese Tätigkeiten fest ?
Kommen da noch welche dazu ?Was bedeutet das Feld "Fach" ?
Gibt es auch frei formulierte Tätigkeiten ?

Zitatwieso es beim einen Formular funktioniert und beim zweiten, welches gleich aufgebaut ist und einfach eine andere Abfrage als Quelle hat, nicht.
Funktioniert nicht, ist eine wenig hilfreiche Beschreibung. Du hast trotz Rückfrage immer noch nicht erklärt, was nicht funktioniert.


Gruß Klaus

Malina

Hallo zusammen
Bitte entschuldigt das lange warten auf eine Antwort. Ich musste gestern mal schlafen  ;)

Also, die Tätigkeiten sind nicht jene vom Bild. Dieses sind nur leere Textfelder, wo man einfach gewisse Daten eintragen kann. Diese stehen also auch nicht in einer Tabelle. Das Feld Fach bezieht sich auf einen Eintrag, wie stark die Wasserschleuse beim See geöffnet ist. Bei Hochwasser geht mehr Wasser aus dem See damit es nicht zu Überschwemmungen kommt. Wir aber von Tag zu Tag etwas eingetragen... Also steht in keiner Beziehung zu einer Tabelle!
Ich habe im Anhang nochmals ein paar Bilder:
1. frm_Tagesdetail
Dort wird die ID vom Kalender übernommen und ebenfalls das Datum. Die restlichen Felder wie Ort, Dienstzeit, Wasserstand u.s.w. sind frei wählbar ausser Wetter und Verkehr.
Dann sieht man dort das Unterformular für die Diensteinteilung. Wichtig sind dort nur die Felder Mitarbeiter / in und Dienstnummer. Die restlichen sind momentan nur sichtbar um zu schauen ob alles funktioniert. Wie man sieht, stehen dort nun die Mitarbeiter, welche an diesem Tag eingeteilt wurden.
Dann ist dort noch der Button Journal, welcher das frm_Journal öffnet.
2. frm_Journal
Hier wird ebenfalls die ID vom Kalender und das Datum übernommen. Dann kommen wir hier zum Unterformular. Momentan sind dort einfach die Felder Zeit und Was. Zeit ist frei wählbar, Was ist mit der Tabelle Tätigkeit verbunden. Dort wird später ausgewählt, um welche Zeit ein Auftrag gemacht wurde und um was es sich handelte. Können Umweltschutzdelikte sein, Kontrolle, Seenotfälle, Taucheinsätze u.s.w.
3. tbl_Diensteinteilung
Die Einträge von den diversen Mannschaften an den entsprechenden Tagen werden hier gespeichert.
4. tbl_Journal
Hier werden die Einträge für den entsprechenden Tag vom Journal gespeichert.
5. abf_Diensteinteilung
Das ist das Restultat, wenn ich die Abfrage Diensteinteilung ausführe. Wie man sieht komme ich hier zu einem Resultat!
6. abf_Journal
Und jetzt kommen wir zu dem Teil der nicht funktioniert... Wenn ich die Abfrage Journal ausführe kommt kein Ergebnis. Deshalb bleibt auch das Unterformular im frm_Journal leer. Und das obwohl ja die tbl_Journal Einträge enthält. Hier ist mein Problem.
Die tbl_Diensteinteilung und tbl_Journal wurden gleich erstellt. Einfach mit anderen Einträgen. Die Abfragen abf_Diensteinteilung und abf_Journal sind ebenfalls gleich aufgebaut, wiederum einfach dann mit zusätzlichen Einträgen. Aber es funktionieren nicht Beide...

Ich bin euch wirklich dankbar für die Hilfe!
Bezüglich Feiertagen. Das interessiert bei uns niemanden. Wir sind 365 Tage / 24 Stunden im Schichtdienst am Arbeiten. Deshalb müssen diese nicht berücksichtigt werden  :)

Besten Dank und liebe Grüsse
Nicole

Malina

So, jetzt funktioniert es... Fragt mich nicht was ich geändert habe! Ich habe zum x-ten mal alles von vorne begonnen. Ich habe die abf_Diensteinteilung kopiert und dort die tbl_Journal rein genommen. Dann habe ich langsam immer wieder was von der tbl_Diensteinteilung gelöscht und geschaut was passiert. Plötzlich hatte ich acht Einträge wo nur zwei hätten sein dürfen. Also weiter gelöscht, Schritt für Schritt vorwärts gekämpft. Jetzt klappt es! Aber weshalb, es sieht nämlich immer noch gleich aus wie Gestern...
Hauptsache es passt jetzt!  8)

MzKlMu

#10
Hallo,
leider gehts Du gar nicht weiter auf meine anderen Hinweise zum Datenmodell ein.
Dein Aufbau ist Excelstruktur. Und Excelstruktur nach Access zu übertragen geht im Regelfall schief.
Die Felder mit den Wochentagsnamen halte ich alle für überflüssig. Auch die Kalendertabelle wird nicht wirklich benötigt.
Der Dienstplan ist einfach nur eine fortlaufende Tabelle in der die Person als Fremdschlüssel erfasst wird, in je einem Datensatz. Aus dem Datum lässt sich der Wochentag ermitteln und bei Bedarf mit einer Kreuztabellenabfrage in je einer Spalte darstellen.

ZitatAber weshalb, es sieht nämlich immer noch gleich aus wie Gestern...
Bei Abfragen mit INNER JOIN muss es zu jedem Schlüsselpaar einen Eintrag in den Tabellen geben. Wahrscheinlich hat das alles nicht gestimmt.
Das hängt auch mit nicht eingestellten referentiellen Integrität (RI) zusammen wodurch auch unpassende Einträge zugelassen werden. So ist es damit z.B. möglich in der tbl_Journal Datensätze ohne Fremdschlüssel anzulegen die dann in der Abfrage nicht angezeigt werden.
RI verhindert solche inkonsistenten Daten und ist unbedingt anzuwenden.
Gruß Klaus

Malina

Sorry, dass ich nicht alles beantwortet habe. Also, du würdest pro Tag eine ID erstellen?
Ich habe die Referenzielle Integrität gesetzt. Aber das hat das Problem anfänglich auch nicht gelöst.
Klar kann ich eine Tabelle mache mit Kalender und dann nur die ID und das Datum nehmen. Würde es vermutlich auch wirklich übersichtlicher machen! Da gebe ich dir vollkommen recht... Nur mein Problem, mit Kreuztabellenabfragen habe ich jetzt wirklich noch nie gearbeitet. Das haben wir auch an der Ausbildung nicht gelernt.
Aber ich werde dies gerne einmal versuchen ob ich dies schaffe, gibt ja sicherlich genügend Videos um mich da schlau zu machen!
Die jetzige Darstellung und Idee mit den Wochentagen habe ich ja auch nur aus dem Netz kopiert weil mir eine Idee dazu fehlte  ::)

MzKlMu

Hallo,
ZitatAlso, du würdest pro Tag eine ID erstellen?
ID ist hier nebensächlich. Je Tag, je Person (deren PS) ein Datensatz ggf. noch ein Feld für den PS zu dem was zu tun ist (Tätigkeit). Und dieser Datensatz bekommt natürlich dann einen Primärschlüssel (ID) als Autowert. Eine Kalendertabelle ist da nicht notwendig.

Was wird denn im Journal erfasst ?
Gruß Klaus

Malina

Besten Dank für die Antwort.

Also, nehmen wir den heutigen Tag:
Diensteinteilung:
Der Dienstchef muss heute die Kameraden in den Dienst einteilen, es gibt vier Dienstnummern 1 - 4. Es gibt Tage, da ist nur der Dienst 2 anwesend, da gibt es Tage wo wir Dienst 3 und 4 haben oder 1 und 4. Wie auch immer. Pro Dienst sind immer zwei Mitarbeiter anwesend. z.T. gibt es Tage im Winter da ist nur eine Person anwesend. Da muss also einfach flexibel sein zwischen 0 und 10 Personen.
Allgemeine Infos:
Hier werden allgemeine Infos für den Tag eingetragen: Lufttemperatur (3x pro Tag), Wassertemperatur, Wasserstand, Öffnung der Schleusen u.s.w. Hier gibt es jeweils pro Eintrag nur eine Info.
Journal:
Hier wird über den Tag eingetragen was gemacht wurde. Gab es einen Seenotfall, gab es eine Übung, gab es einen Einsatz, musste etwas repariert werden u.s.w. Also die Tätigkeiten. Wie viele Einträge es pro Tag gibt ist sehr unterschiedlich. Es können nur zwei sein, es können 20 sein. Das variiert je nach Auftrags- und Wetterlage.
Aufträge:
Hier werden die Aufträge erfasst. Also, vor einer Woche ging ein Auftrag rein, welcher heute ausgeführt werden muss. z.B. es gibt eine neue Baustelle im Uferbereich. Dort muss heute eine Kontrolle ausgeführt werden, ob die Wasserschutzmassnahmen eingehalten werden. Dann muss der Auftrag dem entsprechenden Dienst von heute zugeteilt werden und das Mail, Karte, Dokument oder ein Bild wird direkt beim Auftrag angehängt.
Das ist so das Grundprinzip was im Kalender alles funktionieren soll.
Als Zusatz gibt es dann später noch das Inventar. Aber das ist dann eine Kleinigkeit, wenn der Rest mal funktioniert. Und dies hat auch keine Verbindung zum Rest sondern ist vom Rest losgelöst.

Ich weiss was wie du die Idee als Grundprinzip angedacht hast. Nur ist vom Chef, der mir die Anfrage gestellt hat der Wunsch vorhanden, dass auf der Hauptseite ein Kalender vorhanden ist. Auf diesem Kalender sollen die wichtigsten Infos (Allgemeine Infos) direkt ersichtlich sein. Da weiss ich noch nicht, wie ich es mit deiner Idee bewerkstelligen kann, wenn ich ja nicht im Voraus direkt die Datumsangaben in einer entsprechenden Tabelle habe. Zudem wünscht er, dass direkt ersichtlich ist, ob ein Auftrag vorhanden ist oder nicht.

Besten Dank und liebe Grüsse
Nicole

Malina

So, ich hab jetzt nochmals von vorne angefangen. Wenn ich dich richtig verstanden habe sieht dies nun mehr nach deiner Idee aus. Was ich sagen muss, sicherlich schon einmal übersichtlicher mit den ganzen Beziehungen, da es auch viel weniger Werte gibt als zuvor.
In der tbl_Daten ist lediglich das Datum vorhanden. Diese ID wird dann für die restlichen Tabellen verwendet. Ist das so einigermassen korrekt umgesetzt?