Auswahlliste ohne Programmierkenntnisse
Verfasst: Di, 20.11.2007 16:20
Hier möchte ich euch zeigen wie man auch ohne Programmerkenntnisse eine Auswahlliste für ein Formular erstellen kann. In MS Access gibt es ähnliche Lösungen mit Assistenten das Ergebnis ist aber auch ein Makro das von einer Auswahlliste aufgerufen wird. Absolute Kontrolle über das Datenbank Frontend bekommt man aber nur mit Programmierung. Egal ob Basic, Access oder eine andere.
Dieses Beispiel habe ich auf der Webseite http://www.arielconstenlahaile.com.ar/ooo/index.php von Ariel Constenla Haile aus Argentinien gefunden. Dort gibt es mehrere sehr gute Beispiele wie man Daten filtern kann.
Eine Kundenliste mit über 1000 Einträgen in eine solche Liste zu lesen ist nicht nur langsam sondern sicher auch nicht all zu praktisch für den Anwender.
Ich gehe davon aus, dass das Formular das wir filtern möchten schon existiert. Wir öffnen es in Designmode und fügen eine ListBox mit dem Assistenten ein. ACHTUNG: Sollte das Formular ein Subformular enthalten muss darauf geachtet werden das die liste wirklich im Hauptformular eingefügt wird.
Im ersten Fenster suchen wir die gleiche Tabelle aus die wir auch für unser Formular benützen. Danach suchen wir das Feld aus das in der Liste zu sehen sein soll. Danach auf beiden Seiten das gleiche Feld, auf das wir auch den Filter anwenden möchten, sollte der Primärschlüssel sein.
Der nächste Schritt ist diesen Code in das Makro des Formulars einzufügen.
Unter EXTRAS > Makros > Makros organisieren> OpenOffice.org Basic finden wir unser Formular mit einem Klick auf das Kreuz neben dem Formularnamen öffnen sich die Basic Bibliotheken wir markieren Standard und Neues. Es öffnet sich der Basic Editor wo wir den obigen Code hinein kopieren.
Fehlt nur noch die Verknüpfung der liste mit dem Makro. Das Formular zum bearbeiten öffnen die Liste markieren, in den Eigenschaften > Ereignisse > Status geändert das Makro aufrufen.
Hier wird nicht wie bei der Access Auswahlliste ein findFirst von einem recordset verwendet sondern ein Filter auf das Formular angewendet. Es wird nur noch der ausgesuchte Datensatz angezeigt. Wollen wir wider alle Daten sehen können wir den Filter in der Navigationsleiste wider aufheben. Beim ausprobieren dieses Beispiels im Bearbeitungsmodus wird manchmal der Filter auch gespeichert und muss dann wider gelöscht werden.
Achtung: Dieser Code gibt kein Resultat wenn er direkt im Makro Editor aufgerufen wird.
Achtung: In Ooo Base 2.3 werden manchmal die Makros nicht gefunden sowohl in Windows XC, als auch in Kubuntu. Ich habe bis jetzt noch keine Lösung gefunden.
Dieses Beispiel habe ich auf der Webseite http://www.arielconstenlahaile.com.ar/ooo/index.php von Ariel Constenla Haile aus Argentinien gefunden. Dort gibt es mehrere sehr gute Beispiele wie man Daten filtern kann.
Eine Kundenliste mit über 1000 Einträgen in eine solche Liste zu lesen ist nicht nur langsam sondern sicher auch nicht all zu praktisch für den Anwender.
Ich gehe davon aus, dass das Formular das wir filtern möchten schon existiert. Wir öffnen es in Designmode und fügen eine ListBox mit dem Assistenten ein. ACHTUNG: Sollte das Formular ein Subformular enthalten muss darauf geachtet werden das die liste wirklich im Hauptformular eingefügt wird.
Im ersten Fenster suchen wir die gleiche Tabelle aus die wir auch für unser Formular benützen. Danach suchen wir das Feld aus das in der Liste zu sehen sein soll. Danach auf beiden Seiten das gleiche Feld, auf das wir auch den Filter anwenden möchten, sollte der Primärschlüssel sein.
Der nächste Schritt ist diesen Code in das Makro des Formulars einzufügen.
Code: Alles auswählen
Sub Main(oEvent)
Dim oModelo, oForm
Dim sCampo$, iItemSeleccionado%, sValorSelecc$, sFiltro$
oModelo = oEvent.Source.Model
sCampo = oModelo.DataField
iItemSeleccionado = oModelo.SelectedItems(0)
sValorSelecc = oModelo.ValueItemList(iItemSeleccionado)
oForm = oModelo.Parent
sFiltro = sCampo + "=" + sValorSelecc
oForm.updateRow()
oForm.Filter = sFiltro
oForm.ApplyFilter = True
oForm.reload()
End Sub
Fehlt nur noch die Verknüpfung der liste mit dem Makro. Das Formular zum bearbeiten öffnen die Liste markieren, in den Eigenschaften > Ereignisse > Status geändert das Makro aufrufen.
Hier wird nicht wie bei der Access Auswahlliste ein findFirst von einem recordset verwendet sondern ein Filter auf das Formular angewendet. Es wird nur noch der ausgesuchte Datensatz angezeigt. Wollen wir wider alle Daten sehen können wir den Filter in der Navigationsleiste wider aufheben. Beim ausprobieren dieses Beispiels im Bearbeitungsmodus wird manchmal der Filter auch gespeichert und muss dann wider gelöscht werden.
Achtung: Dieser Code gibt kein Resultat wenn er direkt im Makro Editor aufgerufen wird.
Achtung: In Ooo Base 2.3 werden manchmal die Makros nicht gefunden sowohl in Windows XC, als auch in Kubuntu. Ich habe bis jetzt noch keine Lösung gefunden.