Hallo Gerhard,
Schnipsel sind insbesondere in Base nicht ganz einfach zu liefern, weil
da doch die Daten- und Dokumentstruktur mit reinspielt.
Ich habe den folgenden Code an einem Beispiel, das ich sowieso hatte,
ausprobiert. Das enthielt zwei nahezu identische Formular-Dokumente. Ich
nenne so, um Missverständnisse zumindest zu erschweren, das, was man als
"Formular" im Base-Dokument aufruft - in Übereinstimmung mit der
Nomenklatur in UNO: FormDocuments - und was, je nach dem, was man dann
definiert, sich auf viele Tabellen beziehen kann, im Gegensatz zum
Formular innerhalb eines Formular-Dokuments, das genau auf eine Tabelle
(Ansicht, Abfrage) bezogen ist. In diesem Sinn willst du ein zweites
Formular-Dokument aktualisieren, wenn ein erstes verwaltet wird (was
natürlich, wie in deinem Fall, nur sinnvoll ist, wenn es
Überschneidungen in den angezeigten Tabellen gibt).
Meine zwei Formular-Dokumente haben mehrere Formulare, die in einer
Hierarchie zueinander stehen, aber das ist für den Effekt unerheblich,
ich habe nur die Änderung des obersten Formulars (das ein
Tabellen-Kontrollelement für die zugehörige Tabelle enthält) behandelt,
die durch den Code die erneuerte Anzeige des obersten Formulars des
anderen Formulardokuments auslöste (was im Beispiel wiederum ein formal
identisches Tabellenkontrollelement ist).
Das Makro habe ich mit dem Ereignis "Nach der Datensatzaktion" des
obersten Formulars verknüpft.
Sub RefreshSecondForm (evt as object)
dim oDoc as object, oDBDoc as object, oSecondFormDoc as object, mainForm
as object
oDoc = ThisComponent
oDBDoc = oDoc.Parent
oSecondFormDoc = oDBDoc.FormDocuments.getByName("???1").open
'activates form doc, if already open
mainForm = oSecondFormDoc.DrawPage.Forms.getByIndex(0) 'or
getByName("???2")
mainForm.reload
end sub
Der Parent des Formular-Dokuments, in dem die Änderung passiert, ist das
Base-Dokument, das weitere Formular-Dokumente enthält, aus denen wir
dasjenige wählen, das wir aktualisieren wollen. Das Dok. wird
"geöffnet", was bei einem bereits geöffneten nur die Auswahl des
Objekts bedeutet. Dann können wir wie gewohnt das Fomular wählen - im
Code über den Index, weil es nur ein oberstes gibt. reload erneuert die
Anzeige.
Da gibt es sicher noch ein paar Dinge zu überlegen, die aber von der
konkreten Struktur deiner beiden Formular-Dokumente abhängen, die ich ja
nicht kenne. Beispielsweise könnte bei einem aufwändigeren
Formular-Dokument die Änderung auch nur in einem Unterformular
passieren, dann müsste da beim gleichen Ereignis im Unterformular ein
ähnlicher Code aufgerufen werden, der aber dann wohl ein anderes
Formular im sekundären Formular-Dokument reloaden müsste.
Der Befehl reload beginnt mit der Anzeige wieder beim ersten Satz, egal
wie im sekundären Formular-Dokument gerollt war und wo der Cursor stand.
Man könnte, denke ich, das Formular auch wieder so positionieren wie vor
dem Reload, wenn man sich die Position merkt, aber das habe ich nicht
ausprobiert.
Es könnte auch einen Unterschied bedeuten, wenn das Formular im
sekundären Formular-Dokument nur einen einzelnen Satz anzeigt, da könnte
das Repositionieren noch wichtiger sein.
Das wirst du sicher selber lösen können, du scheinst ja doch einiges auf
diesem Gebiet zu wissen.
Übrigens: dein
oDATEN = thisComponent.Drawpage.Forms.DATEN
kann ja wohl kein echter Befehl sein, sondern nur exemplarisch gemeint.
DATEN gibt es unter ...Forms nicht, und wenn, müsste es ja wohl eine
einzelne Form sein, zu der es Daten gibt.
Wenn du das Beispiel-Dokument haben willst, melde dich, ich schicke es
dir dann direkt, in der Liste kann man keine Anhänge verwenden.
Gruß
Gerhard
Am 21.06.2017 um 13:44 schrieb Gerhard Dittrich:
Vielen Dank, Gerhard für Deine Hinweise!
Hast Du vielleicht ein Code-Schnipsel parat, so dass ich versuchen
kann, den "Weg" anhand des Code-Schnipsels zu rekonstruieren?
Grüße
Gerhard
Am 21.06.2017 um 11:21 schrieb Gerhard Weydt:
Hallo Gerhard,
was ich vergessen habe: anschließend das Formulardokument mit
getByName("xxx").open aktivieren, dann hast du den Zugriff.
Am 21.06.2017 um 10:36 schrieb Gerhard Weydt:
Hallo Gerhard,
über ThisComponent.Parent.FormDocuments kannst du auf die anderen
Formulardokumente zugreifen.
Ich benutze immer Xray, um so etwas zu finden, und probiere einfach
vielversprechende Eigenschaften und Methoden aus.
Gruß
Gerhard
Am 21.06.2017 um 09:02 schrieb Gerhard Dittrich:
Guten Morgen,
ich arbeite mit Base.
Zwei Formulare sind geöffnet. Diese beiden Formulare greifen auf
den selben Datenbestand zu, nur anders dargestellt.
Ändere ich in dem einen (ERSTEN) Formular Daten, und klicke in der
Menü-Leiste ich auf das andere (ZWEITE) bereits in der Anwendung
geöffnete Formular, rückt es als aktives in den Vordergrund). Die
Daten werden jedoch nicht aktualisiert dargestellt. (Ich müsste
also zusätzlich einen AKTUALISIEREN-BUTTON im ZWEITEN Formular
klicken).
Einfach wäre es, wenn ich im Rahmen der Datenmanipulation im ERSTEN
Formular (diese läuft über ein Dialogfenster) zugleich per Makro
anweisen könnte, dass das nicht aktive Formular ebenfalls
aktualisiert wird.
Dazu müsste ich aber das NICHT-AKTIVE ZWEITE Formular ansteuern
können.
Ich kenne aber nur den Befehl "thisComponent". Dieser führt
natürlich nur auf das aktive ERSTE Formular.
Bei mir zum Beispiel: oDATEN = thisComponent.Drawpage.Forms.DATEN
Natürlich könnte ich das ZWEITE Formular per Makro schließen lassen
und dann wieder öffnen. Dann würde das ZWEITE Formular automatisch
aktualisiert. Diesen Weg möchte ich aber nicht beschreiten.
Grüße
Gerhard Dittrich
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.