Forums Neueste Beiträge
 

refresh oder requery oder recalc?

06/12/2007 - 11:39 von Meggy Kantert | Report spam
Liebe Experten,

ich bitte um Hilfe bei dem folgenden Code (Access 2003)
Ziel ist , wenn SumBreite größer als die MaschBreite ist, kommt eine
Messagebox mit dem u.g. Text und der Cursor geht in Breite_1. Das
funktioniert auch, aber nur, nachdem man in den nàchsten Datensatz und wieder
zurückgegangen ist. Also SumBreite (ist ein Textfeld im UFo, das
Breite1*Breite2 rechnet und für alle betroffenen Datensàtze im Formularfuß
summiert) wird offensichtlich nicht nach Verlassen von Breite_2 neu
berechnet. Ich habe schon mit requery, recalc und refresh experimentiert, das
Ergebnis ist immer die verspàtete Neukalkulation-

Viele Grüße und vielen Dank im Vorraus
Meggy

Private Sub Breite_2_Exit(Cancel As Integer)

Dim varMaschinenbreite_A
Dim varMaschBreite
Dim varSumBreite
Dim varBreite_2

Tb_SumBreite.Requery

varSumBreite = Me!Tb_SumBreite
varMaschBreite = Parent!Tb_Maschinenbreite_A
varBreite_2 = Me!Tb_Breite_2

If varSumBreite < varMaschBreite Then
DoCmd.GoToControl "Tb_Kunde"
ElseIf IsNull(Me!Tb_Breite_2) Then
DoCmd.GoToControl "Tb_Kunde"
Else
MsgBox ("Breite * Menge darf die angegebene Maschinenbreite nicht
überschreiten, bitte korrigieren")
DoCmd.GoToControl "Tb_Breite_1"
End If

End Sub
 

Lesen sie die antworten

#1 Karl Donaubauer
06/12/2007 - 12:05 | Warnen spam
Meggy Kantert wrote:
ich bitte um Hilfe bei dem folgenden Code (Access 2003)
Ziel ist , wenn SumBreite größer als die MaschBreite ist, kommt eine
Messagebox mit dem u.g. Text und der Cursor geht in Breite_1. Das
funktioniert auch, aber nur, nachdem man in den nàchsten Datensatz und
wieder zurückgegangen ist. Also SumBreite (ist ein Textfeld im UFo, das
Breite1*Breite2 rechnet und für alle betroffenen Datensàtze im Formularfuß
summiert) wird offensichtlich nicht nach Verlassen von Breite_2 neu
berechnet. Ich habe schon mit requery, recalc und refresh experimentiert,
das Ergebnis ist immer die verspàtete Neukalkulation-
...
Private Sub Breite_2_Exit(Cancel As Integer)

Dim varMaschinenbreite_A
Dim varMaschBreite
Dim varSumBreite
Dim varBreite_2

Tb_SumBreite.Requery

varSumBreite = Me!Tb_SumBreite
varMaschBreite = Parent!Tb_Maschinenbreite_A
varBreite_2 = Me!Tb_Breite_2

If varSumBreite < varMaschBreite Then
DoCmd.GoToControl "Tb_Kunde"
ElseIf IsNull(Me!Tb_Breite_2) Then
DoCmd.GoToControl "Tb_Kunde"
Else
MsgBox ("Breite * Menge darf die angegebene Maschinenbreite nicht
überschreiten, bitte korrigieren")
DoCmd.GoToControl "Tb_Breite_1"
End If

End Sub



Aggregatfunktionen wie Summe werden immer erst beim
Speichern des Datensatzes neu berechnet, weil sie eben
Berechnungen über Datensàtze machen.

Wenn du eine sofortige Neuberechnung willst, sobald Breite1
oder Breite2 veràndert werden, dann verwende im Ereignis
"Nach Aktualisierung" dieser beiden Felder:

Me.Dirty = False

Damit wird der DS gespeichert und sollte die Summe aktualisiert
werden.

HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com
Access-Entwickler-Konferenz: www.donkarl.com/?AEK
SQL Server-Entwickler-Konferenz: www.donkarl.com/?SEK

Ähnliche fragen