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

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

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

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