Ziel ist es die Auswahlliste des einen Feldes durch die Auswahl des anderen zu begrenzen.
Die Tabelle PersonalVerwendung bildet die m:n Beziehung zwischen den Tabellen Personal und Verwendung. Es soll je nach ausgewählter Verwendung nur noch das Personal ausgewählt werden können das die für die entsprechende Verwendung eingesetzt werden kann.
Bei zwei normalen Listenfeldern ist das kein Problem, da kann ich das über dieses Makro lösen:
Code: Alles auswählen
Sub ListUpdate
Dim oFormular As Object
Dim oPersListe As Object
Dim oVerwListe As Object
Dim sSQL(0) As String
Dim iVerwID As Integer
oFormular = ThisComponent.DrawPage.Forms.getByName("TestForm")
oPersListe = oFormular.getByName("PersListe")
oVerwListe = oFormular.getByName("VerwListe")
iVerwID = oVerwListe.ValueItemList(oVerwListe.selectedItems(0))
sSQL(0) = "SELECT ""Personal"".""Nachname"", ""Personal"".""ID""" + _
" FROM ""Personal"" INNER JOIN ""PersonalVerwendung"" ON ""PersonalVerwendung"".""PersonalID"" = ""Personal"".""ID""" + _
"WHERE ""PersonalVerwendung"".""VerwendungsID"" = " + iVerwID + " ORDER BY ""Personal"".""Nachname"" ASC"
oPersListe.ListSource = sSQL
End Sub
Geht das überhaupt?
Wenn es geht wäre es noch interessant zu wissen ob das auch Zeilenabhängig funktionieren kann.
Randprobleme:
- Warum kann ich ListSource (0) nicht direkt setzten sondern muss den Umweg über einen neuen Array gehen?
- In der obigen Darstellung des Strings ( + _ Trennung) wurde im Tabellenfeld ListSource jede Zeile als einzelnes Array Element gespeichert (dim 3) obwohl vorher auf 0 dimensioniert wurde. Bei normalen Listenfeldern trat das Problem nicht auf.
- Warum gibt es für Listenfelder im Tabellenfeld nicht mehr das ModifiziertEvent (ich weiß nicht, ob man bei StarBasic von Events spricht, weiß aber wohl jeder was ich mein)