Hallo,
leider sind meine Accesskenntnisse total eingeschlafen. Dennoch wollte ich eine kleine Datenbank für meine Fußballkids machen. Sie besteht bislang aus 3 Tabellen:
Spieler (mit ID, Vorname, Nachname, Geburstdatum, etc.)
Turniere (mit ID, Wo, Wann, Zusagedatum, etc.)
Spieler_Turniere (mit ID, Spieler_ID, Turnier_ID)
Diese Tabellen sind in m:n-Relation verknüpft: [Spieler]ID->[S_T]Spieler_ID, [Turniere]ID->[S_T]Turniere_ID.
Zweck sollte sein, dass jedes Kind an allen Turnieren teilnehmen und jedes Turnier mehrere Kinder aufnehmen kann.
Jetzt wollte ich ein Formular, wo ich einfach ein Turnier auswähle und dort die Kinder zuordnen kann. Also bspw. das Turnier A aufrufe und dort die Kinder (der Liste Spieler) anklicken kann, die daran teilnehmen. Die angeklickten Kinder würden dann als Werte in die Tabelle Spieler_Turniere eingetragen werden, bzw. aus dieser auch wieder gelöscht werden, wenn ich sie wieder rausnehme (Krankheit, Absage, etc.).
Irgendwie komme ich aber mit den Formularen und Unterformularen nicht zurecht. Alleine die Kinder als Checkboxen anzeigen zu lassen, kriege ich nicht hin bzw. weiß nicht wie.
Gerne nehme ich auch eine andere Lösung, bei der ich das Ergebnis erreichen kann, dass ich nicht nur eine Spielerdatenbank habe, sondern die Spieler auch einzelnen Turnieren zuordnen kann.
Für weitergehende Hilfe wäre ich total dankbar.
Viele Grüße
dille
Hallo,
ZitatAlleine die Kinder als Checkboxen anzeigen zu lassen, kriege ich nicht hin bzw. weiß nicht wie.
das geht auch nicht. In einem normalisierten Datenmodell (wie es bei Dir vorliegt) sind Checkboxen nicht möglich. Zumindest nicht so einfach. Werden auch nicht wirklich benötigt.
Die Kinder zum Turnier wählt man mit einem Kombifeld aus der Kindertabelle auf.
Hafo für das Turnier und Ufo für die Tabelle Spieler_Turniere über die TurnierID verknüpft.
Tja, neee. Kriege ich irgendwie nicht hin. Habe mal die Datenbank entleert, die ganzen Fehlversuchsformulare gelöscht und als Beispiel angefügt. Ich kriege es nur hin, dass jeweils ein Kindername pro Turnier auswählbar ist. Und dieser wird dann nicht einmal gespeichert. Das Kind wieder aus dem Turnier rausnehmen, wüsste ich hierbei gar nicht, sofern sie gespeichert wären...
Ich glaube ich brauche da etwas detailiiertere Vorgehensbeschreibung, bin einfach zu unerfahren...
Hallo,
ich kann keine ACCDBs ansehen/öffnen. Speichere im MDB Format (Menü: Speichern und veröffentlichen) und lade die DB noch mal hoch.
Mit Fußball habe ich wenig zu tun, weiß aber soviel, dass bei Fußballspielen Mannschaften (ggf. von Vereinen) gegeneinander antreten, die, man staune, in verschiedenen Spielpaarungen in möglicherweise verschiedenen Aufstellungen ihren Wettkampf austragen. Jede Spielpaarung liefert - man staune weiter - auch ein Spielergebnis. Turniere können unter verschiedenen Modi ausgetragen werden (KO-System wie im DFB-Pokal, oder Rundenturniere mit gesetzten Paarungen, oder Mischformen, eventuell auch ein Liga mit Hin- und Rückrunde). Wenn es also darum geht, Sportturniere in einer Datenbank zu hinterlegen, sollten vor der Formularerstellung erst die notwendigen Tabellen entsprechend der Anforderungen erstellt werden. Eine Email-Adresse oder ein Spielerbild sind da eher nebensächlich und ablenkend.
Du solltest also Deinen Wunsch nach ausreichendem Nachdenken konkretisieren und Details preisgeben, was die DB leisten soll. Beispiel-DBs sind möglichst im 2003er-Datenbakformat zu halten, um ein großes Helferpotential ansprechen zu können.
@Klaus
hier das Beziehungsfenster des Uploads.
Hallo,
anbei die Version in mdb. Danke.
@Lachtaube: Ich glaube Du hast meine Fragestellung missverstanden. Es geht nicht um eine Turnierplanung im Sinne ein Turnier zu verwalten, sondern um eine Spielerverwaltung, die meine Kiddis verwalten soll (Name, Anschrift etc.). Der Turnierteil soll lediglich eines können: Name von Kindern aufnehmen (welches Kind spielt an welchem Turnier mit) oder Kinder rausnehmen (für evtl. Ausfälle), damit ich weiß, welche Kinder bei welchem Turnier mitkommen und ob wir genug Spieler zusammen haben. Ergebnisse, Aufstellung, Rote und Gelbe Karten, Spielerleistungen sollen keinefalls Teil sein. Maximal kann man ja das Spielergebnis mit aufnehmen, brauche ich aber nicht für organisatorisches. Zu den Bilndern: Die habe ich gerne in der Datenbank für Passanträge bzw. für irgendwelche anderen Dinge (bspw. ein kleines Fußballbüchlein mit eigenem Bild). Bei 15 festen Bambinis und ca. 10 wechselnden Interessenten, die ich erst seit einem Monat habe, dachte ich mir es ist eine gute Idee diese in die Datenbank zu hauen, damit ich mit den Namen nicht durcheinander komme...
Wie gesagt: Keine Turnierplanung zur Durchführung eines Turniers sondern eher eine kleine organisatorische Mannschaftsverwaltung mit einer Turnierplanung, wer wohin mitfährt...
Ja, das habe ich dann wirklich falsch verstanden. :(
Hallo Dille,
Anbei deine DB etwas überarbeitet.
Benamsung geändert (ID-Felder)
Datentyp der Fremdschlüssel (_F) und Beziehungen angepasst.
Turnierform mit Spieler-UFo eingebaut.
gruss ekkehard
Ja, Supi.
Total vielen Dank für Deine Hilfe. Zwar nicht wie vorgestellt, aber ebenso praktikabel wie praktisch und schnell.
Ich habe nur ein Problem: Ist vielleicht toll, wenn es Foren mit Leuten wie Dir gibt, die einem alles abnehmen. Aber ich habe keine Ahnung wie Du das nun konkret gemacht hast. Ich weiß, dass es wahrscheinlich mehr Zeit für Dich kostet den Weg zu beschreiben, als das eben mal einzugeben, vielleicht lohnt es sich ja, falls andere eine ähnliche Problematik haben und Dein Posting finden. Also ich meine nicht den Teil mit den Beziehungen sondern ganz explizit den Weg zur Erstellung dieser Formulare.
Jedenfalls ganz, ganz vielen Dank!
Viele Grüße
Dille
PS: Für einen Bericht, der mir nun jedes Turnier anzeigt und darunter die Mitspieler, habe ich eine Abfrage der drei Tabellen erstellt und dort die Felder Datum, Ort und Spieler angegeben. Über diese Abfrage habe ich dann einen Bericht erstellt, der mir das nun wie gewünscht anzeigt. Richtig so oder zu kompliziert bzw. geht der Weg auch direkt über einen Bericht ohne Abfrage?
Hallo Dille,
Ich versuche es Mal. Allerdings jetzt so aus dem Kopf.
ZitatBenamsung geändert (ID-Felder)
Kannst du dir ja anschauen, am übersichtlichen im Beziehungsfenster; - sollte
verständlich sein.
ZitatDatentyp der Fremdschlüssel (_F) und Beziehungen angepasst.
In der Zwischentabelle stimmten die Fremdschlüsselfelder (FK) und der Datentyp
nicht. Habe ich die FK auf die IDs geändert und den Datentyp entsprechend auf
Zahl (LongInteger). Dann die Beziehungen neu angelegt, mit refentieller Integrität.
Siehst du auch im Beziehungsfenster.
ZitatTurnierform mit Spieler-UFo eingebaut.
Das neue frmTurniere habe ich per Assi angelegt (Datensatzherkunft nur die Tabelle
Turniere). Da fehlt allerdings noch eine ordentliche Benamsung der Steuerelemente
(war mir zu viel Mühe).
Das UFo (ufoSpieler) basiert auf der Zwischentabelle, und das darauf befindliche
Kombi auf einer Abfrage auf die Spielertabelle. Hier wählst du dann der Reihe nach
die Spieler für das im HFo ausgewählte Turnier
*).
Das UFo-Steuerlement (ufcSpieler) ist über die TurnierID(_F) mit dem HFo verknüpft.
Dadurch werden bei einem DS-Wechsel im HFO immer automatisch alle bereits
ausgewählten Spieler angezeigt.
Bei weiteren Fragen, - melde dich.
gruss ekkehard
*) Genauso kannst du das auf deinem HFo Spieler auch machen, nur eben umgekehrt.
Mit etwas VBA könnte man das mit auch mit zwei Listfeldern (Auswahl & Anzeige)
machen (Vorteil s.u.)
Was noch fehlt:
1. eine Suchfunktion auf den HFon Turniere und Spieler. Jeweils ein Kombi im Form-
kopf sollte da ausreichend sein. Wenn du das per Assi anlegst, erstellt Access auch ein
entsprechendes Macro. (Kannst du später auf VBA umstellen).
2. die Funktionalität des Austragens der Spieler
geht wohl für dich erstmal am einfachsten wenn du auf das UFo einen Button setzt.
Machst du auch mit dem Assi (s.o.). Ansonsten geht das mit o.a. angesprochenen
Listenfeldern, zwei Buttons und etwas VBA.
Hallo Dille,
Hatte dein PS gar nicht gelesen.
Das ist schon richtig so. Du solltest es aber mit den von mir geänderten Tabellen
machen, da stimmen die Datentypen/Beziehungen.
gruss ekkehard
Hi, ich habe das versucht zu rekonstruieren, aber ich kriege das Ufo so wie Du überhaupt gar nicht zum laufen. Würde gerne wissen, was Du da gezaubert hast, weil ich schon gerne verstehen würde, wie das System funktioniert. Und ich befürchte ohne dieses Verständnis, werde ich auch das löschen von DS nicht hinkriegen.
Viele Grüße
Dille
Hallo,
dann lade bitte mal die DB die nicht funktioniert hier hoch, möglichst als MDB.
Dann kann man gezielt nachsehen was Du falsch gemacht hast und dann ändern.
Es gibt so viele Fehlerquellen, das kann man nicht einfach so pauschal sagen.
Hallo,
@Klaus
Die .zip aus #7 enthält beide Versionen (seine erste, meine) als .MdB
@Dille
Befolge Klaus' Bitte und sende deinen Versuch meine Vorschläge umzusetzen.
ZitatHi, ich habe das versucht zu rekonstruieren, aber ich kriege das Ufo so wie Du überhaupt gar nicht zum laufen. Würde gerne wissen ...
Wo hakt es denn mit meiner Beschreibung?
gruss ekkehard
Hallo,
ZitatDie .zip aus #7 enthält beide Versionen (seine erste, meine) als .MdB
hatte ich gesehen, nur für eine wirkliche Hilfe muss man halt jetzt seine jetzige Version mal habe, das wird dann einfacher.
Hallo Klaus,
Sehe ich genauso
Zitat@Dille
Befolge Klaus' Bitte und sende deinen Versuch meine Vorschläge umzusetzen.
Ich habe da übrigens noch einen? Fehler drin; - es fehlt der eindeutige
Mehrfelder-Index in der Zwischentabelle.
gruss ekkehard
Hallo, ich habe es nochmals probiert und kriege es nicht so hin wie Du. Der einzige Unterschied zu Deiner Version ist das neue Formular, bei dem ich versucht habe, über Deine Beschreibung das gleiche Ergebnis zu erzielen. Aber bislang erfolglos. Zum Schluss habe ich Deine Werte (ohne zu Wissen woher diese stammen) per copy and paste unter Daten kopiert. Komme ebenfalls nicht auf Dein Formular. Es schreibt nicht einmal einen Namen irgendwo rein, geschweige macht es ein neues Kombifeld auf (aber das hast Du denke ich mal mit VBA gelöst, oder?).
Grüße Dille
Hallo Dille,
das einzige Formular, das in der DB so funktioniert wie erwartet, ist frmTurniere, denn hier kannst du zu einem Turnier Spieler auswählen und zuordnen. Da ist auch nichts mit VBA gemacht, sondern nur über die Verknüpfung Turnier-Spiele.
Andere Formulare haben Fehler (Spieler: falscher Verweis auf UFo bzw. fehlendes UFo).
Im Bericht Spieler-Turnier werden natürlich nur die IDs angezeigt, weil ja auch nichts anderes ausgewählt wurde (wie Turniername, Spielername).
Sorry, aber die DB, so wie ich sie aus deiner letzten Meldung heruntergeladen habe, ist teilweise Schrott und sollte erstmal korrigiert werden.
lg
crystal
Hallo Dille,
Habe jetzt nur kurz draufgeschaut, aber es ist wohl so, dass du das Prinzip,
das hinter den ID/ID_F Felder steckt noch nicht verstanden hast.
Vielleicht schaust du dir das angehängte Script dazu an. Es reicht erstmal
wenn du nur bis zur 2. Normalform kommst, und das ist schon 'ne Menge Stoff.
Du siehst im Beziehungsfenster ja den Zusammenhang, dadurch erkennt Access
welche DS zusammengehören, und filtert damit so zu sagen, z.B. bei UFon, die
passenden DS heraus, ohne das du dich darum kümmern musst.
Auf der Oberfläche (Formulare) werden diese Schlüsselfelder in den meisten Fällen
ausgeblendet, da sie für den Anwender irrelevant sind. Sie sollten aber in allen
Abfragen (DS-Herkünften) enthalten sein.
Also in deinem Fall, muss in der Abfrage für das ufoSpieler2 auch die SpielerID_F
vorhanden sein. Du hast da gar keine Datenherkunft eingetragen. Da kann
Access dann auch nichts anzeigen (weiss ja nicht was), geschweige denn neue
Eintragungen vornehmen/speichern.
Trage also in die Datenherkunft die Zwischentabelle ein (Spieler-Turnier). Dann
sollte das schon funzen.
Bis zu dieser "Version" ist noch kein VBA nötig. Wie gesagt, das wird alles nur über
die Schlüsselfelder gesteuert.
A propos VBA (s.u.), habe noch ein bisschen dran gearbeitet; - neue Version anbei.
Änderungen/Ergänzungen:
- Tabelle "Spieler-Turnier" umbenannt in "SpielerInTurnier" (wegen Sonderzeichen "-")
- Den erwähnten, vergessenen Mehrfelder-Index in dieser Tabelle eingerichtet.
- Das Formular Spieler um ein entsprechendes UFo ergänzt, in dem die Turniere des Spielers
angezeigt bzw. zugeordnet werden können; - analog zum Form Turniere.
- Das Form Turniere um die früher schon einmal angesprochene Lösung mit List-Feldern
ergänzt.
Hier kommt VBA dann ins Spiel (s.o.).
Die Vorteile aus meiner Sicht:
- durch die Mehrfachauswahl der Listfelder können gleichzeitig mehrere Spieler
für ein Turnier eingetragen werden bzw. abgesagt werden (> <).
- es werden in der linken Liste nur die Spieler angezeigt, die noch nicht
eingetragen sind. Dieses verhindert den Fehler, der im UFo auftritt, wenn man
versucht einen Spieler zweimal einzutragen. Die Behandlung dieses Fehlers
habe ich aber auch implementiert.
Im Moment arbeiten UFo und Listenfelder völlig synchron, will sagen du kannst
beides parallel verwenden. An deiner Stelle würde ich mich aber für eine der beiden
entscheiden. Die dann nötigen Änderungen sind (wohl) zum grössten Teil im Code
bereits dokumentiert.
Bitte versuche weitere Fragen etwas präziser zustellen bzw. beschreibe genauer was
du versucht hast.
gruss ekkehard
Hallo crystal,
Zitatist teilweise Schrott und sollte erstmal korrigiert werden.
Das ist in etwa das, was Eberhard in seinen, von dir so ungeliebten Kommentaren,
manchmal ausdrückt, - nur konstruktiver. :P
@Dille
Die Berichte haben ich mir noch gar nicht angeschaut. Lass uns erstmal die Baustelle
"Formulare" zu Ende bringen. Denn für Berichte halte ich das Verständnis der Tabellen-
Beziehungen bzw. der Schlüsselfelder für noch wichtiger. Da kommen dann ja auch
u.U. "komplexere" Abfragen (z.B. mit Gruppierung) zum Einsatz. Evtl. sollen später
auch noch Turnierergebnisse o.ä. dazu kommen.
gruss ekkehard
Hallo,
mit der überarbeiteten DB-Version ist meine vorige Antwort z.T. hinfällig geworden. Danke Ekkehard!
lg
crystal
PS: Anbei eine DB-Version, die auch die Berichte enthält.
Hallo Ekkehard,
keine OT-Kommentare mehr.
ZitatDas ist in etwa das, was Eberhard in seinen, von dir so ungeliebten Kommentaren,
manchmal ausdrückt, - nur konstruktiver. :P
Aber danke für das Lob (was vermutlich ein Fehler war...)
lg
crystal
Da hast du mich aber völlig missverstanden, das war genau umgekehrt gemeint.
Ich korrigiere:
ZitatDas ist in etwa das, was Eberhard in seinen, von dir so ungeliebten Kommentaren,
manchmal ausdrückt, - nur sind seine konstruktiver. :P
Hallo,
ja - manchmal, aber immer öfter...
lg
Nur ganz kurz zur Normalisierung. Turniere und Spieler einzeln einzupflegen ist ja doppelt gemoppelt und fehleranfällig. Darum machen wir ja eine m:n Beziehung, die alle Spieler mit allen Turnieren in Relation setzt. Darum habe ich die Zwischentabelle erstellt. Ich hoffe, dass ich soweit noch alles richtig denke, aber wer weiß... (und es sind sicherlich noch einige Fehler drin, keine Frage. Ganz typisch: Die m:n Relation als Text statt als LI, wie gesagt, lange raus aus dem Thema).
Mit ging es nur um das Formular, da habe ich die ganze Zeit dran rumgewerkelt und habe es nicht rekonstruieren können. In der letzten von mir hochgeladenen Version habe ich dann alles nochmals auf Anfang gelöscht und die Datenwerte aus Deinem funktionierenden Formular eingefügt. Aber auch ohne Erfolg. Bei mir steht jedenfalls im ufoSpieler2 bei den Daten zum Kombifeld SpielerID_F als Steuerelementinhalt und bei Datensatzherkunft:
SELECT S.SpielerID, ([s].[Vorname]+" ") & [s].[Nachname] AS KName FROM Spieler AS S;
Müsste so auch bei Euch sein...
Also was habe ich gemacht?
Ich habe die Tabelle Spieler-Turnier geöffnet. Dann auf "Erstellen" "Formularentwurf". Die Datensatzquelle auf "SPieler-Turnier" gestellt. Daraufhin ein Kombinationsfeld eingefügt. Im Dialog angegeben, dass "Das Kombifeld soll die Werte einer Tabelle oder Abfrage entnehmen". Weiter. Als ausgewählte Felder habe ich dann den Vornamen gewählt. Weiter. Keine SOrtierung angegeben. Weiter.
Toll! Nun zeigt mir das Ding die gespeicherten Namen an, nicht die Einträge aus Spieler-Turnier... Zurück zu den Eigenschaften... Unter Steuerelementinhalt stand nichts drin, habe hier dann SpielerID_F angegeben.
Unter Datensatzherkunft steht dann bei mir: SELECT [Spieler].[SpielerID], [Spieler].[Vorname] FROM [Spieler];
Also auch ganz anders. Copy von deinem Formular in mein Formular und die Zeile ersetzt durch:
SELECT S.SpielerID, ([s].[Vorname]+" ") & [s].[Nachname] AS KName FROM Spieler AS S;
Und das Ergebnis sehr ihr. Es funktioniert nicht obwohl ich schon so gut wie alles 1:1 kopiert habe...
MANN... und warum ist mein halbes Post nun durchgestrichen? Leide wohl an völliger IQ-Losigkeit in Paarung mit der Einbildung, dass ich so was hinkriegen könnte..
PS: By the way: mit [s]
steuert man das Durchstreichen folgender Zeichen. Da dieses Zeichen im Code vorkam, wurde mein halbes Posting durchgestrichen. Fehler erkannt und gebannt. Sorry dafür.
Hallo,
und was willst Du uns jetzt mit Deinem neuen Post sagen ?
Und welchen Informationsgehalt hat jetzt der durchgestrichen Text ?
Der sich jetzt noch nicht mal richtig lesen lässt. Und wenn man ihn nicht lesen soll, hättest Du diesen auch gleich löschen können.
Entschuldigung. Musste ihn überarbeiten wegen der in PS: erwähnten Problematik.
Habe ich erst zu spät erkannt und war nicht vorsätzlich.
Was ich damit sagen will: Ich versuche die Erstellung des Formulares zu rekonstruieren und habe den Weg geschrieben wie ich vorgegangen bin. Das habe ich gemacht, damit Ihr, wenn Ihr soviel Geduld und Verständnis aufbringt, mir sagen könnt: "Also so geht das gar nicht, sondern so und so und so. Und das darfst du auch nicht drücken sondern ganz anders." Weil ich hoffe, dass ich so verstehen kann wies funktioniert. Sorry
Hallo,
wie bereits erwähnt, solltest Du Deine nicht funktionierende Version (möglichst als MDB) hier hochladen. An Hand dieser DB kann man Dir dann erklären was da falsch läuft. Das dürfte der einfachste Weg sein.
Hallo,
es macht natürlich schon Sinn, Spieler und Turniere in zwei separaten Tabellen zu halten, denn:
1. kannst du so für ein Turnier verschiedene Spieler auswählen und
2. sehen, welcher Spieler an welchen Turnieren teilnimmt.
In der letzten DB, die ich hochgeladen habe, kannst du im Formular frmTurniere
1. neu Turniere anlegen UND
2. den Turnieren Spieler zuordnen.
Außerdem kannst du im Formular Spieler genau das andere machen, nämlich einen Spieler auswählen und ihn Turnieren zuordnen bzw. anschauen, an welchen Turnieren er teilnimmt.
Die Ergebnisse deiner Zuordnungen kannst du auch in den Berichten sehen.
Was brauchst du mehr?
Im Prinzip geht das so:
1. Du erstellst ein Formular, in dem z.B. ein Spieler pro Zeile dargestellt wird.
2. Dieses Formular nennst du ufoSpieler, weil es später ein Unterformular werden soll.
3. Im Turnier-Formular platzierst du ein Unterformular-Steuerelement, benennst als Datenherkunft dein Ufo aus Schritt 1 und 2 und verknüpfst beide.
4. So "weiß" das Turnier-Formular, dass die Zeilen des Unterformulars zum betreffenden Turnier gehören.
5. Die Tabelle "SpielerInTurnier" dient dazu, alle erdenklichen Kombinationen von Spielern und Turnieren zu speichern (aber natürlich nur diejenigen, die du ausgewählt hast).
6. Die Tabelle "SpielerInTurnier" ist n:m, weil sie gleichzeitig auch die Information "TurnierUndTeilnehmendeSpieler" enthält. n Spieler nehmen an m Turnieren teil, an m Turnieren nehmen n Spieler teil.
7. Das kann man nur schwer in einem Formular darstellen, deshalb gibt es zwei: eines stellt im Kopf EIN Turnier dar (Ort, Zeit etc.) und darunter alle Spieler. Ein anderes stellt im Kopf die Daten EINES Spielers und darunter alle Turniere dar, an denen er teilnimmt.
8. Die beiden Formulare stellen also jeweils 1:n-Beziehungen dar: EIN Turnier, n Spieler bzw. EIN Spieler, n Turniere.
9. Der "Trick" besteht nur darin, in das "1-Formular" ein Unterformular aufzunehmen, das die "n-Seite" darstellt (Steuerelement "Unterformular").
Access ist nicht Excel.
lg
crystal
PS: schau dir mal meine DB aus Antwort #20 an.
Hallo,
@crystal
Zitat9. Der "Trick" besteht nur darin, in das "1-Formular" ein Unterformular aufzunehmen, das die "n-Seite" darstellt (Steuerelement "Unterformular").
Und wie willst du damit die Zwischentabelle befüllen? In meinem Beispiel, und
auch bei dir, sind die UFoe an diese Tabelle gebunden.
@Dille
ZitatNur ganz kurz zur Normalisierung. Turniere und Spieler einzeln einzupflegen ist ja doppelt gemoppelt und fehleranfällig.
Natürlich musst du die einzeln erfassen, sind doch zwei Entitäten.
Zitatmachen wir ja eine m:n Beziehung, die alle Spieler mit allen Turnieren in Relation setzt. Darum habe ich die Zwischentabelle erstellt.
O.K., wichtig dabei eben die Relationen zwischen den Schlüsselfeldern. Die sollten
jetzt aber auch in allen Versionen richtig eingestellt sein, inkl. RI.
Die Datenherkunft des Kombis
SELECT [Spieler].[SpielerID], [Spieler].[Vorname] FROM [Spieler];
ist schon o.k. so. Ich hatte nur den Nachnahmen mit aufgenommen und zu einem
Feld verbunden. Irgendwann hast du ja vielleicht mal gleiche Vornamen.
Dein Problem in deiner letzten Version ist, dass das UFo keine Datenherkunft hat.
1. Öffne das UFo (ufoSpieler) und wähle dort unter "Datensatzquelle" die Tabelle
"SpielerInTurnier" aus. -> schliessen
2. Öffne das frmTurniere und setze den Focus auf das UFo-Steuerelement (uf
cSpieler)
2a. Wähle als Herkunftsobjekt das "ufoSpieler" aus.
2b. Klicke auf die ... -es öffnet sich ein Assistent. Im linken Dropdown wählst du
nun das Feld "TurnierID" und im rechten "TurnierID_F" aus -> bestätigen.
(Siehst, hier tauchen die Schlüselfelder wieder auf)
Wenn du das Form jetzt anzeigst, sollten im UFo auch die Turniere der Spieler
angezeigt werden.
gruss ekkehard
Korrektur:
ZitatO.K., wichtig dabei eben, dass die Relationen zwischen den Schlüsselfeldern eingerichtet werden.
Au Mann, ganz vielen Dank. Habe nun die Fehler gefunden. Die Datensetzherkunft unter "Formular" war tatsächlich nicht gesetzt. Ich dachte, wenn ich die Tabelle Spieler-Turnier offen habe und auf Formular drücke, dass Access das automatisch übernimmt. Dann stand bei mir unter "Datensätze sperren" noch keine Sperrungen, bei Dir "bearbeiteter Datensatz". Und zum Schluss noch unter Format "Endlosformat" einstellen, das stand bei mir auf "Datenblatt". Nun habe ich auch das uFo so hinbekommen wie Du. Muss mir das noch mal ein bisschen anschauen aber auf die Schnelle:
Neues Formular mit Datensatzherkunft Spieler-Turnier-> Formular zeigt die Datensätze aus Spieler-Turnier an.
Endlosformular einstellen-> Formular zeigt alle Datensätze aus Spieler-Turnier an.
Die Anzeigefelder löschen und ein Kombifeld erstellen.-> Das wollen wir ja haben.
Kombi-Assi1: Dieses soll die Werte einer Tabelle übernehmen.
Kombi-Assi2: Ich wähle Tabelle Spieler, denn es sollen ja die Namen und nicht die Relationen angezeigt werden.
Kombi-Assi3: Als Anzeige wähle ich Vornamen aus.
Kombi-Assi4: Die Sortierung erfolgt nach Vornamen.
Kombi-Assi5: Der Wert der gespeichert werden soll ist die SpielerID, denn wir wollen in die Tabelle Spieler-Turnier reinschreiben.
Kombi-Assi6: Der Wert wird direkt gespeichert in: SpielerID_F
Falls da Denkfehler drin sind, bitte berichtigen. Aber so wie beschrieben, meine ich das zu verstehen.
Abgesehen davon, brauche ich glaube ich erst mal ein bisschen um mir die Version 3edc reinzuziehen. Die ist schon ziemlich geil und ausgebufft.
Ganz vielen Dank dafür.
Hallo Dirk,
ZitatFalls da Denkfehler drin sind, bitte berichtigen. Aber so wie beschrieben, meine ich das zu verstehen.
Alles richtig (wenn ich nichts übersehen habe).
gruss ekkehard
Hallo,
alle Jahre wieder...
nach 3 Monaten wieder alles auf null (nicht ganz).
Nach langer Zeit fielen mir dann noch Dinge auf, die gut wären, wenn diese geändert werden würden. Um wieder mal etwas reinzukommen und weil die Datenbank vertrauliche personale Daten enthielt, habe ich das ganze nochmals neu aufgesetzt. Damit ihr ungefähr einen Eindruck über meine Accesskompetenzen besitzt: Das erstellen der Tabellen und Beziehungen keine 10 Minuten. Die ganzen Funktionen und Anpassungen im Quelltext (ich habe neue Bezeichungen genommen) dauerten dann auch nur noch ca. 10 Stunden in 2 Tagen....
Wie auch immer: Es gibt 2 neue Tabellen: Kontakte und Verein (die Adressen sind nicht gedoppelt: Jeder Verein hat nur eine Anschrift, aber innerhalb des Vereins evtl. verschiedene Kontakte. Darum m:n und nochmals Adressen).
Aber das evtl. viel schwierigere Problem ist bei mir, dass die Datenbank irgendwann unübersichtlich wird: Jedes Jahr gehen ca. 5 Kinder in die F-Jugend und bislang sind 8 wieder hinzu gekommen. Zusätzlich kam die Frage auf, ob ich irgendwann auch die F-Jugend übernehmen könnte (aber das weiß ich noch nicht, ist halt eine Zeitfrage).
D.h. irgendwann habe ich 200 aktive Kids im Programm von denen aber real nur wirklich 20 bei mir spielen, weil die anderen schon längst andere Altersgruppe sind.
Wie löse ich dieses Problem?
Anfangs dachte ich an eine zusätzliche Tabelle, die könnte man dann auch abfragen, wenn man mal aus irgendwelchen Gründen an die Daten alter Spieler will. Gegenargument: Mit dem Geburtsdatum liegen schon alle relevanten Daten vor (Regelung G-Jugend sind alle Kinder, die im Kalenderjahr, in dem das Spieljahr beginnt, noch nicht das 7. Lebensjahr vollenden oder vollendet haben).
Gegenargument: Gespeicherte Datensätze in m:n lassen vielleicht eher eine direkte Bearbeitung zu, gerade wenn man irgendwann vielleicht die Turniere für die G-Jugend und die F-Jugend organisieren muss...
Kopf raucht, ich weiß nicht was besser ist.
Wie würdet ihr das implantieren?
Vielen Dank für Eure Hilfe
Grüße
Dirk
Hallo Dirk,
Nur kurz drüber geschaut.
Ich würde auf jeden Fall eine Tabelle für die Altersgruppen einrichten, und
auch die n:m zwischen dieser und der tblSpieler. Über die Verarbeitung denke
ich noch nach; - geht bei mir nicht so schnell :(.
Eine andere Frage ist aber aufgetaucht, - muss nicht der Spieler auch einem
Verein angehören?
Im Moment hast du den Verein ja nur als "Ausrichter" in der tblTurniere.
gruss ekkehard
P.S.: Ein paar "Spiel"daten wären schon hilfreich. Vor allem für die geplante tblAltersgruppen, - ich kenn' mich damit nicht aus.
Hallo,
so schnell pressiert es nicht. Nein, die Turniere sind von verschiedenen Vereinen, wiederholen sich aber (1-2 mal im Jahr). Die Spieler sind alle in meinem Verein: Ich will mit dieser Datenbank eigentlich nur die Übersicht über meine Kiddis haben und um einfacher die Turniere, die wir besuchen, organisieren zu können (welche Kinder nehmen teil, welche nicht).
Zu den Altersgruppen: Die Regelung besagt wie o.g. bei uns Bambinis: Alle Kinder, die im Kalenderjahr, in dem das Spieljahr beginnt, noch nicht das 7. Lebensjahr vollenden oder vollendet haben sind bei den Bambinis (also G-Jugend).
F-Jugend wären diejenigen die genau dann das 7. oder 8. Lebensjahr vollenden, E-Jugend das 9. oder 10., D-Jugend das 11.-12, C-Jugend 13.-14., B-Jugend 15.-16., A-Jugend 17.-18..
Das Spieljahr fängt am 1. August an. Altersklassen werden am 1. Januar "eingeteilt".
Regel wäre also Bambini sind:
Saison 2016/17 Bambini Jahrgänge 2010 und jünger
Saison 2016/17 F-Jugend Jahrgänge 2009 und 2008
Saison 2016/17 E-Jugend Jahrgänge 2007 und 2006
...
Saison 2017/18 Bambini Jahrgänge 2011 und jünger
Saison 2017/18 F-Jugend Jahrgänge 2010 und 2009
Saison 2017/18 E-Jugend Jahrgänge 2008 und 2007
Also Bambini Regel (mal grundlegend in meinem Laienhaften Algorithmus):
Wenn (aktuelles Datum) > (1. August) then (aktuelles Jahr)-6 andernfalls -7=BambiniKlasse
BambiniSpieler=Geburtsjahr-BambiniKlasse<=0
Betrag (Geburtsjahr-Bambiniklasse)=Restjahre bei den Bambinis
Davon ausgehen ist vielleicht die Einteilung in Jahre sinnvoller:
Wenn (aktuelles Datum) > (1. August) then (aktuelles Jahr)+1 anderfalls (aktuelles Jahr)=Einteilungsjahr
Wenn (Einteilungsjahr) - (Geburtsjahr) <=7 then Bambini
Wenn (Einteilungsjahr) - (Geburtsjahr) 8 or 9 then F-Jugend
Wenn (Einteilungsjahr) - (Geburtsjahr) 10 or 11 then E-Jugend
Wenn (Einteilungsjahr) - (Geburtsjahr) 12 or 13 then D-Jugend
Wenn (Einteilungsjahr) - (Geburtsjahr) 14 or 15 then C-Jugend
...
Habs nun ein paar mal durchgerechnet und müsste so passen (ohne Gewähr angesichts der Nachtzeit...).
Und hier liegt der Hund begraben: Findige Leute würden wahrscheinlich ohne Probleme eine SQL-Abfrage aus dem o.g. Algorithmus hinkriegen. Ich hatte schon Probleme die Version von Beaker nach 2 Monaten der Nutzung zu rekonstruieren...
Dies würde das Formular frmTurnier betreffen. D.h. es sollten nur die Spieler angezeigt werden, die das Kriterium Bambini erfüllen.
Weiterhin wäre auch ein Bericht mit gleicher Abfrage sinnvoll, der mir nur die Bambinikinder auflistet.
Falls ich die F-Jugend wirklich einmal übernehmen sollte, wäre es vielleicht sinnvoll auch bei den Turnieren eine Unterscheidung zu treffen. Komme erst jetzt darauf, werde aber in der Tabelle Turnier noch zusätzlich "KlasseTurnier" einfügen, wo dann G,F,E,D,... für G-Jugend (also Bambinis), F-Jugend usw. vermerkt ist.
Wenn jemand so eine SQL Abfrage hinkriegt, ist es richtig gedacht, dass ich einfach nur Abfragen muss, welche Klasse das Turnier hat und dann die passende SQL-Abfrage dahinter schalte und mir dann für ein G-Jugend-Turnier nur die G-JugendSpieler angezeigt werden? Oder mache ich besser für jede Altersklasse ein eigenes Formular?
So, nun ist aber spät geworden.
Ich bin echt total dankbar für Eure Hilfe, ganz besonders von Dir ekkehard
Hallo Dirk,
Anhand deiner weiteren Beschreibungen habe ich erstmal das Datenmodell
entsprechend erweitert (s. Anl.)
Anmerkung: Das ist ein Konglomerat aus dem alten und deinem zuletzt
gezeigtem. Es war mir zu viel Aufwand die Felder umzubenennen (wegen
der Formulare). Ausserdem hatte ich so auch die gewünschten "Spiel"daten.
Bevor ich da jetzt weitermache würde ich mich wirklich freuen, wenn einer
der Regulars auch einen Blick darauf werfen könnte, ob da Fehler oder Lücken
sind. Ich weiss, dass es vielleicht etwas viel ist den ganzen Thread zu lesen,
aber eigentlich reichen die letzten 2 Posts des TS, da erst hier die Erweiterung
mit den Altersgruppen und die damit verbundene Notwendigkeit weiterer
Tabellen bekannt wurde.
Ich denke aber das die Berechnung/Zuordnung der Altersgruppen damit nicht so
schwierig werden sollte. - Vielen Dank im Voraus.
gruss ekkehard
Hallo Dirk,
Ich bin dran und komme voran :)
Über Ostern schaffe ich den Rest.
gruss ekkehard
NEEEEEEEEEEEEEIN!
BITTE! Hat echt Zeit! Bitte genieße Ostern oder sonst was, aber mach dir /macht euch bitte keinen Stress deswegen!
Danke
Dirk
PS: Aber by the way: Besteht die Möglichkeit in einer (z.B. dieser) Datenbank alle Werte komplett zu löschen (auch die Autoincr.), so dass man eine "jungfräuliche" Datenbank hat? Ich muss hier dauernd mit mindestens 2 Datenbanken arbeiten, weil eine sensitive Daten von Kindern enthält. Und wenn ich Probedaten eingebe, habe ich nachher so viel Dreck drin, den ich erst mal löschen muss (jaja, ich weiß, muss bei den Autowerten nicht unbedingt sein...).
Hallo Dirk,
Anbei die "fertige" Db; - hat Spass gemacht. Wozu ich allerdings zu faul war,
ist Dokumentation. Stehe bei Fragen aber gerne weiter zur Verfügung, auch
per PM. Hier aber eine kurze Zusammenfassung.
Altersgruppen:
Diese sind in einer Tabelle zusammengefasst, - s. Beziehungsbild. Diese musst
du auf Korrektheit der DS überprüfen und evtl. korrigieren.
Dann gibt es eine n:m-Tabelle zwischen dieser und den Spielern (s.u.). Diese
habe ich so angelegt, dass es für jeden Spieler/Saison einen Eintrag (DS) gibt,
und kann auf zwei Arten gefüllt werden,
1. bei Eingabe des Geburtstags des Spielers erfolgt die Berechnung/Speicherung
automatisch (s. Geburtsdatum_AfterUpdate)
2. in einer Schleife durch die Tabelle "Spieler" (s. Sub "SpielerAGAktualisieren").
Dazu fehlt allerdings noch die Möglichkeit des Aufrufs in einem Formular.
Da musst du dir Gedanken machen, wie du das starten willst. Ein Button im
Spieler-Form, der nur im Januar aktiv ist, oder sowas.
Anmerkung: Das geht sicher auch mit einer Anfügeabfrage, die habe ich aber
noch nicht hinbekommen.
Die Tabelle "Altersgruppen" ist zusätzl. über eine weitere n:m-Tabelle mit den
Turnieren verknüpft. Aus diesen Tabellen sind dann die Abfragen, die als
Datenherkunft von Kombis und Listen dienen, zusammengesetzt.
Im Turnier-Form gibt es jetzt ein UFo, in dem du alle ausgeschriebenen
Altergruppen zuordnen kannst. Falls dir das zu mühsam ist, könnte man das
auch, analog zu denen auf dem Spieler-Form, wieder mit zwei Listen umsetzen.
Im Spieler-Form werden im UFo (Kombifeld) jetzt auch nur noch die Turniere
mit der entsprechenden Altergruppe angezeigt, und mit dem Kombi im Formkopf
kannst du das Form auf eine Altersgruppe filtern. Einen passenden Bericht
versuche mal selbst.
Zitatso dass man eine "jungfräuliche" Datenbank hat
Die Autowerte werden bei einem "Reparieren/Komprimieren" zurück gesetzt.
Also einfach alle DS löschen (ausser in den Tabellen "Altersgruppen" und
"Saisonkalender") und dann reparieren/komprimieren.
Da sollten die Autowerte wieder bei 1 anfangen. Obwohl du den "Sinn" ja schon
erkannt hast
Zitatjaja, ich weiß, muss bei den Autowerten nicht unbedingt sein
gruss ekkehard
Super,
ganz vielen Dank.
Ich war leider kurzfristig beruflich unterwegs und konnte daher erst jetzt schauen: Das sieht echt klasse aus.
Ich habe nur 2 Probleme: Wenn ich das Alter eines Spielers eingetragen habe, ändert sich nicht mehr die Altersklasse. Bei einem Rechtschreibfehler wird die nicht aktualisiert. Ich muss mich da mal ein bisschen reinfuchsen, ich denke mal, wenn ich die Aktualisierungsprozedur auch in die Prozedur vom Datumfeld reinnehme müsste es klappen... Ich probier einfach mal.
Die Tabelle Saisonkalender habe ich noch nicht ganz verstanden... Lasst mir mal ein bisschen Zeit um das ganze Verdauen zu können.
Jedenfalls ganz lieben Dank
Dirk
Hallo Dirk,
Sorry für späte Antwort, aber seit Ostern läuft das einzige Sportereignis, das mich
wirklich interessiert, - Snooker-WM. Und da das zu fast 90% live übertragen
wird, na ja ...
ZitatWenn ich das Alter eines Spielers eingetragen habe, ändert sich nicht mehr die Altersklasse. Bei einem Rechtschreibfehler wird die nicht aktualisiert.
Ja, das habe ich auch bemerkt. Eine endgültige Lösung ist mir noch nicht eingefallen.
Die AG wird ja anhand der Saison bestimmt bzw. zusammen damit gespeichert. Und
durch den Mehrfelderindex in der Zwischentabelle ist halt pro Saison nur ein Eintrag
möglich. Das einfachste wird wohl sein in die Prozedur noch eine Abfrage auf Vorhandensein
ein zu bauen, und dementsprechend "AddNew" oder "Update" zu verwenden.
Zitatich denke mal, wenn ich die Aktualisierungsprozedur auch in die Prozedur vom Datumfeld reinnehme müsste
Da ist sie ja.
ZitatDie Tabelle Saisonkalender habe ich noch nicht ganz verstanden
Die brauchen wir für die Abfrage, die ich, wie angesprochen, noch nicht zusammen
bekommen habe, um die Aktualisierung der AG am Anfang des Jahres ohne die
jetzige Schleife zu erledigen.
Ich bleibe aber dran.
gruss ekkehard
P.S. Endspiel läuft nächsten Montag.
Hallo Dirk,
Anbei die DB mit der geänderten Prozedur zur Errechnung der Altersgruppe.
Die Idee mit der Kalendertabelle habe ich verworfen; - Tabelle und zugehörige
Prozeduren daher entfernt.
gruss ekkehard