Nur über einen Umweg und auch nicht besonders "einfach", bzw. wird's mit jedem Datanbankbackend ein bisschen anders zu realisieren sein, mit der eingebauten HSQL-DB (solange die Version <2.X ist) wird es nicht (bzw. nur per Makro) funktionieren, da die benötigte Funktion RPAD nicht vorhanden ist.
- Prinzip:
- Der Inhald des Listenfeldes besteht aus einer Abfrage mit 2 Spalten,
wobei sich in der ersten Spalte die zu sehende Information befindet, in der 2.Spalte der Wert, der in der Datentabelle gespeichert werden soll (das ist ja nicht Neues
)
- Der Inhalt der ersten Spalte muss, damit ihn der User gut interpretieren kann in seiner Länge genau definiert werden,
und wird aus mehreren Feldern und fixen Strings zusammengesetzt. Der Optische Trenner z.B. zwischen einer Postleitzahl und dem Familiennamen könnte ein | sein. Man benötigt dazu Grundkenntnisse für folgende SQL-Funktionen:
- LEFT()
- RPAD()
- CONCAT (besser CONCAT_WS, falls vorhanden)
- Der Clou: Das Listenfeld wird dann mit einer MONOSPACE-Schrift formatiert -
da ist das "i" gleich breit wie das "M", ein Leerzeichen an Stelle 10 ist also in der ganzen Liste in einer senkrechten Linie zu sehen.
Beispiel: Soll in einem Listefeld Postleitzahl, Familienname, Vorname und Titel angeführt werden, überlege man sich für den String/Zeile:
Postleitzahl: 7 Stellen ("D-12345")
Familienname+Vorname: 30 Stellen ("Musterfrau, Sabine ") wobei mindestens 5 Stellen für den Vornamen reserviert sind
Titel: (bis zu 10 Stellen) ("Dipl.Ing. ")
Trennzeichen: Postleitzahl | Familienname, Vorname [Titel]
Ergibt SQLmäßig:
CONCAT(RPAD(Postleitzahl,10 ' '), ' | ', RPAD(CONCAT(Familienname, ', ', Vorname), 30,' '), ' [', Titel, ']')
Also:
Code: Alles auswählen
D-12345 | Musterfrau, Sabine [Dipl.Ing.]
D-54321 | Mosermaier-Roncalli, Peter []
D-12345 | Musterfrau-Mosermaier-Ron, Eveli [Dr.]
Um ganz sicherzugehen, dass die Formatierung nicht auseinanderfliegt muss man die Strings voher noch auf die gewünschte Länge kappen:
Postleitzahl: LEFT(Postleitzahl, 7)
Familienname: LEFT(Familienname,25)
Vorname: LEFT(Vorname, 30 - LENGHT(LEFT(Familienname, 25)))
Titel: LEFT(Titel,10)
.. habe ich aber oben wegen der Übersichtlichkeit nicht gemacht
Für alle HSQLDB-ler: Ein Makro kann das Listenfeld auch füllen, wobei das Problem besteht, dass es dann keinen referentiellen Wert in Spalte 2 gibt, dieser Wert muss also bei der Veränderung des Listfeld-Wertes (Ereignis: "Status geändert") aus dem .Currentvalue des Listenfeldes ausgelesen werden und in das entsprechende Feld der DB geschrieben werden - d.h. das Listenfeld wird am Besten als NICHT gebundenes Kontrollelement verwendet und sein Inhalt (ListSource(0)) per Makro wann auch immer gesetzt.
Strings fix ablängen kann man in Starbasic praktisch mit "LSet" (oder RSet). Das "Schlüsselfeld" inkludiert man dann am besten ganz rechts, und kennzeichnet es eindeutig mit Klammern und so weiter. Z.B.:
Code: Alles auswählen
D-12345 | Musterfrau, Sabine [Dipl.Ing.] |@|1245|@|
D-54321 | Mosermaier-Roncalli, Peter [] |@|1246|@|
D-12345 | Musterfrau-Mosermaier-Ron, Eveli [Dr.] |@|1247|@|
a()=split(.currentvalue,"|@|") liefert dann unter a(1) den gewünschten Wert...