Waarde naar veld in hoofdformulier sturen

  • Onderwerp starter Onderwerp starter Jors
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Jors

Gebruiker
Lid geworden
1 okt 2006
Berichten
142
Goedendag,
na een tijdje van afwezigheid heb ik weer eens hulp nodig.

Ik wil een gemiddelde waarde van een aantal records op een doorlopend subformulier laten wijzigen op het hoofdformulier zodra deze geupdate wordt.

Ik heb dit geprobeerd als volgt te doen:

Code:
Private Sub Standaardprijs_AfterUpdate()
Dim gemPrijs1 As Long
gemPrijs1 = txtGem.value
Me.Parent.GemPrijs.Value = gemPrijs1
End Sub

Als ik de variable gemPrijs1 in een msgbox zet dan is dit echter het gemiddelde van vóór de update. Dus stel dat er 500 en 600 als records ingevoerd zijn en ik voer daar 400 bij in, dan krijg ik 550 in een msgbox en niet 500. Het veranderen van de waarde op het hoofdformulier verandert dan dus wel, maar krijgt dus de verkeerde waarde mee.

Is hier een oplossing voor?
 
Je verwart denk ik Update met nieuw record toevoegen. Athans in je voorbeeld. Daar heb je de waarden 500 en 600, met als gemiddelde 550, en je wilt dan 400 toevoegen. Op het moment dat je het gemiddelde laat berekenen, is het record nog niet opgeslagen. En dus wordt het nog niet meegenomen in de berekening. Je zult zien, dat de berekening wel klopt als je tussen twee records schakelt, bijvoorbeeld vooruit en achteruit. Je kunt deze aanpassing eens proberen:

Code:
Private Sub Standaardprijs_AfterUpdate()
Dim gemPrijs1 As Long
     [B][COLOR="blue"]If Me.Dirty Then Me.Dirty=False[/COLOR][/B]
     gemPrijs1 = txtGem.value
     Me.Parent.GemPrijs.Value = gemPrijs1
End Sub
 
Je hebt inderdaad gelijk. Het goed inderdaad om een nieuw record in het subformulier (al zou het ook fijn zijn als bij een wijziging in het subformulier de gemprijs geupdate wordt, maar dat zal in de praktijk nauwelijks voorkomen). De door jou voorgestelde code werkt helaas niet. Hij update keurig netjes de gemiddelde prijs van voor het toevoegen van de nieuwe record, maar de nieuwe record neemt ie dus niet mee helaas.

Is er wellicht een andere oplossing?
 
Je kan deze er nog eens bij proberen:
DoCmd.Runcommand acCmdSave
Zowel op je subformulier als je hoofdformulier.
 
Hhm dit lijkt ook geen effect te hebben. Ik heb ook geprobeerd de code in
Code:
Private Sub Form_AfterInsert()
van het subformulier te zetten.
te zetten, maar zonder effect. Het is als het ware alsof het hoofdformulier altijd 1 stap achter loopt ten opzichte van het subformulier..
 
Ik heb de oplossing helaas nog niet gevonden. Het lijkt alsof er een soort van "vertraging" in het berekenen van de gemiddelde prijs zit. Bij gebruik van de volgende code:

Code:
Dim gemPrijs1 As Long
gemPrijs1 = [subPrijsgegevens]![txtGem]
GemPrijs.Value = gemPrijs1

In form_load (of form_current) geeft namelijk altijd € 0,00, echter als ik exact dezelfde code aan een knop op het hoofdformulier toevoeg dan update hij wél de correcte prijs naar het betreffende veld. Als ik naar het veld [subPrijsgegevens]![txtGem] kijk op het subformulier, zie ik ook dat bij het laden het even duurt voordat dit veld ingevuld wordt, alsof hij het aan het berekeken is. Ik moet dus een manier zien te vinden om de waarde van dit veld pas op te halen, nádat deze berekend is.

Is hier een oplossing voor?
 
Oplossing gevonden! Er zat een stommigheidje in, ik bleef verwijzen naar dat veld waarin de gemiddelde waarde werd berekend, waardoor de vertraging kwam. Ik heb het nu als volgt gedaan:

Code:
Private Sub Form_AfterUpdate()
Dim gemprijs1 As Currency
 gemprijs1 = DAvg("[standaardprijs]", "tblPrijsgegevens", "[MeubelID] = forms!frmMeubilair!Id")
 Me.Parent.GemPrijs.Value = gemprijs1
End Sub

En deze ook bij Form_AfterInsert() en Form_Delete gezet en ik geloof dat het werkt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan