Formular erstellen - Datensatz über Auswahlfeld festlegen

Hallo,
um in meiner Arbeit das Excel-Dateien-Chaos zu verringern, habe ich jetzt (ohne bisherige Vorkenntnisse) begonnen eine Postgresql-Datenbank zu erstellen. Da diese Datenbank später auch meinen Kollegen zur Verfügung stehen soll, wollte ich es mit Base als Frontend versuchen.
Leider scheitere ich jetzt schon bei der ersten Formularerstellung (und auch bei der Recherche nach einer Lösung in Handbuch und Forum).
Wie kann ich den gewünschten Datensatz im Formular finden, ohne die Datensätze einzeln durchzuklicken? Ich würde gerne in einem Feld einen (eindeutigen) Begriff/Namen eingeben können, und dann alle zum Datensatz gehörenden Werte im Formular angezeigt bekommen.
Danke für jeden Tipp, Thea

Du hast Dir für den Anfang gleich eine Hürde mit eingebaut: PostgreSQL und damit eine Serverdatenbank. Das ist für die Datensicherheit prima, aber die in den eingebauten Datenbanken verfügbaren Lösungen sind nicht immer im Verhältnis 1:1 um zu setzen.
.
Ohne Mehrbenutzerlösung würde ich das so machen:
Eine tbl_Filter, bei der das Primärschlüsselfeld Integer ist und wenigstens ein weiteres Feld, das nämlich für Deinen eindeutigen Begriff, vorhanden ist. In diese Tabelle gibst Du als Datensatz eine ‘1’ für die ID ein, lässt aber das andere Feld frei.
Du erstellst eine Abfrage für Dein Formular:

SELECT * FROM "tbl_MeineDaten" 
WHERE "Feld" = COALESCE((SELECT "Feld" FROM "tbl_Filter" WHERE "ID" = '1'),"Feld")

Bei PostgreSQL musst Du austesten, in wie weit auch das Schema (“public”) dabei stehen muss.
Wird die Abfrage ausgeführt, so muss es möglich sein, dort Daten ein zu geben.
.
Zum Formular:
Das Formulardokument enthält 2 nebeneinanderliegende Formulare, frmFilter und frmMeineDaten.
frmFilter hat als Datenbasis die Tabelle “tbl_Filter”. Das Formular wird so eingestellt, dass es nur die Änderung von Daten zulässt. Keine neuen Daten, kein Löschen! Das Formular braucht auch nur ein Formularfeld, nämlich das, das den eindeutigen Begriff einfügen soll. Wird ja vermutlich ein Listenfeld sein, in dem alle eindeutigen Begriffe aus dem Datenbestand enthalten sind.
frmMeineDaten hat dann die Tabelle tbl_MeineDaten als Datenbasis. Das Einzige, was hier neben dem gesamten Dateninhalt vorhanden sein muss, ist eine Schaltfläche, mit der das Formular aktualisiert werden kann.
Wählst Du in Deinem Listenfeld etwas aus und drückst auf diesen Button, so wird der Inhalt aus dem Listenfeld abgespeichert und das Formular zeigt nur die betreffenden Daten an.
.
Das Ganze habe ich auch im Handbuch unter “Datenfilterung” (Ausgabe 24.2 → S. 442) beschrieben.

Vielen Dank!
Es hat zwar ein wenig gedauert, aber jetzt habe ich es hinbekommen (und weiß auch, wo ich im Handbuch nachschauen muss).
Eine Kleinigkeit irritiert mich aber noch: Im Auswahllistenfeld von frmFilter sind die Daten scheinbar in unwillkürlicher Reihenfolge. Wonach wir hier sortiert? Es ist weder alphabetisch (was mein Wunsch wäre) noch nach der ID in der entsprechenden Tabelle… Wie könnte ich hier die Reihenfolge ändern?

Außerdem würde ich in der finalen Version schon einen Multi-User-Betrieb anstreben (deshalb auch psql). Jetzt habe ich mich damit noch nicht beschäftigt und verstehe vielleicht deswegen den Tipp im Handbuch nicht, aber habe ich dann in der tbl_Filter einen Datensatz für jeden User mit den username als ID?

Wo könnte ich mich denn generell zum Multi-User-Betrieb schlau machen?

Danke und viele Grüße
Thea

Das Haupthema ist meist Rechte am Anfang mitzudenken. Gibt es Teile, die nicht jeder sehen darf, dann eigene Tabelle oder herausfinden, ob es eine Rechteverwaltung für Spalten gibt.
.
Dann darauf achten, dass jeder die nötigen Rechte bekommt, also nicht nur die Daten, sondern auch in der Filtertabelle schreiben darf.
.
Bei PostgreSQL würde ich erstmal hier anfangen:
https://www.postgresql.org/docs/

Ja, so kann man das regeln. Dann musst Du als nächstes rausfinden, wie man an die UserId kommt.

@DDL2024 : Zum Listenfeld: Das wird in der Regel nach dem Index sortiert, wenn nichts anderes vorgegeben ist.

SELECT "Name", "ID" FROM "tbl_Person"

“Name” wird angezeigt, “ID” wird gespeichert.

SELECT "Name", "ID" FROM "tbl_Person" ORDER BY "Name"

So wird die Anzeige sortiert.
.
Zum Mehrbenutzerbetrieb: Ich habe das so gemacht, dass ich beim Öffnen der Datenbank die Verbindungs-ID als Primärschlüssel in die Filtertabelle schreiben lasse und die Daten, die ich sehen will, grundsätzlich über eine Ansicht anzeigen lasse. Die Ansicht macht nichts anderes als

SELECT * FROM "tbl_Filter" WHERE "ID" = CONNECTION_ID()

Ich weiss jetzt nicht, ob das der korrekte Befehl für PostgreSQL ist. Nur: Damit so etwas automatisch abläuft musst Du etwas in Makros investieren. Schau einmal im Handbuch S. 614 zu MySQL. Da steht so etwas vom Ansatz her.
.
… und ansonsten kriegen wir das hier auch geregelt.

1 Like

Vielen Dank, das schaue ich mir dann die Tage (Wochen?) alles mal an und im Zweifelsfall werde ich mich hier wieder melden.
VG