Neuigkeiten:

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

Mobiles Hauptmenü

Wie hinterlege ich eine Aktualisierung richtig via Code-Generator?

Begonnen von derilzemer, Januar 14, 2015, 21:09:41

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
für die meisten wahrscheinlich eine simple Sache, für mich Neuland, da ich null VBA kann. Folgender Sachverhalt.
Ich habe ein Formular, frmSpieledaten. Im Formularkopf habe ich einen Datensatzcounter. Die Funktionalität dessen ist gewährleistet. Wenn ich jetzt im Formular einen neuen Datensatz anlege, dann muss ich jedoch noch F5 drücken, damit der Counter aktualisiert. Nun dachte ich, dann gehe ins die Eigenschaften des Formular selbst --> Nach Aktualisierung und da die Ereignisprozedur

Private Sub Form_AfterUpdate()
    Me.txtAnzahldatenfrm.Requery
End Sub

txt.Anzahldatenfrm ist das Textfeld im Formularkopf, wo der Counter läuft.
Es geht natürlich nicht, was ich fast erwartet habe. Wie oder wo ist der richtige Ansatz für solch eine kleine Sache?
Gruß und Danke vorab
Andreas
Grüße und Dank im voraus
Andreas

database

Hallo Andreas,

woher bezieht das Zählfeld 'txtAnzahldatenfrm' die Anzahl der Datensätze bzw. wie wird dem Feld die Anzahl zugewiesen?

derilzemer

Hi,
das Counterfeld txtAnzahldatenfrm hat in den Eigenschaften --> Daten --> Steuerelementinhalt den Eintrag =Anzahl(*) , that's it. Wie erwähnt zählt er korrekt, aber damit er die aktuelle Zahl hat, dazu muss ich F5 anwenden.
Gruß Andreas
Grüße und Dank im voraus
Andreas

database

#3
Das Problem ist, dass bei der Eingabe von Daten kein Formularereignis ausgelöst wird, dass eine Aktualisierung veranlassen könnte. Das banalste wäre der Wechsel in einen anderen Datensatz, dadurch würde Form_Current ausgelöst werden und die Aktualisierung ds Zählers wäre über dieses Ereignis zu bewerkstelligen.
Nun was kannst du tun:

Stelle deinen Code ins Ereignis AfterUpdate eines Formularfeldes, das bei der DateneinNEUeingabe NIE ohne Daten sein wird.

EDIT:
Noch g'scheiter wäre es, im Formularentwurf dieses =Anzahl(*) rauszunehmen und dafür im AfterUpdate-Ereignis eines Formularfeldes wie oben beschreiben einzutragen:
Me.txtAnzahldatenfrm = DCount("*","NameDerDatenherkunft")
Das bewirkt nach der Dateneingabe eine Neuberechnung der Anzahl
'NameDerDatenherkunft' wäre durch den Namen der Tabelle zu ersetzen, die in den Formulareigenschaften unter 'Datensatzquelle' auf der Registerkarte 'Daten' zu finden ist.

und den gleichen Code auch ins Ereignis 'Beim Anzeigen' des FORMULARS
Das bewirkt die Anzeige der Anzahl, wenn das Formular geöffnet wird oder ein Datensatzwechsel statfindet

derilzemer

Hi,
danke erst mal für deinen Hinweis. Ich habe jetzt im Formular frmSpieleDaten, ein Feld (cboVerlagID), welches bei der Dateneingabe immer belegt wird. Da habe ich in den Eigenschaften unter Ereignis --> Nach Aktualisierung den Code eingefügt.

Private Sub cboVerlagID_AfterUpdate()
    Me.txtAnzahldatenfrm.Requery
End Sub

Neuen Datensatz angelegt, zurück in einen alten Datensatz gesprungen aber der Counter hat nicht hochgezählt. Idee?

Gruß Andreas
Grüße und Dank im voraus
Andreas

MaggieMay

#5
Hallo,
Zitat von: database am Januar 14, 2015, 21:56:47
Das Problem ist, dass bei der Eingabe von Daten kein Formularereignis ausgelöst wird, dass eine Aktualisierung veranlassen könnte.
und was ist bspw. mit dem Formularereignis "Nach Aktualisierung"? Warum ist das nicht geeignet?
(hast du doch selbst oben vorgeschlagen)

Zitat von: derilzemer am Januar 14, 2015, 22:24:07Idee?
Wenn du bei =Anzahl(*) bleibst, genügt ein Me.Recalc im Formularereignis "Nach Aktualisierung" und "Nach Löschbestätigung".
Freundliche Grüße
MaggieMay

database

Hallo,

Zitatund was ist bspw. mit dem Formularereignis "Nach Aktualisierung"? Warum ist das nicht geeignet?
Weil dieses Ereignis seltsamerweise nicht ausgeführt wird wenn ich in einem neuen Datensatz Daten in ein Feld eingebe sondern erst beim Wechsel in einen anderen DS.

So habe ich das nicht vorgeschlagen

Private Sub cboVerlagID_AfterUpdate()
    Me.txtAnzahldatenfrm.Requery
End Sub


ich habe vorgeschlagen:


Private Sub cboVerlagID_AfterUpdate()
    Me.txtAnzahldatenfrm = DCount("*","NameDerDatenherkunft")
End Sub

und wegnehmen von =Anzahl(*) aus den Eigenschaften des Feldes txtAnzahldatenfrm,
wenn du obiges verwendest darf der Feldinhalt von txtAnzahldatenfrm nicht mehr berechnet werden

@MaggieMay
Zitat(hast du doch selbst oben vorgeschlagen)
ja? wo?
.

MaggieMay

Freundliche Grüße
MaggieMay

derilzemer

Zitat von: database am Januar 15, 2015, 08:27:44
So habe ich das nicht vorgeschlagen

Private Sub cboVerlagID_AfterUpdate()
    Me.txtAnzahldatenfrm.Requery
End Sub


ich habe vorgeschlagen:


Private Sub cboVerlagID_AfterUpdate()
    Me.txtAnzahldatenfrm = DCount("*","NameDerDatenherkunft")
End Sub

Hi,
Leider hat sich mein Kommentar (22:24) wohl gerade mit der Editierung deines Vorschlages gestern abend (22:21) überschnitten, sodaß ich "falsch" getestet habe. Also sorry for that.
Ich habe das jetzt mal umgebaut und es geht. Danke für die Hilfe

Gruß Andreas



Grüße und Dank im voraus
Andreas

MaggieMay

#9
Hallo,

ich halte das Ereignis "cboVerlagID_AfterUpdate" weiterhin für die falsche Wahl. Was ist, wenn du mal ein Spiel verlierst, verschenkst oder verkaufst etc.? Ich meine, die Löschung von Datensätzen sollte nicht grundsätzlich ausgeschlossen werden. Zu reagieren wäre also auf das Hinzufügen und Löschen von Datensätzen und nicht auf die Änderung eines beliebigen Datenfeldes.
Freundliche Grüße
MaggieMay

database

@MaggieMay
Hier geht es nicht um das Ändern eines beliebigen Datenfeldes sondern um Eingabe eines Wertes in ein leeres Feld eines neuen Datensatzes - das erhöht die Anzahl der Datensätze um 1
Den Vorschlag mit dem Löschen - OK, kann man einbauen nur wäre ich mit der Löschbestätigung nicht so großzügig.

Das mit dem Form_AfterUpdate kannst vergessen, das greift nicht bei der Dateneingabe sondern erst wenn der aktuelle DS verlassen wird.

derilzemer

Hallo,
danke erst mal für die konstruktive Diskussion. Ich muss da einwerfen, dass ich mich wohl wieder erneut nicht korrekt ausgedrückt habe :(. Es reicht mir völlig, wenn ich beim verlassen eine Aktualisierung erhalte. Vorher musste ich auch nach verlassen etwas "manuell" aktualisieren.
Ich habe das jetzt mal auf das Me.Recalc umgebaut und et Voila, passt. Völlig ausreichend. Sorry wenn ich das mal wieder viel zu Umständlich erklärt habe, das war nicht meine Absicht. Ich gelobe Besserung.

Gruß Andreas
Grüße und Dank im voraus
Andreas

database


MaggieMay

@database:
Zitat von: database am Januar 15, 2015, 20:45:50Hier geht es nicht um das Ändern eines beliebigen Datenfeldes sondern um Eingabe eines Wertes in ein leeres Feld eines neuen Datensatzes
Dir ist sicherlich klar, dass das Ereignis auch bei jeder Änderung (bzw. Korrektur) dieses Datenfeldes eintritt. Demnach ist dieses Ereignis sicherlich nicht die optimale Wahl.
Zitatnur wäre ich mit der Löschbestätigung nicht so großzügig
Keine Ahnung was du damit meinst, aber die Ausschließung der Datensatzlöschung wurde bislang nicht thematisiert.
ZitatDas mit dem Form_AfterUpdate kannst vergessen, das greift nicht bei der Dateneingabe sondern erst wenn der aktuelle DS verlassen wird.
Genau das halte ich für den geeigneten Zeitpunkt, den Datensatzzähler zu aktualisieren.

... wie es übrigens vom Threadstarter inzwischen bestätigt wurde. :-)
Freundliche Grüße
MaggieMay

database

ZitatGenau das halte ich für den geeigneten Zeitpunkt, den Datensatzzähler zu aktualisieren
Und ich halte es für den richtigen Zeitpunkt wenn sich die Anzahl der Datensätze ändert.

ZitatDir ist sicherlich klar, dass...
Ja, mir ist einiges klar und es wird auch immer klarer dass die Diskussion hier beendet ist