Frage stellen
0

Wie fülle ich eine Listbox in Abhängigkeit einer anderen (Dialog)? [Geschlossen]

gefragt 2015-11-29 11:57:23 +0200

Kenji Gravatar-Bild

Hallo zusammen,

es geht um folgendes. ich habe 2 Listboxen. Die eine Listbox fülle ich mit Hilfe eines Makros per SQL Abfrage. Das funktioniert auch soweit. Nun möchte ich die zweite Listbox in Abhängigkeit der ersten befüllen.

Beispiel: Ich wähle in Listbox 1 A aus, dann soll Listbox 2 ohne weiteren Mausklick mit A1, A2, A3 etc. gefüllt werden.

Soweit ich bisher rausbekommen habe muss ich erst einmal den selektierten Wert aus Listbox 1 ermitteln, was mit der Funktion .SelectedItem() funktionieren soll. Nur wie ich diese Variable dann in eine SQL Abfrage einbinde ist mir bisher nicht ganz klar. Hoffentlich hat hier jemand eine passende Lösung zur Hand.

Hier mal mein bisheriger Code:

Sub REDialogAusfuehren

    'Variablen deklarieren
    Dim REDialog as Object 
    Dim REObjektBox as Object
    Dim REGattungBox as Object
    Dim REConnection as Object
    Dim REDatasource as Object
    Dim SQL_Anweisung as Object
    Dim Objektabfrage as String

    'Dialog aufrufen
    DialogLibraries.LoadLibrary("Test12")
    REDialog = createUnoDialog(DialogLibraries.Test12.DialogRechnungen)

    'Datenbank Verbindung
    DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
    If DatabaseContext.hasByName("Test12_DB")=true Then
    Datenquelle = DatabaseContext.getByName("Test12_DB")
    Else
    MsgBox("Falsche Datenbank angemeldet")
    End If
    If Not Datenquelle.IsPasswordRequired Then
    Verbindung = Datenquelle.GetConnection("","")
    Else
    Authentifizierung = createUnoService("com.sun.star.sdb.InteractionHandler")
    Verbindung = Datenquelle.ConnectWithCompletion(Authentifizierung)
    End If
    SQL_Anweisung = Verbindung.createStatement()

    Objektabfrage = "Select ""AufgabenID"" From ""aufgaben"""
    Objektergebnis = SQL_Anweisung.executeQuery(Objektabfrage)

    REObjektBox = REDialog.GetControl("ListBox1")

    REObjektBox.removeItems(0, REObjektBox.getItemCount())

    While Objektergebnis.next
    ListBoxItem=Objektergebnis.getString(1)
    REObjektBox.additem(ListBoxItem, REObjektBox.ItemCount)
    Wend

End Sub


 Sub ListBox1_ItemStatusChanged (Event
 as Object)     Dim strSQL As String
        Dim ListBox As Object
        Dim Selected As String

    Selected=Event.Source.SelectedItem()
        strSQL="SELECT ""Gattung"" FROM ""aufgaben"" WHERE ""AufgabenID""=" &
 Selected & ""

    ListBox=Event.Source.Model.Parent.getByName("ListBox2")

    ListBox.ListSourceType=com.sun.star.sdb.ListSourceType.SQL
     ListBox.ListSource=Array(strSQL) 
End Sub

Ich hoffe mir kann jemand einen Tipp geben.

Grüße

Kenji

Bearbeiten Tags ändern Melden wieder öffnen vereinen löschen

Geschlossen aus folgendem Grund Die Frage wurde beantwortet, die korrekte Antwort als „Akzeptiert“ markiert von Kenji
Abschlussdatum 2015-12-08 10:39:01.749630

2 Antworten

0

geantwortet 2015-12-04 21:15:59 +0200

RobertG Gravatar-Bild

Hallo Kenji,

Ich habe das mangels Beispieldialogs nicht getestet, aber:

ListSource ist ein "array of string"

Gibst Du das an ein Listenfeld in einem Formular weiter, so musst Du bei dem SQL-Code vorher deutlich machen, dass Du den ersten (und einzigen) Stringausdruck weitergibst:

Dim strSQL(0) As String

strSQL(0)="SELECT ""Gattung"" FROM ""aufgaben"" WHERE ""AufgabenID""=" & Selected & ""

Dann geht es weiter zu:

ListBox.ListSource=strSQL

Hier jetzt ohne den Verweis auf den ersten und einzigen Ausdruck des Arrays, sondern auf das gesamte Array bezogen. Die (0) fehlt hier also.

Siehe auch das aktuelle Base-Handbuch. Dort wird bei der Erklärung des Listenfeldes auch ein entsprechender Listenfeldfilter beschrieben.

Gruß

Robert

Bearbeiten Melden löschen Link mehr
0

geantwortet 2015-12-08 10:38:26 +0200

Kenji Gravatar-Bild

Hallo Robert,

erst einmal vielen Dank für die Hilfe. Habe es nun bereits durch mehr ausprobieren geschafft. Es gibt nopch 1-2 Verbesserungen, aber das lässt sich hinbekommen. Für alle die vor demselben Problem stehen:

    GEWOBJ = REDialog.getControl("ListBox1").getSelectedItem()
    Selected = GEWOBJ(i)

    Gattungabfrage = "SELECT ""wert1"" FROM ""column1"" WHERE ""wert2""=" & Selected & ""
    Gattungergebnis = SQL_Anweisung.executeQuery(Gattungabfrage)

    REGattungBox = REDialog.GetControl("ListBox2")

    REGattungBox.removeItems(0, REGattungBox.getItemCount())

    While Gattungergebnis.next
    ListBoxItem=Gattungergebnis.getString(1)
    REGattungBox.additem(ListBoxItem, REGattungBox.ItemCount)
    Wend
Bearbeiten Melden löschen Link mehr

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2015-11-29 11:57:23 +0200

Angesehen: 284 Mal

Aktualisiert: Dec 04 '15