Seite 1 von 1

Makro wird scheinbar nicht vollständig ausgeführt

Verfasst: Do 10. Sep 2020, 11:38
von Sven J.
Guten Tag zusammen.
Als relativer Neuling in Sachen Datenbanken (vo ca. 10 Jahren etwas Access für Weiterbildung) habe ich mich an den offiziellen Handbüchern mit einer eigenen DB entlang gehangelt um wieder rein zu kommen.
Jetzt hake ich beim aktualisieren eines Unterformulars nach der Auswahl des übergeordneten Datensatzes per Listenfeld.
Im Formularhandbuch wird das Unterformular über einen Button mit "Aktion - Formular aktualisieren" mit den entsprechenden Daten gefüllt.
Jetzt zur Frage: Ich möchte dies nicht durch den Button realisieren, so das ich mir folgendes Makro geschrieben habe das bei "Ereignisse - Modifiziert" des Listenfeldes ausgeführt wird.

Code: Alles auswählen

Sub aktualisieren
Dim oDoc AS OBJECT
Dim oDrawpage AS OBJECT
Dim oForm, oSubForm AS OBJECT

oDoc = thisComponent
oDrawpage = oDoc.drawpage
oForm = oDrawpage.forms.getByName("frmFilter_Objekt")
oSubForm = oForm.getByName("sfrmRaeume")
oSubForm.Reload

End Sub

Das Makro funktioniert Grundsätzlich, aktualisieren findet aber nicht statt. Wenn ich das Makro aber an den Button unter "Ereignisse - Aktion ausführen" anhänge, funktioniert das aktualisieren (Aktion unter "Allgemein" ist natürlich auf "Keine" gesetzt)

Das Listenfeld gehört zum Hauptformular (frmFilter_Objekt). der Button zum Unterformular (sfrmRaeume).
Habe ich da evtl. etwas mit der Hierarchie der Formulare nicht beachtet?


Danke für euer Feedback.

Re: Makro wird scheinbar nicht vollständig ausgeführt

Verfasst: Do 10. Sep 2020, 15:55
von RobertG
Hallo Sven,

die Anwendungen im Handbuch nutzen den Aktualisierungsbutton für 2 Zwecke: Zuerst wird über das Verlassen des Filterformulars der Filterwert gespeichert. Das geschieht durch den Klick auf einen Button in einem anderen Formular. Dann erst aktualisiert dieser Button das Formular, in dem erliegt.

Wenn in dem Listenfeld etwas ausgewählt wird und dies den Inhalt des Unterformulars beeinflussen soll, so muss der Inhalt des Listenfeldes zuerst gespeichert werden. Vermutlich in Deinem Makro durch

Code: Alles auswählen

oForm.UpdateRow
bevor das Unterformular mit der letzten Zeile des Makros aktualisiert wird.

Gruß

Robert

Re: Makro wird scheinbar nicht vollständig ausgeführt

Verfasst: Fr 11. Sep 2020, 10:51
von Sven J.
Hallo Robert,
danke für den Hinweis. Leider hat sich am Verhalten des Makros damit nichts geändert. Beim probieren wird es sogar noch rätselhafter:
Aufruf über Listenfeld - mit Ereignis "modifiziert" oder "Aktion ausführen" wird das Unterformular NICHT aktualisiert.

Wenn ich das selbe Makro aber über das Ereignis "bei Fokusverlust" ausführe, wird das Unterformular aktualisiert. Aber auch nur, wenn ich ein anderes Steuerelemt ansteuere. Wenn ich auf das Formular klicke, geschieht wiederum nichts.

Ich habe die Datei mal angehängt.

Gruß Sven
Muster.zip
(19.19 KiB) 111-mal heruntergeladen

Re: Makro wird scheinbar nicht vollständig ausgeführt

Verfasst: Fr 11. Sep 2020, 17:11
von RobertG
Hallo Sven,

die angehängte Datei kann ich zwar bearbeiten. Sobald ich aber ein Formular öffne und bearbeite kann ich nicht erneut darauf zugreifen. Da wäre es für mich schon einmal wichtig, mit welcher Version Du das erstellt hast. Die ersten Vorversionen von LO 7 hatten da einen Bug, der bei der Formularbearbeitung älterer Versionen so etwas ähnliches produzierte.

Versuche einmal folgendes:

Code: Alles auswählen

oField = oForm.getByName("lstObjekte")
oField.BoundField.UpdateLong(oField.currentValue)
oForm.updateRow
oForm.Reload
... und binde das Makro an das Ereignis "modifiziert". Es scheint so, dass allein mit dem Klick auf ein Listenfeld nicht der Wert bereits in die Tabelle geschrieben wird. Das ist auch daran zu sehen, dass mit updateRow ohne den Zugriff auf das Feld nichts in der Tabelle geändert wird.

Den direkten Zugriff bekommst Du übrigens so:

Code: Alles auswählen

SUB Aktualisieren(oEvent AS OBJECT)
	DIM oField AS OBJECT
	DIM oForm AS OBJECT
	oField = oEvent.Source.Model
	oField.BoundField.UpdateLong(oField.currentValue)
	oForm = oField.Parent
	oForm.updateRow
	oForm.Reload
END SUB
Gruß

Robert

Re: Makro wird scheinbar nicht vollständig ausgeführt

Verfasst: Mo 14. Sep 2020, 08:30
von Sven J.
Hallo Robert,
so fängt eine Woche doch gut an :D!
Es läuft jetzt, auch mit dem direkten Zugriff.

Die DB habe ich mit 7.0.0.3 (Portable, aber das sollte ja keinen Unterschied machen) erstellt.

Schöne Woche noch!

Sven