Beitrag
von Dru Drury » Mo 10. Jun 2024, 01:39
Hallo Robert,
nein, also da liegt ein Mißverständnis vor, die Tabelle wird nicht via vorgeschalteter Abfrage über ein Formular befüllt, sondern direkt ohne Umwege (Formular ->Tabelle). Wahrscheinlich gründet das Mißverständnis auf meinem Eingangspost, in dem ich erwähnte, daß einige der gewünschten String-Auslesungen mir in SQL im Prinzip zugänglich sind, das bezog sich aber auf die Formulierung, nicht auf die Implementierung. Anyway, ich formuliere die Fragestellung/Aufgabe nochmal neu, so daß das für alle Mitlesende besser nachvollziehbar wird.
Die Datenbank (HSQLDB) wird genutzt, um einzelne physische Objekte in ihren Eigenschaften zu beschreiben.
Hierfür besteht eine TABELLE_1, deren Datensätze jeweils ein Objekt erfassen. Diese TABELLE_1 wird über ein FORMULAR_1 direkt befüllt. Einzelne Felder dieser TABELLE_1 speichern INTEGER-Werte aus Listenfeldern ab, die ihrerseits auf anderen Tabellen beruhen. Der Einfachheit halber kann man von nur einer solchen Tabelle ausgehen, hier als TABELLE_2 bezeichnet.
TABELLE_1 umfaßt die für die Fragestellung relevanten Felder:
(Nummer) Name (Datentyp, Eingabeweg)
(1) ID (Integer, Autofeld)
(2) Person (Integer, via Listenfeld)
(3) Bezeichnung (Varchar, direkt)
(4) Jahreszahl (Varchar, direkt)
(5) String (Varchar, zu befüllen via Makro und/oder SQL)
TABELLE_2 dient als Quelle für das Listenfeld "Person" (2) und umfaßt die Felder
"ID_person" (Integer & key, wird abgespeichert in TABELLE_1) und ein Feld
"Name" (Varchar, wird im FORMULAR_1 angezeigt)
Die Aufgaben (A-C) betreffen das Feld (5) dieser TABELLE_1
Dieses Feld (5) soll einen String aufnehmen, der zusammengesetzt wird aus
(A) einer beschränkten Auslesung des Textes im Feld "Bezeichnung" (3): -> die zwei längsten Wörter: Dein Makro (gelöst, funktioniert, danke!)
(B) ergänzt um eine Auslesung der ersten X Zeichen von (4)
(C) ergänzt um eine Auslesung der aller Zeichen bis zum Auftreten eines Kommas im Feld "Name" der dem Listenfeld (2) zugrundliegenden TABELLE_2
Die Auslesung/Weitergabe der Daten in/an das Feld (5) soll mittels Button in FORMULAR_1 erfolgen, nachdem zuvor alle hierfür notwendigen Felder im FORMULAR_1 befüllt worden sind. Die Ausgabe/Weitergabe soll keine sofortige Speicherung zur Folge haben, es geht zunächst nur um das Befüllen des entsprechenden Feldes im FORMULAR_1, es soll weiter bearbeitbar bleiben und dann mit schließen des Datensatzes gespeichert werden (funktioniert so bereits in Deinem Makro).
Wie gesagt, ursprünglich bestand die Schwierigkeit darin, die zwei längsten Wörter eines Textfeldes auszulesen. Das war mir in SQL nicht möglich, während die anderen Aufgaben für mich in SQL machbar waren (mir ist klar, daß ich bei Umsetzung in SQL das Ausgabergebnis nur über eine Abfrage des gespeicherten Datensatzes und über eine 1:1 Relation mittels Abfrage/Hilfstabelle in Feld (5) der Tabelle1 bekommen hätte, Dein Makro ist aber offensichtlich deutlich effizienter, erst recht, wenn man es um die anderen zwei genannten Anforderungen erweitern könnte - ich habe in meinen letzten Posts versucht, derartige SQL-Abfragen in Dein Makro hineinzukriegen, bin aber offensichtlich mangels Kenntnis der Makro-Sprache gescheitert. Wenn man das also komplett als Makro lösen kann... Sehr gerne!)
Dank & Gruß ,
DruDrury