Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Formular abspeichern





Frage

Hi, vielleicht kann mir jemand helfen: habe unter MS Access ein Formular erstellt mit mehreren Eingabefeldern (Zahlen) und einer Datums-Angabe. Bei jeder neuen Datums-Eingabe sollten die alten Werte der jeweiligen Felder dazu addiert werden. Wie kann ich das Formular nach der ersten Eingabe speichern und nach Aufruf und neuen Eigaben die Felder aktualisieren. Würde mich freuen, wenn mir jemand den Weg beschreibt. Bin neu im "Geschäft"

Antwort 1 von oliverV

Hallo,

evtl. hilft dir meine Antwort 4 in folgenden Beitrag weiter.
Der kumulierte Wert wird bei jedem Datensatz erzeugt, nicht nur bei einem neuen Datum (pro Datum könnte ja auch mehrere Datensätze erfasst werden).

Wenn´s nicht hilft, beschreib noch mal genauer was du bezwecken willst.

Gruß

Oliver

Antwort 2 von Konrad

Vielen Dank für Deine Nachricht, Oliver.
Der Hinweis auf das Datum ist nur sekundär.
Der Einfachheit halber nehme ich mal ein Eingabefeld mit der Bezeichnung: Zugang Meldungen
Eingabe z.B.: =5
Es folgt ein Summenfeld: Meldungen Gesamt:
(Beim ersten Eintrag muß der Wert 5 erscheinen)
Neue Eingabe Zugang: =6
Das Summenfeld soll jetzt 11 ausweisen u.s.w.

M.E. muss jedesmal das Formular weggeschrieben werden. Denn wenn ich es erneut aufrufe, muss ja lt. Beispiel der alte Wert 11 abgespeichert sein.

Wäre schön, wenn Du mir helfen könntest.
Vielen Dank
Konrad

Antwort 3 von oliverV

Hallo Konrad,

normalerweise sollte man einen berechneten Wert nicht speichern, denn man kann ihn jederzeit zur Laufzeit wieder berechnen (es gibt Ausnahmen).

Die Berechnung eines kumulierten Wertes kannst du einfach mal nachbauen.
Erstelle eine Tabelle "tblZugaenge" mit den Feldern:
IDZugaenge Felddatentyp AutoWert Primärschlüsselfeld
Zugang Felddatentyp Zahl
Erfasse ein paar Beispieldatensätze.

Erstelle nun eine Abfrage mit der Tabelle als Basis, Sortierung nach IDZugaenge aufsteigend.
Erweitere deine Abfrage in der Entwurfsansicht um folgendes Feld (einfach ins nächste freie Feld kopieren):

Kumulierter_Wert: (SELECT Sum(Zugang) FROM tblZugaenge AS Temp WHERE Temp.IDZugaenge <= IDZugaenge )


Wenn du nun in die Datenblattansicht wechselst, siehst du den (in Echtzeit) berechneten kumulierten Wert.

Diese Abfrage kannst du nicht als Datenherkunft für dein Eingabeformular nutzen; du siehst an den Navigationsschaltflächen, das du keinen neuen Datensatz hinzufügen kannst.

Hier wird die Summe der Zugänge nicht gespeichert, was auch Sinn macht.
Wenn der Wert gespeichert würde, und z.B. im 3. Datensatz die Zugangsmenge geändert wird, würde sich die Zugangssumme des 3. Datensatzes auch ändern; alle weiteren Datensätze (die zum Änderungszeitpunkt bereits erfasst wurden) wären von der Änderung der Zugangssumme nicht betroffen, d.h. alle folgenden und zukünftigen DS hätten die falsche Zugangssumme gespeichert.

...Fortsetzung

Antwort 4 von oliverV

...Fortsetzung

Ich glaube das du viel zu kompliziert denkst, wenn es um eine einfache Bestandsverwaltung geht (also die Erfassung von Zugängen und wahrscheinlich ja auch Abgängen), dann speichere nur die Bewegungsdaten. Den aktuellen Bestand kannst du mit einer einfachen Summe-Funktion (=Summe[Zugaenge]) in einem ungebundenen Formularfeld errechnen.

Erzähle vielleicht noch mal mehr zum Hintergrund, was du machen willst und warum du meinst, das die Zugangssumme gespeichert werden muss. Dann kann ich dir wahrscheinlich einen konkreteren Tipp geben.

Gruß

Oliver



Eventuell vorhandene Sponsoren-Links in meinen Antworten werden durch den Betreiber des Forums erstellt. Da ich keinen Einfluss auf deren Inhalt nehmen kann, distanziere ich mich ausdrücklich von diesen Links. Es handelt sich nicht um eine Empfehlungen meinerseits.


Antwort 5 von Konrad

Hallo Oliver,
für Deine detaill. Ausführungen bedanke ich mich.
Es ist tatsächlich sehr einfach, was ich machen will.

Das Eingabeformular soll 3 (A bis C) Felder ausweisen:

Tag (Eingabe) Zugang (Eingabe) Zugang Ges (err.)

Es gibt nur Zugänge. Unter dem gleichen Datum können mehrere Zugänge sein, die dann aber immer das errechnete Feld C aktualisieren sollten. Schon nach der ersten Eingabe habe ich versucht, das Formular abzuspeichern. Geht aber nicht.

Wenn das mit dem Formular so funktioniert, würde ich später weitere Rechenoperationen mit Feld C durchführen.
Gruß Konrad

Antwort 6 von oliverV

Hallo Konrad,

funktionieren würde folgendes:

Gehe in der Entwurfsansicht deines Formulars in die Feldeigenschaften des Feldes [Zugang]. Bei den Ereignissen findest du "Nach Aktualisierung", öffne der VBA-Editor (drei Punkte am Ende der Zeile).

Trage nun zwischen Privat Sub.. und End Sub folgenden Code ein:

Dim Var1 As Long

Var1 = DMax("Zugang Ges", "Dein_Tabellenname")
Me.[Zugang Ges] = Me.Zugang + Var1
[/Code]

ABER...
du wirst in der Praxis Probleme bekommen !

Mit DMax wird der höchste Wert im Feld [Zugang Ges] in deiner Tabelle abgefragt (ist ja gleichbedeutend mit dem letzten Wert), zu diesem Wert wird der Feldinhalt des Feldes [Zugang] addiert, das Ergebnis wird in das aktuelle Feld [Zugang Ges] eingetragen.

Zum ABER:
Bei jeder Änderung des Feldes [Zugang] wird das Feld [Zugang Ges] auch verändert; wenn du also einen vorhandenen Datensatz ändern willst, wird im Feld [Zugang Ges] der max. Wert (also der des letzten Datensatzes) plus den geänderten (aktualisierten) Wert des Feldes [Zugang] eingetragen - sprich der falsche Wert.
Die nachfolgenden Datensätze behalten den alten Wert, was ja auch falsch ist.

Gut gemeinter Rat, lasse die Finger davon !

Erfasse nur die Zugänge, einen Summe der Zugänge bis zu einem bestimmten Tag, kannst du jederzeit errechnen.
Erstelle einfach eine Abfrage, lasse dir die Funktionen anzeigen, wähle im Feld [Zugang] die Funktion "Summe" und im Feld [Tag] die Funktion "Bedingung". Verwende im Feld [Tag] z.B. das Kriterium <=#18.04.2005# - Fertig.

Antwort 7 von oliverV

...Fortsetzung

Diese Summe kannst du dann für weitere Berechnungen nutzen.

Wenn du nun vorhandene Zugangswerte änderst, ist das vollkommen egal, da die Gesamtsumme immer erst beim Ausführen der Abfrage errechnet wird (sprich in Echtzeit).

Das ganze kannst du natürlich auch mit einem Formular automatisieren.

Gruß

Oliver