Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Speichern einer Summe eines berechneten Feldes

64 views
Skip to first unread message

Wirtz Holger

unread,
Oct 9, 2000, 3:00:00 AM10/9/00
to
Hallo NG,

auch wenn die Frage schon x-mal gestellt wurde (ich finde die Lösung nicht
mehr :((( ) nochmals folgende Problematik:

In einem Unterformular werden Gewichte eingegeben. Die Summe wird anhand
eines berechneten Feldes "Sumweight" (=Summe([Gewicht]) im Formularfuss
ermittelt.
Ein gebundenes Feld im Hauptformular soll diesen Wert ebenso aufnehmen (und
speichern).

Im Unterformular habe ich nach dem aktualisieren folgende Codezeile
eingefügt die diese Aufgabe eigentlich erledigen sollte:

DoCmd.RunCommand acCmdSaveRecord
forms!Hauptform!SummeGewicht= SumWeight

Nur leider speichert Access immer nur die Summe der vorherigen Eingaben z.
B.:

Eingabe tat. Summe meine Summe???
2 2 0
4 6 2
7 13 6
9 21 13

usw.

Für einen Tipp wäre ich sehr dankbar.

Gruss Holger

Frank Hentzschel

unread,
Oct 9, 2000, 3:00:00 AM10/9/00
to
Hallo Holger,

ich habs mit einem Beispiel ausprobiert und gehe so vor:

' im Unterformular
Private Sub Form_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL ("update tblTest SET SummeGewicht=" & SumWeight & "
WHERE Id= " & Id)
Forms!frmHauptform.Requery
DoCmd.SetWarnings True
End Sub

Deinen Effekt hatte ich übrigens auch zuerst, machs aber normalerweise
so wie beschrieben.

Viele Erfolg damit.

Gruß

Frank


Sent via Deja.com http://www.deja.com/
Before you buy.

Holger Wirtz

unread,
Oct 9, 2000, 3:00:00 AM10/9/00
to
Ach so, was ich noch vergessen habe:

es funzt zwar mit einer Aggregatfunktion

Sumweight= DSum("[Gewicht]", "Gewichte", "[ID]=" & [ID])

nach dem aktualisiren des Gewichtsfeld, aber bei grossen Datenmengen ist das
ganze unendlich langsam.

Andere Ideen???

Christian Lindemann

unread,
Oct 9, 2000, 3:00:00 AM10/9/00
to
Hallo Holger

Wirtz Holger schrieb:

> In einem Unterformular werden Gewichte eingegeben. Die Summe wird anhand
> eines berechneten Feldes "Sumweight" (=Summe([Gewicht]) im Formularfuss
> ermittelt.
> Ein gebundenes Feld im Hauptformular soll diesen Wert ebenso aufnehmen (und
> speichern).
>
> Im Unterformular habe ich nach dem aktualisieren folgende Codezeile
> eingefügt die diese Aufgabe eigentlich erledigen sollte:
>
> DoCmd.RunCommand acCmdSaveRecord
> forms!Hauptform!SummeGewicht= SumWeight
>
> Nur leider speichert Access immer nur die Summe der vorherigen Eingaben z.
> B.:
>
> Eingabe tat. Summe meine Summe???
> 2 2 0
> 4 6 2
> 7 13 6
> 9 21 13

PS: in der letzten Zeile soll also 22 herauskommen, stimmt's?*g*

Ich habe mal ein Formular zur Erfassung von Rechnungsdaten (Tabelle:
Rechnungen) gemacht, auf dem sich ein UFo zur Eingabe der Rechnungspositionen
(Tabelle: Rechnungspositionen) befindet. Hauptformular und UFo sind über das
eindeutige Feld RechnNr miteinander verknüpft.

Das UFo enthält im Detailbereich die Felder Menge, Bezeichnung, Einzelpreis und
Gesamtpreis.
Gesamtpreis dient hierbei lediglich zur Erfassung der Multiplikation
(Menge*Einzelpreis).
Bei Menge_AfterUpdate und Einzelpreis_AfterUpdate habe ich
Me.Gesamtpreis = Nz(Me.Menge * Me.Einzelpreis)
Me.Refresh
eingetragen, damit die jeweilige Multiplikation sofort nach Verlassen des
geänderten Feldes aktualisiert wird.
Ein Textfeld "UFoSummeGesamtpreis" (im UFo), das sich im (unsichtbaren)
Formularfuß befindet, hat als Datenherkunft:
=Wenn(Summe([Gesamtpreis]) Ist Null;0;Summe([Gesamtpreis]))

Anschließend wird im Hauptformular ein Feld "Nettobetrag" mit dem Inhalt des
Feldes "SummeGesamtpreis" gefüllt:
=[SummeGesamtpreis]

Im Formularkopf (oder eben im Formularfuß - ganz wo Du möchtest) des
Hauptformulars befinden sich ein Feld "SummeGesamtpreis", das die Werte aus
dem UFoSummeGesamtpreis bezieht:
=nz([Formulare]![Rechnung]![Rechnungspositionen]![UFoSummeGesamtpreis])
sowie ein Feld "NettobetragKopie", dessen Datenherkunft das Feld Nettobetrag
der zugrundeliegenden Tabelle (Rechnungen) ist.

Jetz kommt's. Beim Schließen des Formulars trägst Du folgendes ein:
Me.NettobetragKopie = Nz(Me.Nettobetrag)
Me.Recalc
DoCmd.RunCommand acCmdSaveRecord

Der Witz dabei ist, daß das Feld "NettobetragKopie" als Datenherkunft das Feld
Nettobetrag der zugrundeliegenden Tabelle hat, während das Feld "Nettobetrag"
ein ungebundenes, berechnetes Feld ist. Der letzte Datensatz wird also
ebenfalls in die Berechnung des Feldes "Nettobetrag" einbezogen und die Werte
korrekt in den zugrundeliegenden Tabellen gespeichert.

Du könntest übrigens das Schließen des Formulars und somit die Speicherung
abfangen bzw. rückgängig machen, wenn Du
Me.NettobetragKopie = Nz(Me.Nettobetrag)
Me.Recalc
DoCmd.RunCommand acCmdSaveRecord
nicht bei Form_close sondern bei Form_Unload eintragen und dieses in eine
Abfrage (MsgBox) einarbeiten würdest.

An verschiedenen Stellen habe ich die Nz-Funktion eingesetzt, weil ich, wenn
ich mich recht entsinne, hier und da Probleme mit Nullwerten hatte. Vielleicht
geht's auch etwas einfacher - aber so geht's eben auch.
Ich hoffe, Dir etwas geholfen zu haben.

Gruß
(o: Christian


Holger Wirtz

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to

Frank Hentzschel <Hentz...@web.de> schrieb in im Newsbeitrag:
8rsdo5$qcc$1...@nnrp1.deja.com...

Hallo Frank,

vielen Dank für Dein Posting. Ich arbeite mit grösseren Datenmengen, so dass
nach einer Gewichtseingabe mit anschliessender Aktualisierungabfrage (zur
Berechnung und Speicherung der Gesamtsumme) eine störende Wartepause
(Laufzeit der Abfrage)für den Benutzer eintritt :((. Hast Du vielleicht noch
eine andere Idee???

Gruss Holger

Holger Wirtz

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to

Christian Lindemann <christian...@online.de> schrieb in im
Newsbeitrag: 39E1F8F2...@online.de...

Hallo Christian,

in Kopfrechnen war ich noch nie besonders gut :(
Dank für Deinen Tipp. Funzt auch soweit ganz gut, aber...

nach Eingabe oder Änderung bzw. Löschung von Datensätzen soll sofort im
Hauptform die aktualisierte Summe erscheinen. Das UFO für die
Gewichtseingabe ist eine Endlosformular. Ein Recalc des UFO's nach dem
aktualiseren des Gewichtsfeldes bringt Nachteile für die fliessende Eingabe
von Gewichten mit sich. Erst bei einem nochmaligen Tab wechselt Access ins
nächste Gewichtsfeld und die vorherigen Einträge sind auch noch nach oben
weggescrollt worden:((((

Für einen Tipp wäre ich dankbar.

Gruss
Holger

Frank Hentzschel

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to
Hallo Holger,

> vielen Dank für Dein Posting. Ich arbeite mit grösseren Datenmengen,
> so dass nach einer Gewichtseingabe mit anschliessender
> Aktualisierungabfrage (zur Berechnung und Speicherung der
> Gesamtsumme) eine störende Wartepause
> (Laufzeit der Abfrage)für den Benutzer eintritt :((.

>Hast Du vielleicht noch
> eine andere Idee???

Ja!

Du hast in Deinem (Endlos-)Unterformular ein oder mehrere Felder, die
Grundlage zur Berechnung der Summe sind. Ich gehe in meinem Beispiel
von einem Feld "Gewicht" aus.
----------------------------------------------------------
'Modul-globale Variable
Dim diff as double

Private Sub Gewicht_AfterUpdate()
diff = Nz(Gewicht.Value) - Nz(Gewicht.OldValue)
Me.Parent.GesamtLadung = Me.Parent.GesamtLadung + diff
End Sub
----------------------------------------------------------
Ich habs ausprobiert, so wird sehr schnell das Feld im Hauptformular
per Berechnung aktualisiert.

Ich hoffe, daß hilft Dir weiter ...

Holger Wirtz

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to

Frank Hentzschel <Hentz...@web.de> schrieb in im Newsbeitrag:
8rum16$lfg$1...@nnrp1.deja.com...

Hallo Frank,

danke für Deinen zweiten Vorschlag. Dieser hat aber (meiner Meinung nach)
leider einen entscheidenen Hacken. Das Löschen von einem bzw. mehreren
markierten Datensätzen ist hierbei nicht berücksichtigt worden. Wenn das
irgendwie realisierbar wäre, ist das Problem totgeschlagen. Ich glaube aber,
das dass nicht so einfach zu machen ist. Erster Vorschlag gefällt mir daher,
troz der aufgezeigten Nachteile, besser.

Tolle Ideen und die Bereitschaft diese weiterzugeben, finde ich einfach
supi. Danke für Deine Mühe.
Wenn Dir nochwas einfällt wäre ich für ein Posting dankbar.

Gruss

Holger

Frank Hentzschel

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to
In article <8rv8m5$d3j$1...@fermi.tro.net>,

Also nach dem Löschen von Datensätzen sollte man natürlich vorher die
Summe von diesen (Gewicht) ermitteln und abziehen oder prinzipiell nach
dem Löschen neu die Summe bilden und aktualisieren. Wird denke ich
sowieso nicht so oft gemacht oder?

Aber ich werde mir noch weiter Gedanken dazu machen.

Christian Lindemann

unread,
Oct 10, 2000, 3:00:00 AM10/10/00
to
> nach Eingabe oder Änderung bzw. Löschung von Datensätzen soll sofort im
> Hauptform die aktualisierte Summe erscheinen.

Geht doch auch. Ich habe mal spaßeshalber ein Kombinationsfeld eingebaut, mit
dem ich die Rechnungen zur Anzeige auswählen kann. Denn normalerweise benutze
ich das Formular nur, um Rechnungen anzulegen (die Rechnungen werden nicht
geändert). Doch selbst dann, wenn ich aus dem Kombi-Feld eine Rechnung
ausgewählt habe und aus der angezeigten Rechnung Rechnungspositionen (im UFo)
entferne, wird der neue Rechnungsbetrag aktualisiert und beim Schließen des
Formulars in der Rechnungen-Tabelle abgespeichert.

> Das UFO für die Gewichtseingabe ist eine Endlosformular.

Richtig. Bei mir auch. Sonst wäre es auch etwas unübsichtlich. Und an der
Datenblattansicht gefällt mir nicht, daß sich die Spaltenbreite der Felder durch
den Benutzer verändern läßt.

> Ein Recalc des UFO's nach dem aktualiseren des Gewichtsfeldes bringt Nachteile
> für die fliessende Eingabe
> von Gewichten mit sich.

Was meinst Du mit "fliessender Eingabe"?
Die Inhalte von Menge, Beschreibung, Einzelpreis und (aus Menge*Einzelpreis
resultierend) Gesamtpreis werden mit Refresh sofort in die Tabelle übertragen,
in meinem Fall nicht nur bei Wechseln des Datensatzes sondern auch beim Wechsel
des Feldes. Ein Speichern der Daten des Hauptformulares geschieht ja erst nach
dem Schließen des Formulars (bzw. auf meine Anweisung hin) - und zwar durch den
Übertrag des Feldinhalts des ungebundenen, berechneten Feldes in das gebundene
Feld.

> Erst bei einem nochmaligen Tab wechselt Access ins nächste Gewichtsfeld ...

..wenn der Cursor von welchen Feld kommt?
Überprüfe vielleicht mal die Aktivierreihenfolge. Felder in denen Berechnungen
ablaufen (wie in meinem Feld "Gesamtpreis" bei den Rechnungspositionen) kannst
Du doch auch entsprechend formatieren, daß sie gar nicht erst benutzt werden
können und auch der Cursor sie "überspringt" (TabStop=False,Enabled=False,
Locked=True).

> und die vorherigen Einträge sind auch noch nach oben weggescrollt worden:((((

..naja, irgendwo müssen sie ja hin, und außerdem schreiben wie ja in der
westlichen Zivilisation von oben nach unten<grins>.

HTH
(o: Christian


Holger Wirtz

unread,
Oct 11, 2000, 2:43:53 AM10/11/00
to
Hallo Christian,

ich kann Dir gerne mal die Mini-BeispielDB mailen. Hier sind dann ohne viele
Worte die Probleme erkennbar.

Vielleicht noch mal meine Aufgabenstellung an die DB.
Die DB soll zur Erfassung von Lieferscheinen dienen (Hauptform; Tabelle
Lieferscheine). Zu jedem Lieferschein werden die Gewichte von Waren
festgehalten (UFo; Tabelle Gewichte). Die Gesamtsumme aller Gewichte sollen
aber (auch wenn nicht gerade DB-konform) in der Lieferscheintabelle abgelegt
werden. Da die DB von Damen mit sehr schnellen Fingern zur Erfassung von
Lieferscheinen und deren Gewichte benutzt werden soll, soll diese auch ohne
zur Hilfenahme der Maus funktionieren.

Aufbau des kompletten Erfassungsfoms:

Hauptform:
LieferscheinID
Kunde
Gesamtgewicht
-------------->UFo (Endlosformular):
LieferscheinID (Verknüpfungsfeld)
Gewicht


Gruss

Holger


Christian Lindemann

unread,
Oct 11, 2000, 6:56:59 PM10/11/00
to
> ich kann Dir gerne mal die Mini-BeispielDB mailen. Hier sind dann ohne viele
> Worte die Probleme erkennbar.

da ich kein Access-Profi bin, hält sich mein email-Zulauf diesbezüglich noch in
Grenzen *g*
also schmeiss rüber, das Teil

> Vielleicht noch mal meine Aufgabenstellung an die DB.
> Die DB soll zur Erfassung von Lieferscheinen dienen (Hauptform; Tabelle
> Lieferscheine). Zu jedem Lieferschein werden die Gewichte von Waren
> festgehalten (UFo; Tabelle Gewichte). Die Gesamtsumme aller Gewichte sollen
> aber (auch wenn nicht gerade DB-konform) in der Lieferscheintabelle abgelegt
> werden. Da die DB von Damen mit sehr schnellen Fingern zur Erfassung von
> Lieferscheinen und deren Gewichte benutzt werden soll, soll diese auch ohne
> zur Hilfenahme der Maus funktionieren.

Ein Tip zur Gestaltung des Formulars in Bezug auf den Umlauf der Tab-Taste
(Wechsel zwischen Haupt- und Unterformular ohne Zuhilfenahme der Strg-Taste)
gibt Frank Hentzschel.
Betreff: Re: Aktivierreihenfolge-UFo
Datum: Wed, 11 Oct 2000

(o: Christian

0 new messages