Seite 1 von 1

Listenfeld programmieren/erweitern

Verfasst: Do 3. Okt 2024, 14:00
von Helles58
Hallo zusammen,

ich habe mit folgedem Makro einListenfeld eingestellt:
Sub DS_suchen_3'benötigt
Dim oForm, oListbox As Object
Dim LB_Item as integer
oForm = ThisComponent.drawpage.forms.getbyindex(0)
oListbox = oForm.getByName("Firma_suchen")
LB_Item = oListbox.SelectedItems(0)
nKundenNummer = oListbox.ValueItemList(LB_Item)
oform.filter = """Kunden-Nr"" = "+nKundenNummer
oform.Reload
oform.filter = ""
End Sub

Listenfeld Inhalt ist:
SELECT "Firma" || ', ' || "Postleitzahl" || ', ' || "Ort", "Kunden-Nr" FROM "T_Master_Adressen" WHERE ( "kein_Bedarf" = 0 AND "Löschen" = 0 AND "Insolvent" = 0 OR "kein_Bedarf" IS NULL AND "Löschen" IS NULL AND "Insolvent" IS NULL ) AND LOWER("Firma" || ') LIKE 'a%' ORDER BY "Firma" || '

Funktioniert soweit, möchte aber gern 2 Dinge noch daran verbessern.

1. Wenn das Formular aufgerfufen wird kann noch durch die DS mit den
Navigationstasten geblättert werden. Nach dem erstmaligen benutzen(aktualisieren) des Listenfeldes geht das nicht
mehr.
Wie kann man das beheben?

2. Bei vielen DS wird die Listenfeldanzeige unübersichtich und ich würde das gern die Eingabe begrenzen.
Kann man dazu das Makro aus dem Handbuch ohne Änderung verwenden? Wenn ja, wie muss dann der Listeninhalt
definiert und/oder das Listenfeld eingestellt werden?

BIn dankbar für jeden Tip

VG Helles58

Re: Listenfeld programmieren/erweitern

Verfasst: Do 3. Okt 2024, 19:25
von RobertG
Zuerst einmal: Den Wert, den Du aus einer Listbox auslesen willst, bekommst Du einfacher über oListbox.CurrentValue() - es sei denn, Du nutzt AOO. Da war der Doppelschritt von Dir notwendig.

Du setzt einen Filter für ein Formular und lädst das Formular neu. Danach entfernst Du den Filter wieder - warum? Du kannst den Filter doch im Formular selbst an- und ausschalten.

Gibt es denn bei dem gefilterten (und noch gültigen) Filter mehrere Datensätze, so dass Du mit den Navigationstasten blättern könntest?

Zu dem Code für das Listenfeld: Da blicke ich zum Schluss des Codes nicht mehr durch. Vermutlich ist das ja nicht alles, weil Du da hinter die Firmenbezeichnung eine Concat-Zeichen und ein Hochkomma einsetzt. Wozu da LIKE 'a%' steht ist mir auch unklar. Wenn Du sowieso nur den ersten Buchstaben willst: LEFT("Firma",1) = 'a' dürfte deutlich schneller laufen als eine LIKE-Bedingung. Natürlich kannst Du für die Anzeige ein Limit setzen, nur kommst Du dann an bestimmte Datensätze nie mehr dran.

Re: Listenfeld programmieren/erweitern

Verfasst: Sa 5. Okt 2024, 16:15
von Helles58
Hallo Robert,

danke für die Beantwortung.
Ich habe mein Fehler auch gefunden.
Wenn das Formular aktualisiert wird und der Focus auf dem Listenfeld bleibt kommt eine Fehlermeldung beim betätigen der Navigationstasten, wenn er auf einem anderem Feld liegt nicht.
Wie immer ein User Fehler wieder.
Ich versuche jetzt mal eine neues Formular mit dem Makro für die Beschränkung der Anfangsbuchstaben des LF aus dem Handbuch zu erstellen.
Wünsche dir ein frohes Wochende

Gruß Helmut