Datensatz Anzahl der Einträge festlegen

Moin,

ich bin Neueinsteiger und möchte eine Datenbank für Sportwettkämpfe anlegen.

Mein Problem ist es im Moment die Anzahl der Personen in einem Team zu begrenzen (kommender Wettkampf 3 Pers. Pro Team)

Die Namen der Teams und Personen sind teilweise vorab unbekannt und können erst vor Ort eingegeben werden. Meistens kommen die Personen einzeln und nennen dann ihren Namen und in welches Team sie gehören. Ich möchte gern eine Tabelle im Eingabeformular vermeiden in der ich die schon eingetragenen Personen erkennen könnte.

Wird diese Begrenzung durch Macros oder Beziehungen gelöst?

Ich habe es mit verschiedenen Beziehungen und einer Relationstabelle, in der Nr. 1 bis 3 einer Person zugewiesen wurden, nicht geschafft Doppeleinträge zu verhindern.

Bis jetzt funktioniert es bei mir nur, wenn ich alles in einem Datensatz schreibe.

Später sollen andere Teamstärken und verschiedene Wettkampfarten dazu kommen.

Dann würde mein Datensatz von der Länge her die Wohnung verlassen :slight_smile:

Gruß

Markus

Du hast doch die Bezeichnung des Teams. Du weist dann einzelnen Personen die Zahlen 1 bis 3 zu.

Angenommen die Tabelle enthält einen Primärschlüssel und das Feld “Team” sowie “Mitgliednummer”.

Jetzt kannst Du in den Tabellenentwurf gehen und über Extras → Indexentwurf einen neuen Index erstellen. Der Index soll eindeutig sein und geht über die Felder “Team” und “Mitgliedsnummer”. Schau dazu auch im Base Handbuch, Kapitel “Tabellen”, Unterkapitel “Einstellung eines Indexes”, nach.

Ist der Index eingestellt, so kannst Du die zu einem Team gehörigen Nummern nur genau einmal vergeben. Hindert Dich natürlich nicht daran, eine ‘4’ zu setzen, aber das ist ja im Formular begenzbar.

Im Formular würde ich jetzt lediglich anzeigen, ob im Team noch eine Nummer frei ist - nicht alle anderen Teammitglieder.

Vielen Dank für die schnelle Antwort. Ich werde das übers Wochenende mal versuchen

Also, wenn jedes Team immer aus genau 3 Personen besteht, dann würde ich doch einfach jedem Team 3 Spalten für die Mitglieder hinzufügen. Das ist jetzt theoretisch nicht ganz sauber, aber vertretbar.
Leerstellen kann man dann abfragen wie SELECT * FROM "TEAMS" WHERE "PID1" IS NULL OR "PID2" IS NULL OR "PID3" IS NULL
Versehentliche Doppelbelegungen müsste man auch noch abfragen wie:

SELECT "X"."PID", COUNT("X".*)AS "C" FROM (
  SELECT "PID1" AS "PID" FROM "TEAMS" 
  UNION ALL SELECT "PID2" FROM "TEAMS" 
  UNION ALL SELECT "PID3" FROM "TEAMS"
) AS "X"
GROUP BY "X"."PID"
HAVING COUNT("X".*) >1

Das schreibt die 3 PID-Spalten untereinander, zählt das Vorkommen jeder PID und zeigt dann alle an, wo die Anzahl größer 1 ist.

Hier mal ein schneller Entwurf mit einer Filter-Tabelle und einem Formular.
In Zeile ID=0 der Filter-Tabelle speichert die Spalte “INT1” welches Turnier gerade bearbeitet wird, und Spalte “B1” (boolean) speichert einen Wert, der festlegt, ob vollständige Teams ausgeblendet werden sollen oder nicht.

Im Formular ist das gelbe Hauptformular an diese Filter-Zeile gebunden.
Das grüne Unterformular zeigt nur die Teams des ausgewählten Tourniers an. Dort kann man für jeden Team-Namen bis zu 3 Personen auswählen.
Das orangefarbene Unterformular zeigt doppelt eingeteilte Personen für das laufende Turnier, und das rote Unter-Unterformular liefert die entsprechenden Teams zur Korrektur.
teams.odb (21.1 KB)

Moin,
das gefällt mir gut. Nachteil ist tatsächlich wie bei meinem ersten Versuch, dass es nur für 3 Personen Teams geeignet ist. Ich befürchte auch, dass die noch älteren Vereinsmitglieder mit dem Eingabeformular nicht zurechtkommen.
Ich werde mal ein paar Abende lang versuchen das alles zu verstehen was du erstellt hast und weiter im Handbuch arbeiten. Da ich noch nicht weiß warum sich dein Datensatz nach Auswahl im Listenfeld ändert und bei mir nicht.
Pokal_2024.odb (14.3 KB)

Das ist genau, wonach Du gefragt hast.

Wer mit sowas nicht zurecht kommt, sollte generel die FInger von Computern lassen. Das Teil lässt sich trotzdem noch stark vereinfachen. Wenn es immer nur dasselbe Turnier ist, kann man die Turnier-Auswahl weglassen. Die anderen Elemente dienen nur dazu, den Überblick zu behalten zwecks Vermeidung von Fehlern (Duplikate, fehlende Zuordnung).

Dir fehlt das theoretische Wissen über relationale Datenbanken. Seit den 70er Jahren sind relationale Datenbanken der Goldstandard für das Abbilden von Beziehungen. Dafür muss man Primärschlüssel und Fremdschlüssel verstehen und wie man mit ihnen verschiedenartige Beziehungen modelliert.

In meinem Beispiel bin ich von einem erfassten Personenkreis mit Adressen, Telefonnummern, Mailadressen etc. ausgegangen. Dieser Personenkreis soll Turnieren zugewiesen werden und innerhalb der Turniere sollen Gruppen mit genau 3 Mitgliedern gebildet werden (Skat?).

Habe noch den Sonntag nachmittag drangegeben, um das etwas sauberer zu implementieren. Jetzt erfolgt die Zuordnung über eine Tabelle MEMBERS, die schon mal verhindert, dass eine Person doppelt zugeordnet werden kann. Die rote Kontrolltabelle zeigt jetzt einfach nur an, welche Gruppen noch nicht vollständig sind.
Das ist nun wirklich kinderleicht zu bedienen. Ich habe ein zweites Turnier angelegt, indem ich einfach einen Namen “Quali 2024” in die Turniertabelle geschrieben habe.
Dieses Turnier ist nun im Formular auswählbar. Klickt man auf [OK], kann man Gruppennamen für dieses Turnier untereinander schreiben und dem jeweils ausgewählten Team bis zu 3 Personen zuordnen. Wenn ein Listenfeld fokussiert ist, kann man den Namen auch durch Tippen finden. Alt+Unten klappt die Liste auf.
Gibt man einen Teilnehmer doppelt ein (selbes Turnier, egal welche Gurppe) kommt eine Fehlermeldung. Danach kann man es nochmal versuchen oder die Eingabe rückgängig machen. Schaltflächen für Rückgängig und Löschen habe ich hier angefügt.
teams2.odb (146.0 KB)

1 Like