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
Hallo Andreas,
woher bezieht das Zählfeld 'txtAnzahldatenfrm' die Anzahl der Datensätze bzw. wie wird dem Feld die Anzahl zugewiesen?
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
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
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
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".
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?
.
Zitatja? wo?
Sorry, da muss ich mich wohl verguckt haben.
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
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.
@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.
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
Hi,
macht nix - wichtig dass es funzt :-)
@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. :-)
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
Hallo Peter,
welche Laus ist dir denn hier schon wieder über die Leber gelaufen:
Zitat von: database am Januar 15, 2015, 23:32:10Ja, mir ist einiges klar und es wird auch immer klarer dass die Diskussion hier beendet ist
Kannst du es generell nicht ertragen, wenn man anderer Meinung ist als du oder muss ich das persönlich nehmen? :(
(
das ist ja nicht das erste Mal, dass du mich so unfreundlich "abbügelst")
Und was das betrifft:
ZitatUnd ich halte es für den richtigen Zeitpunkt wenn sich die Anzahl der Datensätze ändert.
so ändert sich die Anzahl der Datensätze, sobald ein neuer Datensatz
gespeichert (
sowie ein bestehender gelöscht) wurde.
Bei Eingabe eines neuen Datensatzes ist das allerdings noch nicht der Fall, demnach bringt die Aktualisierung im AfterUpdate-Ereignis des Verlages auch rein gar nichts, sondern der Zähler aktualisiert sich nach deinem Vorschlag erst beim Datensatzwechsel im Form_Current-Ereignis. Das ist dann auch nichts anderes als wenn man es im Form_AfterUpdate täte, nur dass es viel zu oft und in den meisten Fällen unnötigerweise passiert.
Wie du siehst, ist die Diskussion um deinen Vorschlag durchaus noch nicht zu Ende.
Wie wär's wenn du einfach mal zugibst, dass du auf der falschen Spur warst? ;)
Hi,
mir ist weder eine Laus noch sonst was über die Leber gelaufen.
Das einzige was mir vorzuwerfen wäre ist, dass ich übersehen habe zu erwähnen, dass der begonnene DS physikalisch in die Tabelle zu verfrachten sei um die richtige Anzahl der DS anzuzeigen - was ja auch das ursprüngliche Problem in der Anfrage war.
ZitatWie erwähnt zählt er korrekt, aber damit er die aktuelle Zahl hat, dazu muss ich F5 anwenden
Nun ist es ja so, dass bei der Eingabe eines Wertes in ein leeres Feld eines NEUEN Datensatzes sofort der neue PK (wenn dieser als AutoWert deklariert wurde) erstellt wird - und das wiederum ist FÜR MICH der Zeitpunkt zu dem auch ein neuer DS erzeugt wird - dass dieser dann bereits in der Tabelle vorhanden ist habe ich ja nicht behauptet.
Man kann nun herumeiern oder sich hämisch freuen wie man möchte ...
Zitat... wie es übrigens vom Threadstarter inzwischen bestätigt wurde. :-)
nur hat er hier die Notwendigkeit des Drückens der Taste F5 im
AKTUELLEN NEUEN DS ja nicht behoben bekommen so wie er es ja zu Beginn angefragt hatte:
ZitatWenn ich jetzt im Formular einen neuen Datensatz anlege, dann muss ich jedoch noch F5 drücken, damit der Counter aktualisiert
Zitat von: MaggieMay am Januar 14, 2015, 22:48:04
... 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".
Naja und dann fragst du mich ...
ZitatWie wär's wenn du einfach mal zugibst, dass du auf der falschen Spur warst?
Weißt du, solche Dinge mag ich halt einfach nicht aber ich werde deswegen auch nicht unfreundlich und 'bügle dich ab' oder was immer du sonst noch meinst, auch dann nicht wenn du mich oberlehrermäßig fragst ob mir was klar ist. Das ist auch der Grund ist weshalb ich deine 2 vorangegangen Versuche mich weiter zu provozieren aus diesem Thread gelöscht habe.
Mir ist auch nicht klar, warum du das immer wieder mal probierst, du wirst schon irgend welche Gründe dafür haben oder was weiß ich ---- aber im Grunde ist's mir auch wurscht.
Wie auch immer - da das Ganze schon außerordentlich OT ist und nach meinem Dafürhalten in DIESEM Forum keine Berechtigung hat beende ich diese Diskussion an der Stelle EXPLIZIT.
Im Anhang befindet sich ein kleines Beispiel, in dem zu sehen ist, wie sich die Anzahl der gespeicherten Artikel zur Anzahl der angezeigten Datensätze in den Navigationsschaltflächen verhält wenn man in einem neuen Datensatz einen neuen Lagerort auswählt.
@database:
Ich habe dich keineswegs und zu keiner Zeit provozieren wollen, da hast du wohl etwas in meine Worte hineininterpretiert was so nicht gemeint war, bspw. ist das "dir ist doch klar" nichts anderes als eine Floskel, die keinesfalls "oberlehrerhaft", sondern durchaus freundlich gemeint war.
Mehr sage jetzt auch ich nicht mehr dazu, macht ja keinen Sinn, jeden einzelnen Satz auseinanderzunehmen und zurecht zu rücken, wenn der andere die Dinge so sieht wie er sie sehen will. Zumal du offensichtlich Teile meiner Beiträge gelöscht hast - was ich übrigens für ein absolutes NoGo halte - so dass man nun kein neutrales Auge mehr drauf werfen kann.
ZitatZumal du offensichtlich Teile meiner Beiträge gelöscht hast
Ich habe kein Teile gelöscht sondern die ganzen - das weißt du auch - drum stell das nicht anders dar als es ist!
Zudem hatten die gelöschten Beiträge absolut keinen Bezug zur Problemlösung.