informative Inhalte in Formular einbetten

Hi Leute,
ich habe folgendes Problem:

In unserer Schulbibliothek benutzen wir eine Datenbank unter Libreoffice Base, um zu registrieren, wer welche Bücher ausleiht bzw. zurückgibt.
Dafür gibt es eine Tabelle “Ausleihen” mit den Spalten “ID” (Integer, Primärschlüssel), “Schüler” (Varchar), “Buch” (Varchar) und “Zurückgegeben” (Boolean). Mithilfe eines Formuars mit den Eingabefeldern “Schüler” und “Buch” werden Bücher ausgeliehen. Mithilfe einer Abfrage werden Bücher zurückgegeben (Häkchen in die Checkbox bei “Zurückgegeben” setzen.

Folgendes Problem: Die Bibliothek wird aufgrund der Menge an ausgeleihenen Büchern schnell unübersichtlich. Ich möchte sicherstellen, dass jeder Schüler nur ein Buch gleichzeitig ausleiht. Dazu reicht es auch, wenn bei der Eingabe des Namens ersichtlich ist, dass er in der Abfrage der noch nicht zurückgegebenen Ausleihen schon eingetragen ist.
Die Option, dass als Hilfe zur Lösung alle Schüler mit Namen in einer Tabelle registriert werden ist nicht möglich.
Eine Namensliste, der Schüler, die Bücher ausgeliehen haben, welche im Formular angezeigt wird, ist ein Kompromiss. Ich hatte jenes versucht, allerdings gab es Probleme dahingehend, dass libreoffice-base beim Absenden des Formulars versucht hat, Werte aus der angezeigten Tabelle in die Tabelle zurück einzutragen, was nicht möglich war.

Im Anhang findet ihr die Datei mit ein paar Beispieleinträgen. library.odb

Liebe Grüße, Ben.

Ich möchte sicherstellen, dass jeder Schüler nur ein Buch gleichzeitig ausleiht.

Das widerspricht aber deiner Tabelle bzw. Abfrage. Danach hat z.B. Andile 3 Bücher ausgeliehen.
Wenn jeder Schüler nur ein Buch erhalten kann, sollte jeder Schüler auch nur einen Eintrag haben. Wenn er das Buch zurück gibt und ein neues mitnimmt, wird einfach der Buchtitel überschrieben.

Oder verstehe ich da irgend etwas nicht richtig?

Sry, da sind die Testeinträge falsch. Der Name ist natürlich nicht “einmalig” in der Tabelle, da mehrere frühere Ausleihen, welche mit “Zurückgegeben” markiert sind, existieren können, aber nur eine ohne “Zurückgegeben”

Ich habe das einmal für das entsprechende Formular zur Ausgabe von Büchern zusammengebaut. So eine Kontrolle bekommst Du nur über Makros, es sei denn Du hast die Liste der Ausleihenden von vornherein in einem Listenfeld und lässt das Listenfeld beim Öffnen des Formulars nur mit den Ausleihenden füllen, die noch kein Buch entliehen haben.
Buchausleihe mit Überprüfung

Für die Datenbank musst Du die Ausführung von Makros erlauben: Extras → Optionen → LibreOffice → Sicherheit → Makrosicherheit → Mittel

Als vertrauenswürdige Quelle kannst Du auch das Verzeichnis angeben, in das Du die Datenbank legst. Dann wirst Du nicht bei jedem Öffnen gefragt, ob Makros ausgeführt werden dürfen.

Da ich selbst mehrere Bibliotheksdatenbanken erstellt habe - vor allem für Schulen - lass Dir gesagt sein, dass die vorhandenen Medien sowie die Entleiher in separaten Tabellen aufgehoben werden sollten und bei der Ausleihe nur zu der Person das Medium herausgegeben werden sollte. SchülerInnenListen können problemlos aus den Schulverwaltungsdaten in so eine Datenbank übertragen werden.

Vielen Dank für die hilfreiche Antwort. Mit Makros kenne ich mich überhaupt nicht aus, insofern ist das sehr hilfreich. Ich habe hier nur eine vereinfachte Version veröffentlicht, tatsächlich gibt es eine Tabelle “Ausleihen” und eine “Bücher”. In “Ausleihen” wird nur die Buchnummer eingetragen, welche Primärschlüssel in “Bücher” ist.
An das Listenfeld, bei dem nur Lernende angezeigt werden, die noch keine Bücher ausgeliehen haben, habe ich auch gedacht. Allerdings fällt die Option weg, da der Wartungsaufwand aus Organisatorischen Gründen geringstmöglichst gehalten werden muss. Eine Tabelle mit allen Schülern zu erstellen ist deshalb nicht möglich.

Was meinst du mit “Nur zu der Person das Medium ausgeben”? Das ist doch das, was die Abfrage macht? Oder meinst du das in Form eines Formulars mit Eingabefeldern, in der man die Einträge sucht, nicht einer Tabelle.

Es gibt ein Problem mit deinem Macro: Möchte ich zum Beispiel “Albert” eingeben, dann wird schon bei der Eingabe des Buchstabens “A” automatisch die Zeile auf “Andile” vervollständigt (was an sich sehr sehr praktisch ist). Dadurch wird aber sofort die Warnung ausgelöst, dass der Name schon vorhanden ist. Dass behindert die Eingabe extrem, vor allem, wenn zwei Schüler den gleichen Vornamen haben und die Meldung bei jeder Buchstabeneingabe auftaucht.
Das Autokomplete würde ich sehr ungern abschalten, da der Bibliothekar sehr langsam im Tippen ist.

Ich habe vorher versucht, das Makro an den Fokusverlust des Feldes zu binden. Das geht auch, bedingt aber, dass Du nach einer Blockierung der Eingabe und einer Neuauswahl mit der Maus erst einmal auf den Hintergrund drücken musst, damit das Makro das vorher gesperrte Feld wieder freischaltet. Dann Hast Du nicht dauernd eine Meldung bei Neueingaben.

Versuche das Formular zu editieren. Markiere das Kombinationsfeld, lass Dir die Eigenschaften zu dem Feld anzeigen und ändere bei den Ereignissen die Zuordnung des Makros “Ausleihkontrolle” von “Text modifiziert” nach “Bei Fokusverlust”. Die Zuordnung änderst Du, indem Du den Button mit den 3 Punkten neben dem Makroname drückst.

Ließe sich der Makro nicht auch an das Abschicken des Formulares knüpfen? Also noch bevor die Daten in die Tabelle eingetragen werden?

Natürlich ist das möglich. Aber bei der erwähnten Eingabegeschwindigkeit ist es doch eine unnütze Eingabe, die für das Buch erfolgt - wenn denn das Makro den Nutzer sperrt.

Ich habe das Formular jetzt einmal etwas geändert. Die Bindung an den Fokusverlust funktionierte deswegen nicht einwandfrei, weil Du nur 2 Felder hast und das eine Feld durch das Makro gesperrt wird, wenn den ein Nutzer ausgeschlossen werden soll. Ein zusätzlicher (funktionsloser) Button sorgt dafür, dass der Fokusverlust auch stattfindet und das Makro bei Änderung des Namens (nach einer Sperre des Buch-Feldes) wieder ausgelöst wird.