collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 79
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

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 958 mal)

Offline Jochen1

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

nun glaube ich, dass ich es Dank Eurer Hilfe nun hinbekommen habe, der Hinweis von Lachtaube hat auch geholfen, denn ich hatte vorher offensichtlich keine Ereignisprozedur (sondern den Ausdruck nur in das Feld geschrieben).

Das zu berechnende Tabellenfeld D gibt den in E berechneten Wert wieder, das klappt also  :).

Noch eine kleine Frage: Wie kann ich vermeiden, dass das berechnete Feld E erst den Focus erhalten muss, damit die Speicherung im Feld D erfolgt (zumindest war das bei mir so) ?

Schon mal vielen Dank, das war ein grosser Schritt nach vorne.

Jochen

P.S.: Ich nehme auch mit, dass es zielführender ist, das Problem zunächst anhand einer Beispieldatenbank nachzustellen. Leider kann ich sie nicht nicht hochladen, da (Access 2010) im accdb-Format. Wie kann ich das bewerkstelligen ?
_______________
Access 2010
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7503
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #16 am: Oktober 09, 2018, 19:46:00 »
Hallo,
Zitat
Wie kann ich das bewerkstelligen ?
Beispieldb erstellen > Komprimieren/reparieren > Zipfile erstellen > Zipfile hochladen.
Gruß
Klaus
 
Folgende Mitglieder bedankten sich: Jochen1

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1432
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #17 am: Oktober 09, 2018, 20:00:14 »
Verwende das Vor Aktualisierung Ereignis des Formulars. Und wie gesagt, genügt es, wenn das Zielfeld in der Datenherkunft des Formulars vorhanden ist. Du musst kein Steuerelement dafür verwenden. Dasselbe Ergebnis zweimal anzuzeigen bringt ja schließlich keinen Mehrwert.
Grüße von der (⌒▽⌒)
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #18 am: Oktober 10, 2018, 08:15:58 »
Guten Morgen,

so, nun die gezippte Beispieldatenbank.

Im Formular ist -für Testzwecke- noch das Tabellenfeld D enthalten, um zu sehen, in welchem Zeitpunkt der Wert in die Tabelle geschrieben wird.

Ich habe die Formel nun in der Ereignisprozedur "VorAktualisierung" (der einzelnen Felder), nur leider scheint auch in diesem Fall D erst nach Fokusverlust von E aktualisiert zu werden.

Wenn wir das noch lösen könnten, wäre es perfekt.

Schon jetzt vielen Dank für Eure Geduld und Unterstützung !

Jochen

P.S. Nun hoffe ich auch, dass es keine Zeichenbeschränkung gibt.....

_______________
Access 2010
 

Offline DF6GL

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


siehe Anhang

btw:
wie schon erwähnt, ist das Speichern  berechneter Werte Unsinn.
« Letzte Änderung: Oktober 10, 2018, 09:33:45 von DF6GL »
 
Folgende Mitglieder bedankten sich: Jochen1

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1432
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #20 am: Oktober 10, 2018, 09:38:25 »
@Jochen,

die Berechnung in VBA zu wiederholen ist dann doch etwas kontraproduktiv.

VBA-Modul des Formulars
Option Compare Database
Option Explicit

Private Sub A_BeforeUpdate(Cancel As Integer)
   'Me!D = [A] + [B] + [C]
   Me.Text24 = Me.E 'über den Namen des Steuerelements
End Sub

Private Sub B_BeforeUpdate(Cancel As Integer)
   'Me!D = [A] + [B] + [C]
   Me.D = Me.E 'das sieht man erst nach dem Speichern des Datensatzes
End Sub

Private Sub C_BeforeUpdate(Cancel As Integer)
   'Me!D = [A] + [B] + [C]
   Me.Text24 = Me.E
End Sub

'Mit einem weiteren Feld 'F' als Zielfeld der Berechnung
'in der Tabelle, ohne dass es an ein Steuerelement gebunden
'ist, erfordert weitaus geringeren Aufwand.''Datenherkunft neu setzen, damit das Formular 'F' kennenlernt.
Private Sub Form_BeforeUpdate(Cancel As Integer)
   Me.F = Me.E
End Sub

Eine Aktualisierungsabfrage für ein Feld G, könnte so aussehen. (In die SQL-Ansicht einer neuen Abfrage kopieren.)
UPDATE tbl_A AS a
SET    G = a.A + a.B + a.CWHERE  G Is Not Null;

PS:wenn Deine Ausgangsfelder auch Null-Werte enthalten können, verwende in den Ausdrücken die Nz()-Funktion. Also in E: =Nz([A];0)+Nz(;0)+Nz([C];0). In der SQL-Ansicht wäre das Semikolon gegen ein Komma auszutauschen.

PPS: und findet eine Änderung von A, B oder C außerhalb des Formulars statt, ist das Ergebnis garantiert falsch und muss durch eine Aktualisierungsabfrage erneuert werden. Besser sicherer wäre es jedoch, ab Access 2010 ein Datenmakro zu verwenden.


Generell sei noch angemerkt, dass die Datenform im Beispiel der Aufzählungsfelder A, B, C wegen, besser in eine andere Struktur übergeführt werden sollte, um dann z.B. mit der Sum()-Aggregatfunktion das Ergebnis ermitteln zukönnen.
IDHerkunftA
1
A
10
3
A
20
4
A
40
5
A
50
1
B
20
3
B
30
4
B
50
5
B
60
1
C
30
3
C
40
4
C
60
5
C
70
« Letzte Änderung: Oktober 10, 2018, 10:03:23 von Lachtaube »
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: Jochen1

Offline Jochen1

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

zunächst vielen Dank für die überarbeitete Datenbank und die Vielzahl von Anregungen, die ich mir als Access-Laie noch zu Gemüte führen muss.

@Klaus:
Danke, ich habe auch grundsätzlich verstanden, keine berechneten Werte in der Tabelle zu speichern.

Vielleicht ist mein Ausgangspunkt aber ein etwas anderer:
Den berechneten Wert E müsste ich (ausserhalb von Access) zunächst mit Excel oder einem Taschenrechner ermitteln. Es ist in der Tat keine Aufgabe für Access. Ich benötige dieses Berechnungsergebnis jedoch, um mit ihm weiterzuarbeiten. Folglich müsste ich also sowieso dafür ein Tabellenfeld definieren und den Wert dann manuell in mein Ausgangsformular (und damit die Tabelle) eingeben. Um mir aber Arbeit zu sparen und gleichzeitig etwaige Berechnungsfehler zu vermeiden, dachte ich, dies gleich durch Access in einer Art Vorstufe in einer Registerkarte erledigen zu lassen. Und der Wert muss auch nicht stets aufs Neue z.B. in einer Abfrage ermittelt werden. Daher denke ich, dass meine Idee in diesem Ausnahmefall erlaubt sein sollte...

@Lachtaube:
Auch Dir vielen Dank auch für die Aktualisierungsabfrage und die VBA Darstellung. Mir glüht nun der Kopf zwischen Ereignisprozedur, VBA und Datenmakro.... Ich muss nun sehen, was das Beste wäre, aber mir gefällt die Lösung mit der Ereignisprozedur in der Beispielsdatenbank ziemlich gut; da ich nicht so bewandert bin, suche ich auch etwas, was ich auch nach einem Jahr noch nachvollziehen kann, sollte ich etwas ändern wollen.

Danke auch für den Strukturhinweis -Das Beispiel und die Zahlen waren jedoch rein fiktiv, ich wollte nur den Mechanismus und die Aktualisierung testen. Dein Vorschlag und der Thread insgesamt ermahnt mich, regelmässig über die Struktur nachzudenken.

Zum PPS: Mir ist klar, dass eine Berechnug dort keinen Sinn macht, wenn sich Daten ändern und dann der Wert im Tabellenfeld "veraltet" ist. Aber: Die Werte ändern sich nicht. Und wenn doch, dann nutze ich ja ausschliesslich dieses Formular. Der Wert, den ich übrigens ermittele, steht ausschliesslich in einer 1:1-Beziehung im Datensatz.

Also nochmals vielen Dank für die Geduld und Hilfe, Ihr habt mir sehr weitergeholfen.

Jochen
_______________
Access 2010
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 7503
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #22 am: Oktober 10, 2018, 17:53:26 »
Hallo,
Zitat
@Klaus:
Danke, ich habe auch grundsätzlich verstanden, keine berechneten Werte in der Tabelle zu speichern.
wieso ich, ich habe ja gar nichts mehr dazu gesagt.
Gruß
Klaus
 

Offline Jochen1

  • Access-User
  • *
  • Beiträge: 82
Re: Speichern berechneter Werte in der zugrundeliegenden Tabelle
« Antwort #23 am: Oktober 11, 2018, 16:30:12 »
Entschuldigung Klaus, ich habe den Franz gemeint.
Jochen
_______________
Access 2010
 

 

Wie: Endlosormular verifizieren vor dem Speichern?

Begonnen von StephanCBoard Formular

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

Begonnen von lilienthalBoard Access Programmierung

Antworten: 1
Aufrufe: 6475
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: 11006
Letzter Beitrag Juli 29, 2010, 13:35:19
von ohnePlan