BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Kombinatiionsfeld aktualisieren

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Kombinatiionsfeld aktualisieren

Beitrag von elefantino » So 2. Jan 2022, 11:37

Hallo zuerst mal allen ein gutes neues Jahr.

ich habe ein Formular mit 15 Kombinationsfeldern, deren Inhalt an eine Tabelle gebunden ist. Wenn ich die Tabelle ändere (in einem sep. Formular) sollen die Kombinationsfelder den neuen Inhalt sofort übernehmen.
Wenn ich einen Butten mit der Aktion "Formular aktualisieren" erstelle, und diesen drücke funktioniert das auch.
Schöner wäre es allerdings, wenn ich keinen Button drücken müsste.
Nun habe ich ein Makro gemacht, welches ich allerdings für alle 15 Felder machen müsste - sehr umständlich:

Code: Alles auswählen

sub PosFelderAktualisieren
rem Wird ausgeloest bei Fokuserhalt auf die Positionsfelder, damit die Tabelleneinträge übernommen werden.
rem define variables
	oFORM = thisComponent.Drawpage.Forms.getByName("Besitzer").getByName("SubFormRechnung")

	oPos1 = oForm.getByname("Pos01")
	oPos1.refresh

	oPos2 = oForm.getByname("Pos02")
	oPos2.refresh

end sub
Nun habe ich in anderen Posts (von RobertG: https://ask.libreoffice.org/t/formular- ... au/58376/6) auch schon die Lösung gefunden, in der die Aktion "Formular aktualisieren" als Makro mitgeschnitten wurde - leider funktioniert das bei mir nicht:

Code: Alles auswählen

SUB Refresh
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:Refresh", "", 0, Array())
end sub
Kann mir da jemand helfen ?

LibreOffice 6.4.7.2, Win7/10

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Kombinatiionsfeld aktualisieren

Beitrag von F3K Total » So 2. Jan 2022, 12:40

Moin,
  • um dein bereits geöffnetes Formular mit den Kombinationsfeldern nach Änderung der Tabelle in einem anderen Formular neu zu laden, müsste folgendes Makro funktionieren:

    Code: Alles auswählen

    sub Formular_Besitzer_neu_Laden
    	oFORM = thisDatabaseDocument.FormDocuments.GetByName("NAME_DES_FORMULARES").Component.Drawpage.Forms.getByName("Besitzer")
    	oFORM.reload
    end sub
    Hier muss NAME_DES_FORMULARES durch des Namen des Formulardokuments in der Base-Oberfläche ersetzt werden.
    Siehe Bild, hier wäre es z.B. Adressenverwaltung:
    FR.png
    FR.png (17.46 KiB) 1152 mal betrachtet
    So kannst du aus einem anderen Formular das gewünschte aktualisieren.
  • Eine weitere Möglichkeit ist es, ein Makro an das Ereignis Dokument aktivieren
    des Kombinationsfeldformulares zu hängen, dies müsste dann so lauten
    FR2.png
    FR2.png (29.61 KiB) 1149 mal betrachtet
    :

    Code: Alles auswählen

    sub Reload_on_Document_activated
        oFORM = thisComponent.Drawpage.Forms.getByName("Besitzer")
        oFORM.reload
    end sub
    Diese Lösung hat aber den Nachteil, dass das Formular immer dann, wenn du es in den Vordergrund holst, aktualisiert wird, also vielleicht auch, wenn du dies gerade nicht benötigst.
Letztendlich musst du selbst entscheiden, wie oder von wo du das Makro auslösen möchtest. Es gibt zig Möglichkeiten.
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: Kombinatiionsfeld aktualisieren

Beitrag von elefantino » So 2. Jan 2022, 13:28

Danke FK3 für die schnelle Antwort.
Funktioniert leider nicht...
reload hatte ich auch schon versucht. Ich habe zum Testen mal einen Button gemacht, der das Makro auslöst, um sicher zu sein, dass es auch auslöst. Ohne erfolg.
Meine "Lösung" über refresh habe ich übrigens an den Button gehängt, der das Formular mit der Tabelle aufruft - bei Fokusverlust wird das Makro ausgeführt. Das funktioniert auch, scheint mir aber nicht die richtige saubere Lösung zu sein, da ich alle 15 Kombinationsfelder refreshen müsste ...

Vielleicht gibts noch eine andere Lösung ?

Danke schon mal...

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: Kombinatiionsfeld aktualisieren

Beitrag von F3K Total » So 2. Jan 2022, 13:50

dann versuche es mal hiermit:

Code: Alles auswählen

sub Reload_on_View_reactivated
    oFORM = thisComponent.Drawpage.Forms.getByName("Besitzer").getByName("SubFormRechnung")
    for i = 0 to oForm.count - 1
    oControl = oForm.getbyindex(i)
    if oControl.SupportsService("com.sun.star.awt.UnoControlComboBoxModel") then'Kombinationsfelder heraussuchen
       oControl.refresh
    endif
    next i
end sub
Windows 10: AOO, LO Linux Mint: AOO, LO

elefantino
Beiträge: 19
Registriert: Do 20. Mär 2014, 09:11

Re: Kombinatiionsfeld aktualisieren

Beitrag von elefantino » So 2. Jan 2022, 14:26

SUPER ! FUNKTIONIERT ! VIELEN DANK ! Einen schönen Sonntag noch !

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Kombinatiionsfeld aktualisieren

Beitrag von RobertG » So 2. Jan 2022, 16:31

Der Vorteil der UNO-Methode liegt allerdings darin, dass er direkt das Formular neu einliest, auf den aktuellen Datensatz springt und alle Felder, die sich aktualisieren lassen (Listboxen und Comboboxen), ebenfalls aktualisiert. Entscheidend ist natürlich dabei, an welcher Stelle das Makro denn in das entsprechende Formular eingebaut wird.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten