Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: datekk am November 16, 2015, 09:27:30

Titel: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 09:27:30
Hallo mal wieder... Ich nutze für verschiedene Kontaktarten unterschiedliche Formulare. Alle Formulare beinhalten ein UFO in dem ein HistorienBERICHT angezeigt wird. Mit klick auf eine Schaltfläche im HaFo öffnet sich ein Fenster im Dialogmodus, mit dem ich einen Historieneintrag hinzufügen kann. Mit einer dortigen Schaltfläche "Speichern" wird das Fenster geschlossen. Nun soll das HaFo aktualisiert werden.

Das Historien-Eingabeformular öffne ich wie folgt:

DoCmd.OpenForm "frm_Historie", acNormal, , , acFormAdd, acDialog
DoCmd.RefreshRecord

Bei einer Neueingabe/Hinzufügen eines Historienvorfalls wird im Anschluss das HaFo aktualisiert und der neue Eintrag sichtbar... Alles gut soweit.

Nur bei Änderungen gelingt es mir nicht, das Formular wie oben zu aktualisieren. Änderungen werden so vorgenommen, dass ich direkt auf einen Vorfall im Bericht im UFO klicke. Darauf hin öffnet sich wieder das Historien-Eingabefenster im Dialogmodus mit dem entsprechenden Datensatz. Klicke ich nach Änderungen auf Speichern wird das Eingabefenster geschlossen, aber das HaFo nicht aktualisiert weil ich nicht weis, wie ich dies anstellen soll. Bisher konnte ich dies bewerkstelligen indem ich beim klicken auf Speichern den Befehl Forms!Formularname.Refresh angewendet habe.

Nach einer Umstellung meiner Datenbank werden nun aber diese Historienvorfälle in verschiedenen Formularen eingebunden. Das heißt dass der Pfad zum HaFo ja jedes mal anders ist weil die Formulare unterschiedliche Namen haben.

Gibt es eine Möglichkeit beim Klick in den Bericht den Namen des Parent Formulars in einer Variable zu speichern und dann den Refresh Befehl damit auszulösen? Also beispielsweise Forms!v_Formularname.Refresh?

Freue mich auf Hilfe.
LG
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: MaggieMay am November 16, 2015, 10:02:02
Hi,

du kannst den Formularnamen beim Öffnen des Dialogformulars als OpenArgs-Parameter übergeben.

Der Refresh- (oder Requery-?!) Befehl sähe dann so aus
Forms(Me.OpenArgs).Refresh
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 16, 2015, 10:03:31
Hallo,

warum?

schreib doch gleich im Berichts-Klick-Ereignis:
.
DoCmd.OpenForm "frm_Historie", acNormal, , , , acDialog
Me.Parent.Refresh
.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 10:21:53
@MaggiMay: wie übergebe ich das in die OpenArgs? Wie gesagt befindet sich im HaFo ein UFO. In diesem wird ein Bericht angezeigt. Klickt man auf eine Datenzeile im Bericht, so öffnet sich das Fenster wo ich die Änderungen vornehmen kann. Mit Klick auf die Zeile im Bericht muss irgendwie der Name des HaFo übergeben werden.. aber wie?

@DF6GL: Dies brachte keine Änderung. Auch me.requery führte zu null Ergebnis.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 16, 2015, 10:31:55
Hallo,

ok, dann wirkt sich refresh vermutlich nicht auf das UFO/UBR aus..

Versuch:

Me.Parent!NamedesUFoSteuerelementes.Refresh

könnte sein, dass das aber nicht auf einen Bericht anwendbar ist...

Es muss dann das HFO mit Requery neu eingelesen  und auf den vorherigen (aktuellen) positioniert werden (oder  gleich auf den Bericht angewendet werden)
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 10:36:51
Was mich wundert ist, dass die Aktualisierung des Berichts im UFO hervorragend klappt wenn ein neuer Datensatz eingegeben worden ist..

Wenn ich aber einen bestehenden ändere, wird der Bericht nicht aktualisiert... Könnte es daran liegen, dass ich bei Klick auf die Schaltfläche im Änderungsformular einfach nur docmd.close ausführe? Ich habe davor noch docmd.save gesetzt, aber auch hier keine Änderung.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 16, 2015, 10:42:01
Hallo,
nein, daran liegt es nicht....


Beim Schließen eines Forms wird der aktuelle DS im Änderungsfall gespeichert.
Docmd.Save allerdings hat keine DS-Speicherung zur Folge, sondern speichert nur vorgenommene Änderungen am Formular selber.

Besser ist:

Me.Dirty=False
oder
Runcommand acCmdSaverecord

Hast Du den letzten Vorschlag mal probiert?
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 11:13:48
Ja habe ich. Ich erhalte die Fehlermeldung dass das Objekt die Eigenschaft nicht unterstützt.

Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 16, 2015, 11:25:17
Hallo,

ja, hatte ich schon vermutet.

Kannst Du mal eine Beispiel-DB hier hochladen?

PS: Warum benutzt Du einen Bericht als UFO/UBR?
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: MaggieMay am November 16, 2015, 12:30:44
Hi,
Zitatwie übergebe ich das in die OpenArgs?
schau dir die Syntax des OpenForm-Befehls in der Access-Hilfe an.

Das Aktualisieren könntest du noch hiermit versuchen:
Me.Requery
und zwar direkt im Anschluss an das Öffnen des Dialogformulars aus dem Unterformular heraus.

Und was das betrifft:
Me.Parent!NamedesUFoSteuerelementes.[color=red]Refresh[/color]
so ist die Refresh-Methode nicht auf Steuerelemente sondern nur auf Formulare anwendbar.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 12:42:37
@ MaggieMay: Mit ist schon klar wie die OpenArgs geschichten laufen.. aber wie gebe ich den Formularnamen weiter? Wie lese ich den aus? Es muss ja der Name des HaFo vom UFO/UBR ausgelesen werden. Ich weiß nicht wie das geht.

me.requery hab ich auch schon probiert.. geht nicht..

Warum aktualisiert der Bericht bei neuen Datensätzen aber nicht bei Änderungen bestehender?
Grrrrr......

Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: MaggieMay am November 16, 2015, 13:01:01
Mit "Me.Parent.Name" kommst du an den Namen des Hauptformulars.

Aber ich denke auch es wäre das beste, wenn du mal eine Demo-DB (nur mit den notwendigen Objekten und ein paar Testdaten!) hochladen könntest, damit man sich das mal mit eigenen Augen anschauen kann.

Zitatgeht nicht..
...heißt was genau?
Hat das HF eine Datenquelle und ist es mit dem UF verknüpft?
Worauf bezieht sich die Änderung, sind Verknüpfungsfelder davon betroffen?
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 13:02:59
Nein... das wars.. Danke MaggieMay... Das hat geholfen. Ich habe Deine erste Idee weiterverfolgt und gegoogelt und soeben selbst auf me.parent.name gekommen. Damit funzt es :)

Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 16, 2015, 13:12:24
Hallo,


hatte ich ja angemerkt...


und eine Requery-Lösung:
Me.Parent!NamedesUFoSteuerelementes.Requery

Die meisten Methoden eines Forms/Berichtes werden auch dem UFO-Steuerelement "vererbt".
Insofern funktioniert
Me.Parent!NamedesUFoSteuerelementes.Requery
genauso wie
Me.Parent!NamedesUFoSteuerelementes.Report.Requery
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: datekk am November 16, 2015, 13:56:44
Ihr seid die Besten.. Vielen Dank :)
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: Xoar am November 19, 2015, 15:56:19
Hallo, da ich noch nicht so ganz verstehe wie das alles abläuft, hier eine Frage:
Kann ich über diesen Befehl auch Frontend Formulare aktualisieren?

Bsp:
1 Frontendformular auf 12 Rechner(jeweils lokal), 1 Backenddatenbank auf dem Server.
Rechner 1 ändert ein Datensatz und soll jetzt als (pushnachricht) den in der Backenddatenbank geänderten Datensatz bei allen anderen 11 Frontendformularen verändert anzeigen.

Zur Zeit wird das über einen Timer mit "me.refresh"-Befehl bei dem Frontendformular gemacht.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: DF6GL am November 19, 2015, 17:27:20
Hallo,

ich bezweifle, ob ein Refresh eines Formulars in einer fremden lokalen Frontend-Datei so möglich ist.  Das "FE"-Formular muss selbst für seine  Aktualisierung sorgen, und genau das passiert  durch "Me.Refesh"
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: MaggieMay am November 20, 2015, 13:33:08
Hi,

du müsstest auf das geöffnete Frontend auf den anderen Rechnern zugreifen, was vermutlich (bzw. hoffentlich) gar nicht möglich sein wird.
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: bahasu am November 20, 2015, 17:24:13
Hi,
Zitat von: MaggieMay am November 20, 2015, 13:33:08
Hi,

du müsstest auf das geöffnete Frontend auf den anderen Rechnern zugreifen, was vermutlich (bzw. hoffentlich) gar nicht möglich sein wird.

doch, ist mit genügend API möglich, auf eine geöffnete db zuzugreifen.
War u.a. diskutiert in: http://www.access-o-mania.de/forum/index.php?topic=15945.msg92210#msg92210

Halte aber dieses Vorgehen nicht für notwendig, da Franz und xoar bereits den einfacher realisierbaren Weg beschrieben haben.

Harald
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: MaggieMay am November 20, 2015, 17:34:36
Es geht ja nicht allein darum, auf eine geöffnete DB zuzugreifen, die DB befindet sich lokal auf diversen Rechnern und du willst doch sicher nicht ernsthaft in Erwägung ziehen, diese Rechner alle für den Netzzugriff freizuschalten?
Titel: Re: Refresh eines anderen Formulares über Variable möglich?
Beitrag von: Xoar am November 23, 2015, 19:17:41
Jo ok. Lassen wir es beim Timer.

Danke für die Auskunft