Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Unterformular nach Ereignis im Navigationsformular aktualisieren?

Begonnen von Ocrim, Januar 26, 2015, 12:10:35

⏪ vorheriges - nächstes ⏩

Ocrim

Hallo Leute,

Ich brauche dringend eure Hilfe!
Also erstmal kurz was ich genau machen will und dann meine Probleme..

Ich habe ein Navigationsformular erstellt und dort Formulare eingebunden.Diese Formulare sind Endlosformualre und basieren auf Abfragen.
Jeder dieser Abfragen hat ein Ja/Nein Feld, welches Standardmäßig auf "Nein" gestellt ist.
Soviel erstmal zum Navigationsformular.

Dann hab ich noch ein Unterformular welches auf eine Abfrage basiert, welche die Ja/Nein Felder ausließt und nur die "Ja" Felder anzeigt.

Das heißt: Im Unterformular werden die Datensätze angezeigt bei denen ein Haken im Navigationsformular geklickt wurde.

Jetzt kommen wir zu meinen Problemen:
1. Wie schaffe ich es das sich das Unterformular automatisch aktualisiert, sobald im Navigationsformular ein Ja/nein" Feld geklickt wird?
2. Ich würde gerne die Anzhal an auswählbaren Ja/Nein Felder begrenzen, das heißt sobald mehr als 3 Felder auf "Ja" stehen sollen keine weiteren mehr auswählbar sein.


Zu 1.:
Hab schon folgendes probiert:
Beim Verlassen des Navigationsformulars

Forms![frmHauptformular]![frmUnterformular].Form.Requery

Leider wird das Unterformular erst beim klicken im Detailbereich aktualisiert. Es gibt auch nur die Ereignisse "Beim Hingehen" und "Beim Verlassen". Deshalb weiß ich nicht wie sich das Unterformular alleine aktualisieren soll  :-\

Zu 2: Habs zwar geschafft die Anzahl der Datensätze auszulesen, aber ich weiß nicht wie ich weitere Klicks im Navigationsformular verhindere, vor allem weil es zwei verschiedene Formualre sind.

Das ganze würde ja in der Theorie denk ich so aussehen:
Navigationsformular klick -> Unterformular automatisch aktualisieren -> Datensätze auszählen -> wenn größer 3 -> Navigationsformular ja/nein Felder sperren


Vielleicht bin ich auch auf dem komplett falschen Weg und denke viel zu kompliziert.
Ich hoffe ihr könnt mir weiterhelfen, wäre euch sehr dankbar.

Meine Vba-Kenntnisse sind noch recht bescheiden.

Mfg
Ocrim

MaggieMay

Hallo,

zu 1)
ist das Unterformular sichtbar, während im Navigationsformular Kästchen angeklickt werden?
Dann wäre das geeignete Ereignis wohl das Formularereignis "AfterUpdate" im Navigationsformular.

zu 2)
Die Prüfung der angehakten Kästchen müsste dort vorgenommen werden wo es passiert, denn wenn du die Kontrollkästchen sperren würdest, bspw. aus dem Ufo heraus, könntest du die Haken ja auch nicht mehr entfernen.
Das heißt du fängst das BeforeUpdate-Ereignis der Kontrollkästchen ab, prüfst die Anzahl und verwirfst ggfls. die Eingabe mit Undo und einer Meldung.
Freundliche Grüße
MaggieMay

Ocrim

Hallo,

zu 1) Ja, es ist Sichtbar. Allerdings scheint "AfterUpdate" bei einem Navigationsformular nicht zu funktionieren. Von Access werden ja auch nur die Ereignisse "Beim Hingehen" und "Beim Verlassen" vorgeschlagen.

Habs in VBA damit versucht
Private Sub Navigationsunterformular_AfterUpdate()
Forms![Hauptformular]![Unterformular].Form.Requery
End Sub


Leider ohne Erfolg  :(

zu 2) Hab es auch genau so probiert.
Hab ein Textfeld erstellt mit dem Namen "Text32" und dann folgenden Code in das After Update Ereignis eingefügt

Private Sub Form_AfterUpdate()
Me.Requery
Dim ZahlDatensatz As Integer
    ZahlDatensatz = Abs(DSum("SpalteAusTabelle", "MeineAbfrage"))
    If ZahlDatensatz > 3 Then
        MsgBox "Es sind bereits 3 markiert"
        Me.Undo
    End If
Text32.Value = ZahlDatensatz
End Sub


Das Problem hierbei ist, Text32 aktualisiert erst wenn ich einen Datensatz aus dem Unterformular wieder lösche, das heißt solang ich nur Kästchen aktiviere wird das Unterformular nie reagieren. Somit müsste bei Veränderung im  Navigationsformular, nicht nur das Unterformular aktualisieren sonder auch der das Textfeld "Text32".
Aber es wird die richtige Zahl angezeigt (nach dem Löschen eines Datensatzes im Unterformular).

Mfg Ocrim

MaggieMay

Ich denke, hier stimmt was nicht:
Zitat von: Ocrim am Januar 26, 2015, 12:10:35
Im Unterformular werden die Datensätze angezeigt bei denen ein Haken im Navigationsformular geklickt wurde.

Zitatich weiß nicht wie ich weitere Klicks im Navigationsformular verhindere, vor allem weil es zwei verschiedene Formualre sind.

Dann findet das Ganze wohl eher nicht im Navigationsformular selbst, sondern in darin untergebrachten Unterformularen statt.

Und hier meinst du vermutlich die Karteireiter im Navigationsformular:
ZitatVon Access werden ja auch nur die Ereignisse "Beim Hingehen" und "Beim Verlassen" vorgeschlagen.
Das sind ja nicht die Formulare.

Da würde ich doch ganz gern mal selbst einen Blick in die DB werfen, um zu sehen, was du eigentlich meinst.

Zitatdas heißt solang ich nur Kästchen aktiviere wird das Unterformular nie reagieren.
Das stimmt, vom Klicken allein passiert nichts, da musst du schon "eingreifen". Ohne dass der Datensatz gespeichert wäre, kann auch das Unterformular nicht aktualisiert werden.
Freundliche Grüße
MaggieMay

Ocrim

ZitatDann findet das Ganze wohl eher nicht im Navigationsformular selbst, sondern in darin untergebrachten Unterformularen statt.

Nicht ganz.. es ist außerhalb des Navigationsformulars, aber im selben Formular in dem das Navigationsformular ist.
Ist bisschen schwer zu erklären.

ZitatDa würde ich doch ganz gern mal selbst einen Blick in die DB werfen, um zu sehen, was du eigentlich meinst.

Ok werde sie gleich mal nachbauen, da ich die Originale aufgrund der Daten nicht hochladen kann.

Ocrim

So hab die Datenbank nachgebaut.

Wenn du ein Feld in Navigationsformular anklickst, musst du einmal in das Unterformular klicken damit die Daten dort angezeigt werden.

Ziel ist es bei Veränderung im Navigationsformular das Unterformular automatisch aktualisieren zu lassen. Und sobald 3 Datensätze in Unterformular sind, keine weiteren mehr zuzulassen.

Ich hoffe du kannst mir weiter helfen  :-\

Mfg
Ocrim 


Ocrim

Zitat von: DF6GL am Januar 27, 2015, 10:57:24
Hallo,

meinst Du dies:?

Ja genau das  :)
Vielen Dank!!

Hab aber noch eine Frage:
Ich will jetzt noch eine Bedingung einbauen. Sobald 2 Datensätze im Unterdormular sind, sollen im Hauptformular (nicht im Navigationsformular) ein Textfeld (zb Text1) erscheinen, sobald 3 Datensätze drin sind soll das erste Textfeld wieder ausgeblendet werden und ein zweites Textfeld(Text2) eingeblendet werden.

Wie könnte ich das umsetzten?

DF6GL

Hallo,

welches "Unterformular" meinst Du nun?

etwa nach diesem Prinzip:

Sub Form_Current()
Dim Anz as Long
Anz=Dcount("*","tblTabelle","Marker <>0")
Me!Text1.Visible = Anz=2
Me!Text2.Visible = Anz=3
End Sub


Ocrim

Zitat von: DF6GL am Januar 27, 2015, 13:03:08
welches "Unterformular" meinst Du nun?

Kein Unterformular  :P Das Formular in dem das Navigationsformular drin ist. Möchte die Textfelder aber neben dem Navigationsformular legen und nicht im Navigationsformular.

Sub Form_Current()
Dim Anz as Long
Anz=Dcount("*","tblTabelle","Marker <>0")
Me!Text1.Visible = Anz=2
Me!Text2.Visible = Anz=3
End Sub


Hab schön ähnliches versucht, hat nicht funktioniert.

Private Sub Form_Current()
Dim Anz As Long
Anz = DCount("*", "tblBeispieldaten", "Auswahl <>0")
If Anz <> 2 Then
Me!Text1.Visible = Flase
End If
If Anz <> 3 Then
Me!Text2.Visible = Flase
End If
End Sub


Das klappt nur bedingt. Wenn ich in die Entwurfsansicht wechsel und wieder zurück funktionierts, aber durch Aktualisierung klappt's nicht.  ???

DF6GL

Hallo,

Flase ist False ...  ;)

Zudem deckt  die IF-Konstruktion nicht alle Möglichkeiten ab.


"aber durch Aktualisierung klappt's nicht."

Wo und wie aktualisiert Du denn?

Bau an geeigneter Stelle noch ein  Me.Requery ein.

Ocrim

ZitatFlase ist False ...  ;)

Hat komischerweise dennoch funktioniert.

ZitatZudem deckt  die IF-Konstruktion nicht alle Möglichkeiten ab.

Wieso? die entrechenden Felder sind ja dann nur sichtbar wenn Anz 2 oder 3 ist.
Seh meinen Fehler nicht ???

ZitatWo und wie aktualisiert Du denn?

Hab per Button im Menüband aktualisiert.

ZitatBau an geeigneter Stelle noch ein  Me.Requery ein.

Hab ich und zwar folgendermaßen
Private Sub Form_AfterUpdate()
Forms!frmHauptformularMitNavi!Text1.Requery
Forms!frmHauptformularMitNavi!Text2.Requery


Das hab ich im Abfrageformular eingefügt, klappt aber einfach nicht  :-\

----------------

Hab grad eine Lösung gefunden. Hab im Abfrageformular folgendes eingefügt:

Private Sub Form_AfterUpdate()
DoCmd.Close acForm, "frmHauptformularMitNavi"
DoCmd.OpenForm "frmHauptformularMitNavi"
Forms!frmHauptformularMitNavi!frmAuswahlWahr.Requery
End Sub


Damit klappt's genau so wie ich es mir vorgestellt habe. ABER das kann ja nicht die optimale Lösung sein..

DF6GL

Hallo,

was passiert beim 2. oder 3. Mal, wenn nur 1 Haken existiert?

Dann bleiben die Textfelder weiterhin unsichtbar.


Das Close und Openform kannst Du sparen...

Ocrim

was passiert beim 2. oder 3. Mal, wenn nur 1 Haken existiert?

Dann bleiben die Textfelder weiterhin unsichtbar.


Genau das war ja mein Ziel  :) Sie sollen nur Sichtbar sein, wenn 2 oder 3 Datensätze markiert sind.

Das Close und Openform kannst Du sparen...

Die anderen Lösungen scheinen aber nicht zu funktionieren  :-\
Soll ich die Datenbank erneut hochladen damit du verstehst wo der Fehler liegt? Komm grad absolut nicht weiter..

Und nochmal Danke für dein Bemühen.

DF6GL

Hallo,

"Sie sollen nur Sichtbar sein, wenn 2 oder 3 Datensätze markiert sind."

Der Code leistet das aber nicht....

Ansonsten lad halt hoch...