Seite 1 von 1

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

Verfasst: So 29. Nov 2015, 12:10
von Kenji
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:

Code: Alles auswählen

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

Code: Alles auswählen

 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

Re: Wie fülle ich eine Listbox in Abhängigkeit einer anderen (Dialog)?

Verfasst: So 29. Nov 2015, 12:31
von F3K Total
Hi,
du verwendest anscheinend eine Listbox, die in einem Dialog liegt und daher nicht an eine Datenbank gebunden ist. Diese Listbox hat nicht die Möglichkeit SQL-Code zur Füllung zu verwenden, ListSourceType=com.sun.star.sdb.ListSourceType.SQL funktioniert hier nicht. Das ginge in einem Formular.
Daher mußt du die zweite Listbox füllen wie die erste, ungetestet, etwa so:

Code: Alles auswählen

  
    ListBox2 = Event.Source.Model.Parent.getByName("ListBox2")
    Objektabfrage =  "SELECT ""Gattung"" FROM ""aufgaben"" WHERE ""AufgabenID""=" & Selected & ""
    Objektergebnis = SQL_Anweisung.executeQuery(Objektabfrage)
    REObjektBox = REDialog.GetControl("ListBox2")
    REObjektBox.removeItems(0, REObjektBox.getItemCount())
    While Objektergebnis.next
        ListBoxItem=Objektergebnis.getString(1)
        REObjektBox.additem(ListBoxItem, REObjektBox.ItemCount)
    Wend
Gruß R

Re: Wie fülle ich eine Listbox in Abhängigkeit einer anderen (Dialog)?

Verfasst: Di 8. Dez 2015, 10:46
von Kenji
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:

Code: Alles auswählen

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