Juni 30, 2022, 21:51:57

Neuigkeiten:

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


Datenbank für Flugverein - Problem beim Verständnis der Beziehungen

Begonnen von mr.airworthy, März 27, 2022, 21:28:37

⏪ vorheriges - nächstes ⏩

mr.airworthy

Hallo zusammen!

Bisher konnte mir das Forum bei meinen "Problemchen" immer gut weiterhelfen (DANKE dafür!), allerdings grübel ich jetzt schon einige Tage an meiner Datenbank und komme nicht wirklich weiter.
Zu meinem "Problem":
  • meine Datenbank besteht aktuell aus 3 Tabellen. Tabelle 1 definiert die Benutzergruppen ID 1-3. Also sehr simpel. Tabelle 2 dient der Mitgliederverwaltung. Hier wird gleichzeitig jedes Mitglied mittels Combo Box einer Gruppe aus Tabelle 1 zugeordnet. Tabelle 3 beinhaltet Dokumente, die von den Mitgliedern aus Tabelle 2 gelesen werden müssen (und bestätigt werden sollen, dazu aber gleich mehr) und auch den Gruppen aus Tabelle 1 zugeordnet werden. Dokument 1 ist also z.B. nur für Gruppe 1, Dokument für Gruppe 2+3, Dokument 3 für Gruppe 2 usw. Alle 3 Tabellen stehen also in Beziehung zueinander
  • soweit so gut - jetzt habe ich mir ein Formular gebaut, bei dem ich per Combobox ein Mitglied auswählen kann. Zusätzlich gibt es eine Subform, in der die Dokumente aus Tabelle 3 angezeigt werden sollen, die für das jeweilige Mitglied zugehörig sind. Wenn ich jetzt die Dokumente in der Subform nach Nummerierung (Primärschlüssel) sortieren möchte, dann kommt direkt der Fehler "Syntax error (missing operator) in query expression '...'." Da das meine erste Access Datenbank ist, habe ich natürlich keinerlei Ahnung, was ich da falsche gemacht habe.
  • zusätzlich würde ich jetzt gerne in der Subform per Check Box die jeweiligen Dokumente für jedes Mitglied bestätigen lassen. Aber mit einer Check Box an sich ist es nicht getan, denn dann werden einfach alle Dokumente für alle Mitglieder "gecheckt". Meine Überlegung war jetzt, dass ich eigentlich eine Tabelle benötige, bei der die Mitglieder in der x-Achse aufgelistet werden und die Dokumente in der y-Achse gelistet werden. Dann könnte man für jede Paarung eine einzelne Check Box haben. Ich befürchte aber, dass mein Gedankengang komplett falsch ist.

Also noch mal kurz: wodurch habe ich den Syntax Error produziert und wie kann ich eine "Abhakliste" bauen, damit jeder das Lesen der Dokumente bestätigen kann?

Ich habe schon eine abgespeckte Version meiner Datenbank erstellt (fiktive Personen und Dokumente), die ich gerne hochladen kann.


Beste Grüße, AJ :)

DF6GL

Hallo,


Punkt 2)   Ohne Kenntnis der Abfrage (SQL-String) und des genauen Tabellenaufbaus (Beziehungsfenster) ist da wenig dazu zu sagen.

Punkt3) bezgl. x-Achse und y-Achse geht der Gedankengang vermutlich in die falsche Richtung.

Zitatwie kann ich eine "Abhakliste" bauen, damit jeder das Lesen der Dokumente bestätigen kann?

Es muss ein "Abhak"-Haken (Kontrollkästchen) in der Tabelle mitgeführt werden, in der die Zuordnung der Dokumente zu den Mitgliedern stattfindet. Besser als ein KK wäre ein Datumsfeld ("gelesenAm"), das das Lese-Datum aufnimmt.


Zitatdie ich gerne hochladen kann.

tu das, es wäre sinnvoll...   ;)

mr.airworthy

Vielen Dank für die schnelle Antwort. Ich habe schon befürchtet, dass ich mit meiner Idee auf dem Holzweg bin. Leider konnte ich bisher keine Alternative finden, was aber wohl daran liegt, dass ich nicht weiß wonach ich suchen muss.

Ein Datumsfenster wäre natürlich noch besser, ich ging nur davon aus, dass ein einfaches KK ,,einfacher" wäre. Offensichtlich immer noch zu kompliziert für meinen Wissensstand.  ::)

Beste Grüße!Sie dürfen in diesem Board keine Dateianhänge sehen.

Beaker s.a.

@mr.airworthy
In der Hoffnung, dass ich hier nicht doppelte Anmerkungen schreibe weil Franz
das auch gerade tut, und so auf die Schnelle.
1. lösche erstmal alle Beziehungen (werden später neu angelegt)
2. spendiere allen Tabelle, die noch keinen haben einen AutoWert als Primär-
schlüssel; - Textfelder sind dafür schlecht geeignet, und nenne ihn nicht
einfach "ID", sondern gebe einen zur Tabelle passenden Namen
3. für das Feld "Applicability" (aus der vorhandenen Tabelle muss das raus)
musst du eine n:m-Tabelle zwischen "Members" und "CIF" anlegen
tblApplicabilities
- ApplicabilityID -> PK (Autowert)
- MemberID_F -> FK (Zahl, LongInteger)
- CIF_ID -> FK (Zahl, LongInteger)
- gelesen_am -> Datum
4. ändere das Feld "Link" zu einem Textfeld, das Öffnen des Dokuments erfolgt
dann später auch per Klick im Formular mit der Methode "FollowHyperlink"
5. ändere das Feld "Published" zu einem Datumsfeld, das Jahr lässt sich daraus
jederzeit ermitteln
6. das Gleiche gilt für das Feld "Birthday" -> Datumsfeld, eine deinen Wünschen/
Vorgaben entsprechende Formatierung ist auch an allen Stellen, wo es gebraucht
wird möglich, nur rechnen kann man damit so nicht
7. lege Beziehungen immer mit "referentieller Integrität" an

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

mr.airworthy

Vielen Dank Ekkehard!
Leider liess meine Antwort ein wenig auf sich warten, da ich Deine Tipps nicht nur umsetzen, sondern auch - zumindest ein wenig - verstehen wollte. Wer weiß, wann ich die nächste (zweite) Datenbank schreibe. :)

Zitat von: Beaker s.a. am März 28, 2022, 19:07:371. lösche erstmal alle Beziehungen (werden später neu angelegt)
Erledigt. Ich hatte mich schon gefragt, warum andere Beziehungen meist mit Symbolen an den Verknüpfungen beschriftet waren. Jetzt weiss ich es.

Zitat von: Beaker s.a. am März 28, 2022, 19:07:372. spendiere allen Tabelle, die noch keinen haben einen AutoWert als Primär-
schlüssel; - Textfelder sind dafür schlecht geeignet, und nenne ihn nicht
einfach "ID", sondern gebe einen zur Tabelle passenden Namen
Habe ich ebenfalls nachgeholt. Auch wenn mich jetzt die Nummerierung ein wenig irritiert, aber die kann man ja auch ausblenden lassen.
Zusätzliche habe ich versucht die Formulare etwas aufzuräumen (Bezeichnung der Steuerelemente standardisiert).

Zitat von: Beaker s.a. am März 28, 2022, 19:07:373. für das Feld "Applicability" (aus der vorhandenen Tabelle muss das raus)
musst du eine n:m-Tabelle zwischen "Members" und "CIF" anlegen
tblApplicabilities
- ApplicabilityID -> PK (Autowert)
- MemberID_F -> FK (Zahl, LongInteger)
- CIF_ID -> FK (Zahl, LongInteger)
- gelesen_am → Datum
Habe ich angelegt! Allerdings ist mir jetzt nicht klar, ob ich die Tabelle selbst füllen muss oder ob das später im Formular/Unterformular realisiert wird. Wenn ich diese tbl jetzt händisch füllen muss: gibt es da einen Trick, dass einfach zu realisieren? In meiner eigentlichen Datenbank habe ich knapp 150 Mitglieder und 50 Dokumente - die Anzahl der "gelesen_am" beträgt also mehr als 5000.

Zitat von: Beaker s.a. am März 28, 2022, 19:07:374. ändere das Feld "Link" zu einem Textfeld, das Öffnen des Dokuments erfolgt
dann später auch per Klick im Formular mit der Methode "FollowHyperlink"
Ebenfalls erledigt. Ist so viel schöner gelöst, da in der tbl nicht jedes mal der Hyperlink ausgeführt wird, wenn man auf die entsprechende Zeile drückt. Vielen Dank!

Zitat von: Beaker s.a. am März 28, 2022, 19:07:375. ändere das Feld "Published" zu einem Datumsfeld, das Jahr lässt sich daraus
jederzeit ermitteln
Erledigt.

Zitat von: Beaker s.a. am März 28, 2022, 19:07:376. das Gleiche gilt für das Feld "Birthday" -> Datumsfeld, eine deinen Wünschen/
Vorgaben entsprechende Formatierung ist auch an allen Stellen, wo es gebraucht
wird möglich, nur rechnen kann man damit so nicht
Grundsätzlich wollte ich das Feld später nur als Passwort nutzen, damit im Formular, in dem jedes Mitglied die ihm zugehörigen Dokumente abzeichnen muss, vorher sein persönliches PW (Geburtstag) eingeben muss. So wollte ich verhindern, dass jemand aus Versehen für eine andere Person Dokumente bestätigt. Wenn es trotzdem mehr Sinn ergibt, das ganze als Datum darzustellen, dann hole ich das nach. :)

Zitat von: Beaker s.a. am März 28, 2022, 19:07:377. lege Beziehungen immer mit "referentieller Integrität" an
Auch hier: sorry, da habe ich vorher einfach nicht richtig nachgelesen. Die Erklärungen dazu machen deutlich, warum das Sinn ergibt.


Anbei wieder meine aktualisierte und ausgedünnte Datei. Vielen lieben Dank für die tolle Hilfe! Nur jetzt zu meiner eigentlichen Frage: wie bekomme ich Anfänger eine Abfrage im Formular frmCIFCrewmember realisiert?  :P


Beste Grüße, AJ

DF6GL

Hallo,

nachdem Du ja die Vorschläge von Ekkehard fast allesamt umgesetzt hast,  noch ein paar Erweiterungen:


Vermeide reservierte Wörter, auch solche, die "offiziell" nicht als solche definiert sind:  "Function" , "Active" , etc.


ZitatGrundsätzlich wollte ich das Feld später nur als Passwort nutzen, damit im Formular, in dem jedes Mitglied die ihm zugehörigen Dokumente abzeichnen muss, vorher sein persönliches PW (Geburtstag) eingeben muss.

Dann nenne das Feld auch "PW"  oder ähnlich. Sonst sucht man (später auch Du  ;)  ) in diesem Feld ein tatsächliches Geburtsdatum.



ZitatNur jetzt zu meiner eigentlichen Frage: wie bekomme ich Anfänger eine Abfrage im Formular frmCIFCrewmember realisiert? 

Stelle die Frage nochmal genau. Was soll die Abfrage bewirken?

"frmCIFCrewmember"  gibt es nicht...

"frmCrewmemberCIF" ist noch irreführend benannt.  Das Form bezieht sich nur auf Tabelle tblCrewmember und sollte auch dann entspr. so heißen: "frmCrewmember"



Ich denke, es braucht noch ein Form "frmApplicabilities", das als UFO in frmCrewmember oder in frmCIF  eingebunden wird (mit "Verknüpfen von/nach" über die entspr. Schlüsselfelder)

mr.airworthy

Moin!
 
Zitat von: DF6GL am März 30, 2022, 09:21:47nachdem Du ja die Vorschläge von Ekkehard fast allesamt umgesetzt hast,  noch ein paar Erweiterungen:
Vermeide reservierte Wörter, auch solche, die "offiziell" nicht als solche definiert sind:  "Function" , "Active" , etc.
Danke! Ich habe mal versucht die betroffenen Elemente umzubenennen. Behalte ich mir fuer die Zukunft im Hinterkopf.
 
Zitat von: DF6GL am März 30, 2022, 09:21:47Dann nenne das Feld auch "PW"  oder ähnlich. Sonst sucht man (später auch Du  ;)  ) in diesem Feld ein tatsächliches Geburtsdatum.
:) Hab's geaendert.
 
Zitat von: DF6GL am März 30, 2022, 09:21:47Stelle die Frage nochmal genau. Was soll die Abfrage bewirken?
Ich habe mich tatsaechlich etwas kryptisch ausgedrueckt. Da ich in der letzten Version einige Aenderungen vorgenommen habe, hier noch mal eine Zusammenfassung.
 
tblCIF
Hier warden alle Dokumente erfasst, die von den CM (Crewmembern) gelesen und bestaetigt werden muessen.
Den alten Wert 'Applicability' habe ich geloescht und gegen einen Wert aus der tblCIFapplicability (neu angelegt) ersetzt. War das korrekt so? Ich habe den Eindruck, dass meine Beziehung zur tblCIFapplicability wieder nicht korrekt ist. Ist die mehrfache Auswahl nicht moeglich? Eigentlich muessten doch in der tblCIFapplicability die '+' neben dem Primaerschluessel auftauchen?
 
tblCIFapplicability
Da faellt mir gerade auf, dass die Tabelle quasi identisch zur tblCMFunction ist, allerdings anders verwendet wird. Bzgl. meines Problems, siehe tblCIF.
 
tblCM
Hier werden alle Mitglieder (Crewmember) erfasst. Die Tabelle passt meiner Meinung nach so.
 
tblCMFunction
Beziehungstabelle fuer tblCM.
 
tblSignatureOverview
Diese Tabelle ersetzt die vorherige tblApplicability (die meiner Meinung nach nicht korrekt benannt war). Aktuell gibt es hier allerdings keine Eintraege, da ich nun gehofft habe, dass diese Tabelle als 'automatisches Datengrab' genutzt wird? Diesbezueglich unter frmSignatureList mehr.
 
frmCIF
frmCIF dient aktuell eigentlich nur dazu, um spaeter den Nutzern die existierenden Dokumente aus tblCIF aufzulisten. Weiterhin kann der "Admin" nach dem entsperren Eintraege aendern oder weitere CIFs/Dokumente hinzufuegen.
Mit dieser Form bin ich soweit eigentlich ziemlich zufrieden. Aktuell kaempfe ich nur noch mit dem Textfeld 'txtCIFapplicability', da ich hier gerne die Namen aus tblCIFapplicability statt des Primaerschluessels angezeigt bekommen moechte. Oder ist das ein Problem meiner 1:n-Beziehung 'INT_CIFapplicability_ID - CIF_applicability.Value'?
 
frmSignatureList
Diese Form soll die eigentliche Aufgabe der Datenbank uebernehmen. Ich lass hier einige Daten aus tblCM anzeigen. Diese muessen und sollen nicht geaendert werden (im Gegensatz zu frmCIF). Mit Hilfe der Combobox kann sich jedes Mitglied 'auswaehlen'. Wenn das passiert ist, soll im unteren Teil (ich ging jetzt von einer Subform aus) eine personalisierte Liste aller zutreffenden CIFs zur Verfuegung stehen, die dann hier bestaetigt werden koennen. Diese 'Werte' (das Datum, an dem welche CIF von welchem Mitglied) muessten dann wohl in tblSignatureOverview automatisch hinzugefuegt werden? Ist das irgendwie verstaendlich, worauf ich hinaus moechte? Ich werde mal eine dilettantische Zeichnung von mir anhaengen. J
 
 
Vielen lieben Dank fuer eure Hilfe!

DF6GL

Hallo,


statt vieler Worte habe ich die DB etwas modifiziert.


Erstelle zusätzlich für jede Tabelle ein Formular...


frmCm (gibt es schon, mit modifiziertem Code))  und frmCif :  Einzelnes Formular

alle anderen Forms: Endlosformular

frmCmCif wird als UFO-Steuerelement in frmCm und/oder frmCif eingebunden. (Verknüpfen von/nach über die entspr. Schlüsselfelder)

mr.airworthy

März 31, 2022, 09:42:22 #8 Letzte Bearbeitung: März 31, 2022, 09:48:55 von mr.airworthy
Guten Morgen und vielen Dank fuer die Arbeit!
Leider stehe ich irgendwie auf dem Schlauch. Wieso fehlt die frmSignatureList (und warum heisst das Formular in den Registerkarten noch formCrewmemberCIF)? Da wuerde ich ja eigentlich gerne das entsprechende Unterformular einfuegen. Oder soll die frmSignatureList quasi wieder zur frmCrewmember werden und die frm SignatureList besitzt dann die UFOs frmCrewmember und frmCrewmemberCIF?

Ich werde mich jetzt noch mal an Access setzen und die Datenbank von Grund auf neu bauen/gestalten. Problem ist nur, dass ich gedanklich festgefahren bin und keine Alternative zur Realisierung meines Problems sehe. Sobald diese dann steht melde ich mich wieder, in der Hoffnung, dass meine DB zumindest mal "sauber" ist. Weiterhin werde ich den "Schnickschnack" erst mal weglassen (PW-Eingabe, Steuerelemente im Forumlar, etc.) und mich auf die Basics konzentrieren.


Beste Gruesse aus Koeln!

DF6GL

Hallo,


ZitatWieso fehlt die frmSignatureList


ich habe doch fast alles umbenannt, so auch diese Tabelle in tblCmCif  (---> m-n-Tabelle zu tblCm und tblCif )


Zitatwarum heisst das Formular in den Registerkarten noch formCrewmemberCIF)


Ein bisschen Arbeit muss Dir ja bleiben  ...   8)  Passe die Formulare (in denen auch Code geändert und Makros entfernt wurden) an die neue Tabellenstruktur an.  Lies meinen letzten Beitrag nochmal.

Zitatkeine Alternative zur Realisierung meines Problems sehe


Hä ?? Du musst doch nur die Formulare ein bisschen anpassen, und fertig ist die Sache..  Wo hast Du denn ein Problem?

mr.airworthy

März 31, 2022, 12:19:05 #10 Letzte Bearbeitung: März 31, 2022, 12:26:53 von mr.airworthy Grund: Datei vergessen
Hi,

also der Fehler liegt nicht bei Dir, sondern definitiv bei mir. :)

Zitat von: DF6GL am März 30, 2022, 19:33:05Erstelle zusätzlich für jede Tabelle ein Formular...

Ok, das sollte ich hinkriegen.

Zitat von: DF6GL am März 30, 2022, 19:33:05frmCm (gibt es schon, mit modifiziertem Code))  und frmCif :  Einzelnes Formular
Wenn ich die von Dir hochgeladene Datei oeffne, dann habe ich zwar die frmCIF (mit, wie im letzten Post erwaehnt,  geaendertem Code), aber die frmCM sehe ich eben nicht. Mir wird nur ein Formular angezeigt.

Zitat von: DF6GL am März 30, 2022, 19:33:05alle anderen Forms: Endlosformular
Diesbezueglich werde ich mich gleich noch mal einlesen. Wenn ich es aber richig verstehe, dann dient das Endlosformular dazu, Eingaben wie in einer tbl vorzunehmen, ohne in der tbl direkt arbeiten zu muessen?

Zitat von: DF6GL am März 30, 2022, 19:33:05frmCmCif wird als UFO-Steuerelement in frmCm und/oder frmCif eingebunden. (Verknüpfen von/nach über die entspr. Schlüsselfelder)
Ich habe jetzt nebenbei in Deiner zur Verfuegung gestellten Datei ein wenig herumgefuscht (anders will ich es nicht bezeichnen) und wuerde fast behaupten, dass ich es doch gewissermassen umsetzen konnte. Im Formular frmCM ist das Unterformular frmCmCif eingebunden und sobald das CM oben ueber meine cbo geaendert wird, aendert sich auch die CmCif_CMID (was also genau dem entspricht, was ich gerne haette). Nur wie werden jetzt eben in dieser Unterform nur die CIFs angezeigt, die fuer das CM applicable sind (definiert in tblCIF / CIF_Applicability)?

Wahrscheinlich raufst Du Dir bei jeder neuen Frage meinerseits die Haare, sorry dafuer!


Beste Gruesse!

DF6GL

Hallo,


ZitatNur wie werden jetzt eben in dieser Unterform nur die CIFs angezeigt, die fuer das CM applicable sind (definiert in tblCIF / CIF_Applicability)?


es werden die CIFs angezeigt, die zu einer Person (CM) von Dir zugeordnet wurden.


Die Zuordnung der "Applicability" ist nur für die "CIF"s gegeben und hat mit den Personen nichts zu tun.


Ich hatte vorher ja schon angedeutet, dass "Applicability" in dieser Tabellenkonstruktion nur informativen Charakter hat und nicht weiter verwendet wird (z. B. zum Filtern). Wenn eine Verbindung von "Applicability" zwischen CIF und CM erforderlich ist, sind weitere n:m-Tabellen erforderlich., mindestens aber ein Feld in tblCM, das die  (gültige ) "AppID"  für diese Person   aufnimmt



mr.airworthy

Hi,

muesste es nicht sogar ausreichend sein, wenn ich tblCMFunction fuer tblCIF und tblCM gleichermassen nutze? Somit besteht ja eine n:m Beziehung zwischen tblCIF und tblCM. tblApplicability koennte dann eigentlich in die Tonne.

Bzgl. tblCMxCIF als UFO in frmCM: so wie es jetzt ist, muss ich manuell die CIFID eingeben. Ich haette aber gerne, dass schon alle bestehenden (und zutreffenden/applicable) CIFs bereits aufgelistet werden. Es sollen also nur noch readdate und readnote ausgefuellt werden.

Vielen Dank fuer Deine Hilfe, auch wenn ich immer etwas brauche, bis ich den Inhalt Deiner Posts verstehe.  :D

DF6GL

Hallo,

ich verstehe die Bedeutung, bzw. Unterschied von tblApplicability und tblCMFunktion nicht richtig.

Ich sehe das so:

Unter tblCMFunktion kann ich mir zwar die "Tätigkeit" oder "Tätigkeitsbereich" einer Person (CM) vorstellen und muss demzufolge an tblCM angebunden werden (btw: warum änderst Du dauernd (und dazu noch unlogisch) die Bezeichnungen/Namen der Felder und Tabellen? Korrigiere dies zunächst alles.).


Weiterhin: Wirf dieses Anlagenfeld ("Cifapplicability")  aus tblCif heraus und erstelle eine Tabelle ("tblCifApp") , die an tblCif in n-Beziehung angehängt wird.

"Applicability" hat dann die Bedeutung eines "Gültigkeitsbereiches" für ein Dokument ("CIF"). Dabei kann ein Dokument mehrere Gültigkeitsbereiche haben.



Wenn Tätigkeitsbereich und Gültigkeitsbereich den gleichen Wertebereich umfassen, also datenmäßig identisch sind, dann ist nur eine Tabelle erforderlich.


Solange diese grundlegenden Tabellen und deren Beziehungen nicht klar sind, ist das Arbeiten an Formularen völlig umsonst.



Beaker s.a.

Hallo,
@AJ
Bitte entschuldige, dass ich mich nicht mehr beteiligt habe, war aber
gestern und heute den ganzen Tag ausser Haus.

@franz
Vielen Dank für dein Einspringen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.