Hallo Christian,
Argh hat geschrieben:
1) Ich habe ein SQL mit dem Daten das Listenfeld gefüllt wird
Code: Alles auswählen
"SELECT ""Name"" || ', ' || ""Vorname"" || ' ' || ""Geburtsdatum"", ""ID"" FROM ""Stammdaten"" WHERE ""Name"" like '" & sFilterfeld & "%'"
Kann ich auch anstelle von "||" und kommaseparierte Daten mehrere Spalten in einem Listenfeld haben?
Du kannst im Listenfeld nicht spaltenförmig darstellen. Das Kürzel für Tabulatoren CHAR(9) funktioniert im Listenfeld nicht als Tabulator. Das einzige, was Du machen könntest: Wähle eine Schrift mit fester Zeichenbreite wie Courier oder alle Schriftarten, die ein "Mono" im Namen haben. Vervollständige alle einzelnen Felder auf eine feste Zeichenzahl mit z.B.
und verbinde die Felder anschließend. An "Name" werden in obigem Beispiel so viele Leertasten angefügt wie Zeichen dargestellt werden sollen; danach wird der Begriff auf die Größe von 20 Zeichen beschnitten. Das Ganze macht zumindest bei mir anschließend den Eindruck einer sauberen Tabelle im Listenfeld.
Argh hat geschrieben:
2) Werte wieder auslesen
Den aktuell selektierten Wert erhalte ich mit:
Code: Alles auswählen
Sub Felder_auslesen()
Dim oForm as Variant
Dim oErgebnisliste as Object
oform = ThisComponent.drawpage.forms.getbyname("Suche")
oErgebnisliste = oform.getbyname("Ergebnisliste")
if (oErgebnisliste.currentValue = "") then
msgBox "Keine Daten ausgewählt"
else
msgbox oErgebnisliste.currentValue
end if
End Sub
Was mir jedoch fehlt ist der im SQL selektiwerten Werte "ID"!
Das zeigt mir, dass Du nicht LibreOffice in einer der aktuellen Versionen nutzt. Dort ist das Ganze sinnvollerweise umgestellt worden. CurrentValue ist, wie bei den anderen Feldern, der Wert, der an die Datenbank weitergegeben wird, nicht der, der angezeigt wird. Ich habe früher auch mit viel Umwegen den Wert über Abfragen ermittelt. Geht aber auch anders:
Code: Alles auswählen
FUNCTION ID_Ermittlung(oFeld AS OBJECT) AS INTEGER
a() = OfficeVersion()
IF a(0) = "LibreOffice" AND LEFT(a(1),3) = "4.1" THEN
stInhalt = oFeld.currentValue
ELSE
REM Vor LO 4.1 wird der Wert, der weiter gegeben wird, aus der Werteliste des Listenfeldes ausgelesen.
REM Der sichtbar ausgewählte Datensatz ist SelectedItems(0). '0', weil auch mehrere Werte in einem Listenfeld ausgewählt werden könnten.
stInhalt = oFeld.ValueItemList(oFeld.SelectedItems(0))
END IF
IF IsEmpty(stInhalt) THEN
REM Mit -1 wird ein Zahlenwert weiter gegeben, der nicht als AutoWert verwendet wird, also in den Tabellen nicht existiert.
ID_Ermittlung = -1
ELSE
ID_Ermittlung = CInt(stInhalt) 'Umwandlung von Text in Integer
END IF
END FUNCTION
Du wirst also in Deiner Version den Wert über stInhalt = oFeld.ValueItemList(oFeld.SelectedItems(0)) erhalten.
Edit 1: Da hatte ich doch glatt eine Funktion unterschlagen, die in der obigen Funktion aufgerufen wird:
Code: Alles auswählen
FUNCTION OfficeVersion()
DIM aSettings, aConfigProvider
DIM aParams2(0) AS NEW com.sun.star.beans.PropertyValue
DIM sProvider$, sAccess$
sProvider = "com.sun.star.configuration.ConfigurationProvider"
sAccess = "com.sun.star.configuration.ConfigurationAccess"
aConfigProvider = createUnoService(sProvider)
aParams2(0).Name = "nodepath"
aParams2(0).Value = "/org.openoffice.Setup/Product"
aSettings = aConfigProvider.createInstanceWithArguments(sAccess, aParams2())
REM Der Name der Office-Version (LibreOffice oder OpenOffice) sowie die genaue Versionsnummer (4.1.5.3) werden als Array weitergegeben
OfficeVersion() = array(aSettings.ooName,aSettings.ooSetupVersionAboutBox)
END FUNCTION
Gruß
Robert