collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 88
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 1

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 14132
  • stats Beiträge insgesamt: 68386
  • stats Themen insgesamt: 9210
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Speichern berechneter Werte in der zugrundeliegenden Tabelle  (Gelesen 962 mal)

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Hallo,

nach langem Experimentieren mit meinem Problem benötige ich Eure Unterstützung, da ich nicht weiterkomme und wäre dankbar, wenn Ihr mir (erneut) helfen könntet.

Ich nutze Access 2010 und besitze ein Formular frmA, dessen Datenherkunft auf Tabelle tblA beruht. Das frmA besitzt für bessere Übersichtlichkeit auch mehrere Registerkarten. Die in das frmA (bzw. dessen Registerkarten) eingegebenen Daten werden (neben den Daten weiterer Tabellen) in mehreren unterschiedlichen Abfragen, Formularen und Berichten weiterverarbeitet.

Der Ausgangspunkt meines Problems liegt darin, dass es mir bisher nicht gelungen ist, die in frmA (in einem Steuerelement auf einer Registerkarte) vorgenommene Berechnungen mit den Ergebnissen XY in den entsprechenden Feldern der zugrundeliegenden Tabelle (tblA) zu speichern.

Mir ist bewusst, dass dieses Vorhaben unüblich und idR nicht zu empfehlen ist, aber in meinem Fall sinnvoll, denn die Werte XY werden nur einmal berechnet und dann nicht mehr verändert. Sie sollen aber für einen späteren Vergleich in  bzw. für diesen Datensatz weiterhin zur Verfügung stehen.

Weil ich die Werte XY bisher nicht speichern kann, berechne ich diese Werte statt in dem frmA nun in der qryA, in der auch sonst alle weiteren Berechnungen zentral durchgeführt werden. Die Daten gelangen dann in das frmA per DomWert-Abfrage. Die Daten werden in frmA angezeigt, da sie eine Entscheidungsgrundlage für die Eingabe der weiteren Daten bilden.

Diese Vorgehensweise ist leider nicht optimal, denn zum einen wird die qryA aufgebläht und die Berechnung erfolgt für XY unnötigerweise stets aufs Neue. Das Rückspielen von XY in das frmA per DomWert ist auch zeitraubend und die Performance insgesamt leidet.

Folgendes habe ich bisher versucht:

1. Mittels einer Ereignisprozedur im berechneten Steuerelement:

a) Berechnung XY im frmA; in Eigenschaften „NachAktualisieren“ des berechneten Steuerelementes habe ich
Me![MeinTabellenfeld] = Me![MeinBerechnetesSteuerelement]
eingegeben (Quelle: DonKarl FAQ 4.11). Das funktioniert leider nicht. „VorAktualisieren“ hilft auch nicht. Was mache ich falsch ?
b) Liegt dies evtl daran, dass das berechnete Steuerelement sich auf einer Registerkarte befindet und ich es anders ansteuern muss ? Ich habe allerdings in Erinnerung, dass Registerkarten für die Ansteuerung bzw. Verwendung eines Steuerelementes keine Bedeutung besitzen.

2.) Berechnetes Feld in tblA

Eine gute Lösung für mich wäre ein berechnetes Tabellenfeld, auch wenn die Nutzung eines berechneten Feldes nicht den üblichen Konventionen entspricht. Daher habe ich meine ursprüngliche Access-mdb (2000) in das Format Access 2007-2010 konvertiert und alles importiert. Das hat grundsätzlich (bis auf wenige Ausnahmen) gut geklappt.
Einzelne Felder in der Tabelle liessen sich testweise auch reibungslos berechnen, also grundsätzlich eine gute Alternative für mich.

Leider bestehen die Wertermittlungen für XY auch aus komplexen Formeln (Wenn...dann etc.). Leider erhalte ich dann die Fehlermeldung: „Die Eigenschaftseinstellung kann nicht grösser als 2KB sein, Fehler 3309.“ Dies stellt mich vor neue ungeahnte Herausforderungen.... Kann man die Speichergrösse für die „Eigenschaften“ irgendwo (in der Registry ?) ändern, und wie ?

3. Datenherkunft frmA ändern

Es ist leider idF auch keine Lösung, die Datenherkunft von frmA auf eine qry umzustellen, da ich dann überhaupt keine eingegebenen Werte aus frmA mehr in tblA speichern kann. Das hatte ich vorher und auf Anraten in diesem Forum in tblA geändert http://www.access-o-mania.de/forum/index.php?topic=21298.msg121015#msg121015.

4. Separate Tabelle für XY

Ich könnte vermutlich auch die Felder für XY in eine separate Tabelle tblB auslagern und die Tabellen verküpfen, dennoch muss ich die Berechnungen dann auch erst einmal in tblB bekommen....

Lange Rede kurzer Sinn:
Wie bekomme ich die in frmA errechneten Werte in die Datenfelder der tblA, bevorzugt mittels einem der Lösungsansätze aus 1. oder 2. ?

Ich hoffe, ich habe mein Problem verständlich geschildert und würde mich freuen, wenn mir jemand aus diesem Forum den entscheidenden Lösungshinweis für diesen Schlamassel geben könnte !

Vielen Dank und Grüße,
Jochen
_______________
Access 2010
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7503
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #1 am: Oktober 08, 2018, 19:23:55 »
Hallo,
Du hast viel geschrieben, aber nichts gesagt.
Me![MeinTabellenfeld] = Me![MeinBerechnetesSteuerelement]Das müsste funktionieren. Beide Felder müssen aber auf dem Formular vorhanden sein und das Formularfeld "MeinTabellenfeld" muss an das entsprechende Tabellenfeld gebunden sein. Die Registerkarten spielen keine Rolle. Das Speichern von berechneten Werten ist aber zu vermeiden, wie Du ja bereits erkannt hast.
Zitat
Leider bestehen die Wertermittlungen für XY auch aus komplexen Formeln (Wenn...dann etc.).
Formeln mit wenn ... Dann sind fast immer ein Hinweis auf ein nicht normalisiertes Datenmodell. Auch Domwert sollte in einer korrekt aufgebauten Datenbank nicht erforderlich sein.

Ich denke, da ist bereits die Grundstruktur ungeeignet und eher excellastig.
Kannst Du mal ein Bild des Beziehungsfensters posten.
Auch in Deinem (verlinkten Thema) ist zum Datenmodell nichts zu finden.
« Letzte Änderung: Oktober 08, 2018, 19:27:58 von MzKlMu »
Gruß
Klaus
 

Offline PhilS

  • Global Moderator
  • Access-Profi
  • *****
  • Beiträge: 391
    • Tipps zu Access, VBA, SQL und Co.
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #2 am: Oktober 08, 2018, 19:41:40 »
Ich beschränke mich hier mal auf einen Kommentar zu dem berechneten Tabellenfeld...
Eine gute Lösung für mich wäre ein berechnetes Tabellenfeld,
[....]
Eigenschaftseinstellung kann nicht grösser als 2KB sein, Fehler 3309.“ Dies stellt mich vor neue ungeahnte Herausforderungen.... Kann man die Speichergrösse für die „Eigenschaften“ irgendwo (in der Registry ?) ändern, und wie ?
Nein, das Limit für die Textlänge des Ausdrucks lässt sich nicht ändern.
Macht aber auch nichts, weil dir ein Berechnetes Feld in der Tabelle nicht wirklich weiterhilft. Das Berechnete Feld wird bei einer Änderung der Ausgangswerte immer automatisch neu berechnet. Bringt dir also gar nichts, wenn du das in der Vergangenheit errechnete Ergebnis als Referenz speichern willst.

Grundsätzlich schließe ich mich Klaus' Meinung an. Dass dein Ausdruck länger als 2000 Zeichen sein muss, kann ein Anzeichen für ein suboptimales Datenmodell sein.
« Letzte Änderung: Oktober 08, 2018, 21:17:55 von PhilS »
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 951
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #3 am: Oktober 08, 2018, 21:11:04 »
Berechnungen -  was steckt wirklich dahinter?
Eine Multiplikation mit 1 würde ich nicht speichern, das berechnete Klima für die nächsten 10 Jahre schon (weil es einfach Riesenaufwand ist).

Zitat
wird die qryA aufgebläht
Wie darf man sich das vorstellen?
Ich habe schon einige Abfragen geschrieben und andere bei solchen unterstützt, ein solches Phänomen ist mir noch nie begegnet.
Zitat
Leider bestehen die Wertermittlungen für XY auch aus komplexen Formeln (Wenn...dann etc.).
Auch da fehlt mir eine Vorstellung. Was ist an Wenn-Dann komplex?
Formeln sind eine Anleihe aus Excel, Wenn-Dann-Kaskaden auch. Wenn Du also versuchst, Excellogik in einer Datenbank 1:1 umzusetzen, so kann das durchaus anstrengend sein. Vielleicht versucht man es mit Datenbanklogik ...? Es könnte die Herausforderungen in ganz andere Bereiche verschieben.
Mit freundlichem Glück Auf!

Eberhard
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #4 am: Oktober 09, 2018, 10:03:21 »
Hallo,

vielen Dank für die Antworten.

Zitat
Code: [Auswählen]

Me![MeinTabellenfeld] = Me![MeinBerechnetesSteuerelement]

Das müsste funktionieren. Beide Felder müssen aber auf dem Formular vorhanden sein und das Formularfeld "MeinTabellenfeld" muss an das entsprechende Tabellenfeld gebunden sein.

Vielen Dank für diesen Hinweis, ich hatte bisher [MeinTabellenfeld] nicht zusätzlich auf dem Formular, das habe ich nun nachgeholt. Das Feld besitzt den gleichen "Namen" und "Steuerelementinhalt" wie das Feld der zugrundeliegenden Tabelle (damit ist es doch an diese Tabelle gebunden ?).

In den Eigenschaften von [MeinBerechnetesSteuerelement] steht in "NachAktualisieren" die obige Formel.

Leider funktioniert die Speicherung des Wertes in [MeinTabellenfeld] (immer noch) nicht, in tblA wird nichts geschrieben.

Meine Vermutung ist, dass durch "NachAktualisieren" das Ereignis nicht ausgelöst wird.

Zu Euren Anmerkungen:
Vielen Dank dafür. Es mag sein, dass die Datenbankstruktur (nach Euren Massstäben) nicht optimal ist, ich glaube aber, dass dies in diesem Fall und für meine Frage zunächst von untergeordneter Bedeutung ist. Ich denke selbstverständlich darüber nach, sie zu verbessern (was aber zu anderen Problemen und Mehraufwand an anderer Stelle führt).

Die "Wenn Dann Berechnung" benötige ich für die Berechnung unterschiedlicher Werte, je nach zugrundeliegendem Datensatz. Beispiel "Positionsgrössenberechnung" für Wertpapiere: Die Anzahl der zu erwerbenden Wertpapiere ermittelt sich nach einer anderen Formel, je nachdem, ob es sich um eine Aktie oder z.B. ein Zertifikat (wg. Basispreis und Bezugsverhältnis) handelt. Dieser ermittelte Wert, nämlich die "Plan-Anzahl" wird im Formular angezeigt (und für die Ermittlung voraussichtlicher Anschaffungskosten weiterverwendet). Er soll für einen späteren Vergleich gespeichert werden. Wie bereits geschrieben, ändern sich die Ausgangswerte in der Zukunft nicht mehr. Das Ergebnis muss daher auch nicht stets neu in der Abfrage qryA berechnet werden (in qryA). Dann entfällt auch die DomWert-Zurückspiegelung ins Formular.

M.E. ist daher die Wenn..Dann Formel m.E. nicht excellastig, sondern der Berechnungsstruktur geschuldet. Für ein berechnetes Tabellenfeld ist sie allerdings offensichtlich zu lang (nicht zu "komplex"), so dass die Summe der Eigenschaften dann die 2KB überschreitet.

Daher wäre ich Euch wirklich sehr dankbar, wenn Ihr mir helft, den Wert irgendwie in die Tabelle zu speichern. Evtl. teile ich die Tabelle später weiter auf, um die Struktur zu verbessern, zunächst muss ich aber dieses Problem lösen.

Viele Grüße,
Jochen
_______________
Access 2010
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23512
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #5 am: Oktober 09, 2018, 10:26:03 »
Hallo,

es ist (mir) nicht klar, wie und wo diese Berechnungen denn nun gemacht werden...

Das Ergebnis steht in einem Feld namens "MeinBerechnetesSteuerelement",  aber wo und wie gibst Du die Anfangswerte und den Algorithmus ein?


Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1432
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #6 am: Oktober 09, 2018, 10:30:52 »
Bei allen Steuerelementen, die in die Berechnung einfließen, muss das Nach Aktualisierung Ereignis herangezogen werden, damit der Feldinhalt in das berechnete Feld eingetragen wird. Hast Du z.B. Einzelpreis, Steuersatz und Mengenangabe, um den Gesamtpreis zu ermitteln, müsste für jedes der drei Steuerelemente das Nach Aktualisierung Ereignis genutzt werden, weil jede Änderung in einem der Steuerelemente das Ergebnis der Berechnung beeinflusst. Im Feld mit dem Rechenausdruck findet kein Aktualisieren statt.
Die zweite Variante ist bei vielen abhängigen Feldern weitaus weniger aufwendig.
Eine andere Methode wäre, die Berechnung von einer Aktualisierungsabfrage erledigen zu lassen.

PS: Es muss kein Steuerelement im Formular für den Emmpfang der Berechnung bereitgestellt werden. Es genügt, wenn das Feld in der Datenherkunft (bei einer Tabelle ist das immer der Fall, bei einer Abfrage ist das Feld in die Feldliste aufzunehmen) vorhanden ist.
Grüße von der (⌒▽⌒)
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #7 am: Oktober 09, 2018, 12:17:28 »
Hallo,

danke für Eure Antworten.

@Klaus:
Das frmA ist an die tblA gebunden. Die Tabellenfelder A, B, und C befinden sich jeweils als Steuerelement auf dem Formular. Hier werden die Ausgangsdaten eingegeben (und mithin in der Tabelle in A, B, und C gespeichert). D ist ein Tabellenfeld. Das berechnete Steuerelement "E_Berechnet"] befindet sich auch auf dem Formular. Steuerelementinhalt von E_Berechnet: 'A+B+C'. Das Ergebnis soll gespeichert werden.

@Lachtaube:
Das klingt nach einem echten Lichtblick ! Etwas Ähnliches hatte ich schon einmal in einem anderen Forum gelesen, aber irgendwie nicht verstanden, es umzusetzen.
Wenn ich es nun richtig verstehe, muss ich nun in allen zugrundeliegenden Feldern auf dem Formular (d.h. hier den Feldern A, B und C) jeweils in "NachAktualisierung" eingeben:

Me![D] = Me![E_Berechnet]

Stimmt das so ? Dann werde ich es so ausprobieren.

Die Aktualisierungsabfrage ist auch eine gute Idee.

Viele Grüße,
Jochen
« Letzte Änderung: Oktober 09, 2018, 12:23:46 von Jochen1 »
_______________
Access 2010
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #8 am: Oktober 09, 2018, 12:39:53 »
@Lachtaube:
Bei "NachAktualisieren" passiert in "E_Berechnet" leider nichts.
Wenn ich aber den Ausdruck  "Me![D] = Me![E_Berechnet]" in "BeiFokusverlust" eingebe, erhalte ich eine Fehlermeldung:

Zitat
Dieser Ausdruck hat einen Fehler verursacht: Das Objekt enthält das Automatisierungsobjekt `Me`nicht.

Die Erläuterung zu dem Fehler (Eigenschaft des Formulars bei OnOpen steht auf "Field") verstehe ich auch nicht, denn ich sehe in den Eigenschaften des Formulars nichts diesbezügliches, oder wo muss ich nachsehen ?

Viele Grüße,
Jochen


_______________
Access 2010
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1965
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #9 am: Oktober 09, 2018, 13:43:45 »
Hallo Jochen,
Zitat
Me![D] = Me![E_Berechnet]
Stimmt das so ? Dann werde ich es so ausprobieren.
Nein.
Me!E_Berechnet = DeinBerechnungsergebnisgruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #10 am: Oktober 09, 2018, 14:25:05 »
Hallo ekkehart,

danke, nur: Das verstehe ich nicht. Um im Beispiel zu bleiben, bedeutet es im Feld A (und B,C) dann unter "NachAktualisieren":

Me!E_Berechnet = A+B+C
oder vielmehr
Me!D = A+B+C

(denn E_Berechnet ist ja kein Tabellenfeld) ? Und 'Me!E_Berechnet = A+B+C' wird ja nicht benötigt, denn das Feld wird ja bereits auf dem Formular automatisch mit A+B+C berechnet und muss ja nicht extra durch "NachAktualisieren" angestossen werden.
 
Ich stehe auf dem Schlauch, vielleicht, weil ich nicht weiss, was mit "DeinBerechnungsergebnis" in diesem Beispiel gemeint ist.
Jochen
_______________
Access 2010
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1432
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #11 am: Oktober 09, 2018, 14:50:19 »
@Jochen,

damit wir vom selben sprechen. Alle hier und in den bei Don Karl gezeigten/erwähnten Anweisungen stellen VBA-Code dar. Du musst also für die Ereignisse jeweils eine Ereignisprozedur einstellen (über den Dropdown-Pfeil im Eigenschaftsblatt) und danach auf den Knopf rechts daneben mit der Ellipse (...) klicken. Dann bist Du (anfangs einmalig nach kurzer Wartezeit) im VBA-Editor. Access erstellt dabei den Rumpf der Ereignisprozedur selbstständig. Der Code gehört dann in eine leere Zeile zwischen Private Sub Steuerelementname_AfterUpdate() und End Sub.
Grüße von der (⌒▽⌒)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1965
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #12 am: Oktober 09, 2018, 14:54:16 »
Hallo Jochen,
Zitat
bedeutet es im Feld A (und B,C) dann unter "NachAktualisieren":
Ja bzw.
Me!DeinTabellenFeldMitErgebnis = A+B+C(NULL-Werte müssten dabei noch abgefangen werden)

Zitat
weil ich nicht weiss, was mit "DeinBerechnungsergebnis
Na, dies
Zitat
Die "Wenn Dann Berechnung" benötige ich für die Berechnung unterschiedlicher Werte
Hier kommt doch ein Wert zurück, den du speichern willst; - oder habe
ich das falsch verstanden?
Vielleicht zeigst uns diesen Code auch einmal.

gruss ekkehard

edit:
Gerade Lachtaubes Post gelesen, also
Private Sub FeldA_AfterUpdate()   ' oder B oder C
    Me!DeinTabellenFeldMitErgebnis = DeinBerechnungsergebnis
End Sub
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #13 am: Oktober 09, 2018, 15:37:38 »
Hallo,

danke, das klappt leider nicht. Ich glaube, es ist am Einfachsten, ich erstelle eine kleine Beispielsdatenbank mit Formular und Werten und lade sie morgen früh hoch. Dann wird mein Fehler wahrscheinlich deutlich.

Danke,
Jochen 
_______________
Access 2010
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1965
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #14 am: Oktober 09, 2018, 16:32:09 »
Gute Idee.
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 
Folgende Mitglieder bedankten sich: Jochen1

 

Wie: Endlosormular verifizieren vor dem Speichern?

Begonnen von StephanCBoard Formular

Antworten: 10
Aufrufe: 7239
Letzter Beitrag Mai 09, 2010, 23:42:31
von database
Hyperlink per VBA speichern

Begonnen von lilienthalBoard Access Programmierung

Antworten: 1
Aufrufe: 6476
Letzter Beitrag Mai 12, 2010, 11:11:54
von lilienthal
Speichern von Inhalten aus Formular mit kombifeld

Begonnen von thomutBoard Tabelle/Abfrage

Antworten: 5
Aufrufe: 4101
Letzter Beitrag Mai 31, 2010, 20:15:12
von database
SQL Tabellenverknüpfung speichern

Begonnen von cyberchrisBoard Tabelle/Abfrage

Antworten: 33
Aufrufe: 17568
Letzter Beitrag August 12, 2010, 12:55:39
von database
Makro zum Speichern einer Arbeitsmappe

Begonnen von ohnePlanBoard Microsoft Excel

Antworten: 16
Aufrufe: 11007
Letzter Beitrag Juli 29, 2010, 13:35:19
von ohnePlan