Hi Jan,
und Danke für Deine schnelle Antwort.
Vielleicht habe ich mich falsch ausgedrückt, aber die Werte
liegen nicht als Tabelle, sondern als Hardcopy-Datenblatt vor
und sollen nun über ein Access-Formular in eine Datenbank
eingetippt werden.
hast dich nicht falsch ausgedrückt, genau so hab ich das verstanden.
Du gibst im Form die vorhandenen Werte ein und der Rest soll von Acc. berechnet werden. Die eingegebenen Werte werden sofort an die Tabelle übergeben (macht Access!).
Da es in der Vergangenheit öfters zu Fehlern bei der Eingabe
kam, sollen nun die Spalten „Gewinn“ und „Verlust“ vom System
selbst berechnet werden, was ausserdem die Eingabezeit durch
den Einsatz von Formeln verringern soll.
Dafür werden die Felder nun ja berechnet.
Mal ein einfaches Beispiel! In Feld1 steht der Wert „1“ in Feld2 steht der Wert „2“. In Feld3 wird der Wert errechnet aus Feld1+Feld2, ergibt als Anzeigewert „3“. Da durch die Eingabe in Feld1 und Feld2 die Ursprungswerte vorhanden sind, ist es überflüssig in der Tabelle das Feld3 noch zu speichern. Schliesslich ist bekannt, dass das Ergebnis sich aus den vorhandenen beiden Feldern berechnen lässt.
Gleiches gilt auch bei deinem Formular. Die Formeln für die Berechnung hast du. Gut! Die können bei Bedarf doch immer wieder verwendet werden, um aus den vorhandenen Tabellenfeldern das Ergebnis neu zu berechnen. Klingt aufwändig, ist es aber nicht wirklich.
Eine Daten-Redundanz kann ich nur eingeschränkt erkennen, weil
zwar der Unterschied zwischen Verkaufspreis und Selbstkosten
schon dem Gewinn in diesem Fall entspricht, dieser jedoch
explizit und einzeln in der Datenbank (in einer entsprechenden
Spalte) für jeden Datensatz ausgewiesen werden soll.
und genau das ist der Punkt. Warum den Gewinn explizit speichern, wenn der Verkaufspreis und die Selbstkosten bereits vorhanden sind…
Für die Dateneingabe soll nur das Formular genutzt werden,
bedeutet nach meinem (Anfänger-
)-Verständnis, dass wenn ein
manueller Wert im Eingabeformular nachträglich in einem
Datensatz geändert wird, sich die automatischen Wert
gleichzeitig mitändern.
Wenn ausschliesslich über dieses Form Daten verändert werden, hast du recht!
Dass Access die Werte der Felder nicht in die Tabellen
übergibt, liegt daran, dass du die Berechnungen in den
Steuerelementinhalt der Felder eingebaut hast. somit sind das
ungebundene Felder, denen kein Tabellenfeld zugrunde liegt.
Access weiß daher auch nicht, dass der Wert in die Tabelle
eingefügt werden sollte,…
Ok, das ist der Grund, aber:
Wenn’s unbedingt sein muss…
Ja bitte…
Steuerelementinhalt auf das Tabellenfeld stellen, in dem der
jeweilige Wert gespeichert werden soll.
Ok, also Ausgangssituation wiederherstellen.
In den Ereignissen „Beim Anzeigen/Current“(Formular)
Habe ich leider nirgends gefunden…
Formular in Entwurfsansicht öffnen (sollte logisch sein), im linken oberen Eck des Formularfensters ist ein Kästchen mit einem schwarzen Quadrat drin. Darauf doppelklicken. Es öffnet sich das Formular-Eigenschaftenfenster. Hier solltest du die Zeile „Beim Anzeigen“ im Register „Ereignis“ finden. Dieses Ereignis kannst du aber vernachlässigen, wenn die berechneten Werte wirklich in der Tabelle gespeichert werden…das dient mehr zur Berechnung der Felder, wenn das Formular geöffnet oder der Datensatz gewechselt wird…
„Nach Aktualisierung/After Update“ der Felder mit manueller Eingabe
kannst du die Berechnung hinterlegen und an die Zielfelder die
Ergebnisse übergeben…
Klingt nach VBA, oder? Besonders der Teil mit „An die
Zielfelder übergeben“. Kenn mich da leider (noch…?) nicht
wirklich aus und werd das so wohl nicht umsetzen können…
VBA ist korrekt.
Ich nehme nochmal das Beispiel von oben!
Me!Feld3=Me!Feld1+Me!Feld2
Dadurch wird nicht nur die Berechnung durchgeführt, sondern das Ergebnis an das Zielfeld übergeben.(In diesem wird dann als Steuerelementinhalt das Tabellenfeld stehen und der Wert direkt in die Tabelle geschrieben.)
Um jetzt aber einen Fehler gleich auszuschliessen, würde ich zusätzlich noch prüfen, ob die Quellfelder 1 und 2 überhaupt einen Wert ungleich NULL und ungleich 0 haben. Je nach Rechnenfunktion ergibt das sonst nur eine Meldung von Access.
Aber trotzdem Danke für Deine Antwort…
Werd noch ein wenig rumbasteln. Vielleicht klappt es ja noch.
Mike