Seite 1 von 1
Formular für Anwesenheitsliste und Verknüpfung mit Terminen
Verfasst: Mi, 05.12.2012 12:46
von Sppedfreak
Hallo,
ich habe das Forum hier die letzten Tage schon abgegrast und auch vieles andere gescuht und probiert, komme aber mangels Beispielen und Erfahrung mit Datenbanken nicht ganz weiter. Die Aufagbe an sich ist trivial und auch schon tausendmal umgesetzt worden, drum reichen mit auch Hinweise auf Seiten oder andere Ressourcen, in denen man grob die Richtung erkennen kann.
Also worum gehts?
Ich habe eine Sportgruppe, die ich verwalte. Nebenbei mache ich die Kasse und eine Anwesenheitskontrolle. In Calc ist mir das zu mühselig geworden, da dachte ich mir: "Proboier's doch mal mit 'ner DB". Für den Basisteil (Mitglieder+Anwesenheit) habe ich derzeit drei Tabellen anegelegt.
T1, Mitgliederstammdaten:
- Mitgliedsnummer* (inkrementell, Autowert)
- Vorname
- Nachname
- ... usw
T2, Trainingstermine:
- Trainingsnummer* (inkrementell, Autowert)
- Datum
T3, Anwesenheit:
- Trainingsnummer*
- Mitgliedsnummer
- Anwesend (Ja/Nein)
Ich bekomme es einfach nicht gebacken ein Formular zu bauen, das mir die Nachnamen und Vornamen anzeigt und eine Checkbox, die ich auch bearbeiten kann und anschließend die Werte Trainingsnummer, Mitgliedsnummer, Anwesend in T3 einträgt. Über den Assistenten bekomme ich immer Formulare, die ich nicht editieren kann, weil mein Formular aus einer Join-Abfrage aus T1, 2 und 3 gespeist wird. Nur T3 hilft mir aber nicht viel, da ich die Mitgliedsnummern ja nicht alle im Kopf habe.
Vielen Dank für Eure Hilfe,
André
P.S.: Ich werde heute Abend noch eine Dummy-DB-Datei mit meinen Tabellen hochladen. Vielleicht gibt es bis dahin ja schon ein paar Denkanstöße.
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Mi, 05.12.2012 19:54
von RobertG
Hallo André,
eigentlich kein großes Problem.
Du wählst die Tabelle "Trainingstermine" als Hauptformular. In dieser kannst Du also jeden neuen Termin vermerken.
Du nimmst die Tabelle "Anwesenheit" als Unterformukar. Die Verknüpfung erfolgt im Assistenten automatisch, wenn Du unter Extras I Beziehungen die Tabellen entsprechend verknüpft hast.
In dem Subformular greifst Du auf das Feld "Mitgliedsnummer" mit einem Listenfeld zu. Dieses Listenfeld stellt den Namen des Mitgliedes dar, schreibt aber in die Tabelle des Unterformulars die Nummer.
Wie solch ein Listenfeld erstellt werden kann, das steht unter anderem im Base-Handbuch: (
http://de.libreoffice.org/hilfe-kontakt/handbuecher/ - etwas nach unten scrollen. Speziell das Kapitel zu Formularen, eventuell noch zu Abfragen (für die Kombination von Nachnamen und Vornamen) dürfte für Dich von Bedeutung sein.
Gruß
Robert
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Mi, 05.12.2012 22:58
von Sppedfreak
Hallo Robert,
Danke für den Hinweis mit den Listenfeldern. Ich habe es jetzt so hinbekommen, dass ich im Unterformular Einträge mit dem Listenfeld erzeugen kann. Das hat aber den charmanten Nachteil, dass ich für alle anwesenden Personen einmal den Namen aus dem Listenfeld anwählen muß, um einen Eintrag in der Anwesenheitstabelle vornehmen zu können. Bei mind. 20 Namen pro Termin keine schöne Vorstellung.
Ich hoffte das ich das über Mehrfachselektion erledigen könnte, aber Pustekuchen, laut LibreOffice Doku geht das wohl auch nicht. Die Anwahl der entsprechenden Option im Listenfeld-Kontextmenü zeigte dann auch erwartungsemäß keinerlei Wirkung.
Gibt es sonst noch eine brauchbare Möglichkeit mehrere Einträge mit einem mal zu erzeugen?
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Do, 06.12.2012 08:31
von juetho
Ein praktisches Problem ist es auf jeden Fall. Wie viele Mitglieder gibt es insgesamt? Wenn ich das richtig verstehe, bräuchtest du eine Möglichkeit, um in einer Liste von 50 bis 1000 Mitgliedern jeweils 20 oder mehr Kreuze zu setzen.
Meine Idee dazu lautet (in Ergänzung zu Roberts Vorschlag): Erzeuge eine Abfrage Anwesenheit mit den Daten aus T3 JOIN T1 in Verbindung mit der Trainingsnummer laut Verknüpfung mit dem Hauptformular. Diese Abfrage kannst du in einem Tabellenkontrollfeld darstellen und hast dadurch eine einfache Möglichkeit, die Kreuze im J/N-Feld zu setzen. Unter Beachtung der Regeln (Handbuch S. 160 f.) kann diese Abfrage auch bearbeitet werden; notfalls geht es mit einem kleinen Makro. Jürgen
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Do, 06.12.2012 08:31
von RobertG
Hallo André,
das Problem bei anderen Lösungen ist, dass die Anwesenheit von zwei Feldern abhängig ist, die zusammen den Primärschlüssel bilden (Person und Termin).
Ich habe einmal schnell eine "Lösung" mit zwei Unterformularen gebastelt.
Gruß
Robert
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Do, 06.12.2012 09:27
von Sppedfreak
Guten Morgen,
danke für die Antworten und Hilfestellung.
@Robert: Die Datei kann ich mir erst heute Abend ansehen, da ich hier kein OO installiert habe. Das mit dem zusammengefassten Primärschlüssel hab ich schon mal gelesen, aber noch nicht ausprobiert.
@Jürgen: Ja, Du hast Recht. Es gibt derzeit ca. 30 Mitglieder. Pro Training sind zwischen 15 und 25 anwesend. Ich brauche die relative Anzahl an Mitgliedern, die im MIittel beim Training erscheint Mittel und die Streuung davon. Weiterhin gibt es eine 4x Nichterscheinen = Draussen Regel, da die Plätze sehr begehrt sind und jede Woche mind. 2 Anfragen reinkommen.
Es würde auch reichen, wenn ich alle Namen, die da waren igrendwie selektieren kann und dann in einem Schwung in die Tabelle Anwesenheit eintrage. Aus der T1 lässt sich durch die Felder Ein- und Austrittsdatum feststellen, wer alles beim Training hätte sein können, die Einträge in T3 stellten dann nur die tatsäschlich anwesenden dar. Insofern ist das J/N Feld sogar resundant.
Vielen Dank und Gruß
André
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Fr, 07.12.2012 10:46
von Sppedfreak
Also ich habe gestern Abend alle Vorschläge durchprobiert.
Die Beispieldatenbank von Robert ist bis jetzt am besten handhabbar.
Die Idee mit dem T3 Join T2 hat auch funktioniert, erfordert aber die händische Eingabe der T_ID in das Formular, was natürlich fehleranfällig ist.
Ich habe gestern noch versucht die Einträge per INSERT zu erzeugen. Einfach alle M_ID's per
Code: Alles auswählen
INSERT "T3" ("M_ID") SELECT "Mitgliedsnummer" FROM "T1"
einmal in die Tabelle Anwesenheit schreiben und dann in Spalte T_ID die aktuelle T_ID mit
zu ändern. Das scheitert aber daran, dass beide Spalten zum Primärschlüssel gehören und NOT NULLABLE COLUMN's sind.
Nach stundenlangem Herumprobieren mit Join und Unterformularen bin ich daher zu folgendem Schluß gekommen: Es geht nicht ohne Makros.
Was haltet Ihr daher von folgendem Lösungsanasatz:
Ich füge in die Mitgliedstabelle eine J/N Feld ein. Ich baue eine Formular mit einem Tabellenkontrollfeld für die Stammdatentabelle (T1) und einem Knopf für die Funktion
Danach kann ich in der Tabelle alle Personen anwählen, die da waren und speichere die Einträge in der Stammdatentabelle!
Nun erzeugt mir ein zweites Makro ein temporäre Tabelle ("Temporary_Table") mit den Spalten "T_ID", "Mitgliedsnummer" und "Anwesend", in welche ich "T_ID" und "Anwesend" aus der Stammdatentabelle per INSERT einfüge. Da die Tabelle keinen Primärschlüssel besitzt und nur temporären Charakter hat kann ich nun per UPDATE das Feld "T_ID" auffüllen.
Alle drei Spalten füge ich dann mit einem
Code: Alles auswählen
INSERT "T3" ("T_ID", "M_ID", "Anwesend") SELECT "T_ID", "M_ID", "Anwesend" FROM "Temporary_Table"
in die eigentliche Anwesenheitsliste (T3) ein. Anschließend kann die temporäre Tabelle wieder gelöscht werden.
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Fr, 07.12.2012 15:57
von RobertG
Hallo Sppedfreak,
möglich wäre auch, die Tabelle mit T_ID und P_ID etwas zu entschärfen. Du nimmst die beiden Felder aus dem Primärschlüssel raus. Dann könntest Du die beiden Felder separat mit Hilfe eines Indexes als "Unique" verwalten. Der Vorteil: Du kannst P_ID eingeben (auch über SQL), ohne T_ID einzugeben. Der Index schlägt erst dann an, wenn Du bei den Feldern zwei gleiche Kombinationen hast, nicht aber, wenn das eine Feld NULL ist.
Gruß
Robert
Re: Formular für Anwesenheitsliste und Verknüpfung mit Termi
Verfasst: Fr, 07.12.2012 17:28
von RobertG
Ich habe das noch einmal überlegt:
Ich gehe davon aus, dass alle Personen an allen Terminen eigentlich teilnehmen wollen. Die Kombinationen in Tabelle 3 müssen also alle existieren. Jetzt stehen eigentlich auch alle Termine von vornherein fest. Dann wäre es ja möglich, mit einem Schwung die ID für die Personen und die ID für die Termine in die Tabelle einzutragen. Das geht sogar komplett ohne SQL-Kenntnisse. Ich habe also eine Abfrage erstellt, in der alle Kombinationen von Termin ID und Person ID zusammengefasst wurden. Dann habe ich die Abfrage in den Tabellencontainer gezogen. Die Daten lasse ich jetzt an die Tabelle "Anwesenheit" anhängen. Schon habe ich mit einer weiteren Abfrage die Möglichkeit, alle Termine und Personen und das Feld "Anwesenheit" gemeinsam angezeigt zu bekommen.
Ich hänge die entsprechende DB an.
Gruß
Robert