🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

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

Alles zur Programmierung im LibreOffice.
Antworten
Kenji
Beiträge: 16
Registriert: So 29. Nov 2015, 12:03

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

Beitrag von Kenji » So 29. Nov 2015, 12:10

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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

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

Beitrag von F3K Total » So 29. Nov 2015, 12:31

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
Windows 11: AOO, LO Linux Mint: AOO, LO

Kenji
Beiträge: 16
Registriert: So 29. Nov 2015, 12:03

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

Beitrag von Kenji » Di 8. Dez 2015, 10:46

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


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten