Validatieregel formulier

Status
Niet open voor verdere reacties.

Schrijfblok

Gebruiker
Lid geworden
7 dec 2010
Berichten
55
Hallo,

Vraagje over een validatieregel tussen 2 velden in een formulier.

Veld 1 = Totaal hoeveelheid, wordt opgehaald uit query
Veld 2 = Totaal besteld, optelsom (afkomstig uit voettekst subformulier "besteld")

In het subformulier "besteld" voert de gebruiker het aantal bestelde artikelen in, dit moet minder of gelijk zijn aan veld "Totaal hoeveelheid". Dus als "totaal besteld" groter is dan "totaal hoeveelheid" moet er een melding komen. Dit krijg ik niet werkend, denk omdat "totaal besteld" automatisch gegenereerd wordt.

Hoe fix ik dit?

bvd
 
bvd,

Wat heb je al gedaan dan om het te fixen?

Indien al wat geprobeerd laat dit even zien!

Groeten, Paul
 
bvd,

Wat heb je al gedaan dan om het te fixen?

Indien al wat geprobeerd laat dit even zien!

Groeten, Paul

Nou ik dacht gewoon iets van "<=[Totaal hoeveelheid]" als validatieregel bij "Totaal besteld" en dan een validatietekst maar dat werkt dus niet en ik denk omdat "Totaal besteld" automatisch gegenereerd wordt (optelsom).
 
Laatst bewerkt:
bvd,

Zet de volgende code in de formulier module van je subformulier.
Doe dit bij de afterupdate van het veld waar het aantal ingevoerd word.

Code:
Private Sub txtBesteld_AfterUpdate()
  'txtHoeveelheid staat op het hoofdformulier
  'txtBesteld = het recordveldveld op het subformulier
  'txtTotaalbBesteld = berekend veld voor som(txtBesteld)
  
  If Me.txtTotaalBesteld + txtBesteld = Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = gelijk aan " & Parent.txtHoeveelheid, , "Gelijk"
  ElseIf txtTotaalBesteld + txtBesteld > Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = groter dan " & Parent.txtHoeveelheid, , "Groter"
  Else
    MsgBox "Totaal besteld = kleiner dan " & Parent.txtHoeveelheid, , "Kleiner"
  End If
End Sub

Groeten, Paul
 
@Paul,

bvd heet Schrijfblok en Schrijfblok bedoelt met bvd, "bij voorbaat dank" volgens mij.
 
bvd,

Zet de volgende code in de formulier module van je subformulier.
Doe dit bij de afterupdate van het veld waar het aantal ingevoerd word.

Code:
Private Sub txtBesteld_AfterUpdate()
  'txtHoeveelheid staat op het hoofdformulier
  'txtBesteld = het recordveldveld op het subformulier
  'txtTotaalbBesteld = berekend veld voor som(txtBesteld)
  
  If Me.txtTotaalBesteld + txtBesteld = Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = gelijk aan " & Parent.txtHoeveelheid, , "Gelijk"
  ElseIf txtTotaalBesteld + txtBesteld > Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = groter dan " & Parent.txtHoeveelheid, , "Groter"
  Else
    MsgBox "Totaal besteld = kleiner dan " & Parent.txtHoeveelheid, , "Kleiner"
  End If
End Sub

Groeten, Paul

edit: kom er niet aan uit, weet ten eerste niet waar ik de code moet plaatsen, bij de "na bijwerken" optie van het subformulier zelf, het veld totaal hoeveelheid in het subformulier of het veld totaal besteld in het hoofdformulier? en ten tweede heb ik maar 2 velden ipv 3 zoals in jouw code:
Veld 1 = Totaal hoeveelheid, wordt opgehaald uit query
Veld 2 = Totaal besteld, optelsom (afkomstig uit voettekst subformulier "besteld")
 
Laatst bewerkt:
Schrijblok,

De uitleg staat in de eerste 3 regels van de code.
Ik heb jouw tekstvak Totaal Hoeveelheid in mijn voorbeeld txtHoeveelheid genoemd.
En jouw berekend tekstvak Totaal besteld noem ik in mijn voorbeeld txtTotaalBesteld.

Dan kan ik er beter mee rekenen zoals in de code.

De naam van het tekstvak op het subformulier waar je het aantal invult heb ik txtBesteld genoemd.

Dus als je dit overneemt in jouw hoofd- en subformulier kun je de code dus aan het veld txtBesteld hangen bij deAfter_Update gebeurtenis.

Groeten, Paul
 
Paul,

Ik heb het precies (blijkbaar niet anders ging het goed) gedaan zoals je zei maar ik krijg een #fout in het txttotaalbesteld veld :confused:

krijg ook compileerfout: kan de methode of het gegevenslid niet vinden en hij selecteert dan .txttotaalbesteld. Deze melding verschijnt zodra ik een nieuwe regel txtbesteld toevoeg.

Je moet het zien als iemand die
2
3
4
enz. invult bij het subformulier (veld txtbesteld). bij txthoeveelheid staat bijv. 10 en bij txttotaalbesteld 9 (optelsom van de txtbesteld regels) zodra iemand een nieuwe regel invult die groter is dan 1 moet er een melding komen.

Het wordt wel heel vaag nu, hoop dat iemand het nog snapt....
 
Laatst bewerkt:
Schrijblok,

Staat er het volgende in txtTotaalBesteld bij:
Besturingselementbron = Som([besturingselementbron] van txtBesteld)?

Groeten, Paul
 
Nee, daar staat
=[Subformulier Tabel_Orderdetails]!Totaal

Want de optelsom wordt gedaan in de voettekst van het subformulier zodat deze niet weergegeven wordt.

En in Totaal staat dan =Som([txtBesteld])
 
Laatst bewerkt:
Schrijfblok,

De laatste zin is essentieel, want er staat:

En in Totaal staat dan =Som([txtBesteld])

I.p.v [txtBesteld] moet je de besturingselementbron van dit veld zetten.
txtBesteld is de naam, maar niet de besturingselementbron!

Groeten, Paul
 
Oeps :eek:

Krijg nu iig geen #fout meer en hij telt gewoon op :thumb:

Maar het werkt nog steeds niet helemaal, zie screenshot
foutmelding.JPG
 
Schrijfblok,

Het veld txtotaalbesteld heet bij jou Totaal.
Als je dat veld de naam txttotaalbesteld geeft dan is dat opgelost (zie bijlage).

txttotaalbesteld.JPG

Hetzelfde geldt voor jouw tekstvak die het getal uit de query weergeeft.
Geef dit veld de naam: txtHoeveelheid

Groeten, Paul
 
Paul, het werkt wel maar..........;)

Als ik nu bijv. bij txthoeveelheid 3 invul en 2 regels/records van 3 en 1 bij txtbesteld dan krijg ik dus de melding Totaal besteld = groter dan (zoals het hoort) maar zodra ik de 3 in een 2 verander komt die melding ook. Het lijkt wel alsof de vorige waarde nog even bewaard blijft of deze er bij opgeteld wordt (ofzoiets). Ik krijg dus steeds dezelfde melding 2x, als ik een waarde invul en als ik een waarde verander.
 
Schrijfblok,

Is zoals je zegt, oude waarde staat er nog in.
Zet even de volgende regel code onder de regel met Me.Undo

Code:
Me.txttotaalbesteld.Requery

txttotaalbesteld = jouw oude veld Totaal(zie vorige bericht van mij).

Groeten, Paul
 
Schrijfblok,

Sorry, had jou nog niet de volledige versie gegeven.

Hier de code voor afterupdate die je al eerder hebt ingevoerd.
de 3 regels bij Groter Dan er nog bij zetten.

Code:
Private Sub txtBesteld_AfterUpdate()
  'txtHoeveelheid staat op het hoofdformulier
  'txtBesteld = het recordveldveld op het subformulier
  'txtTotaalbBesteld = berekend veld voor som(txtBesteld)
  
  If Me.txtTotaalBesteld + txtBesteld = Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = gelijk aan " & Parent.txtHoeveelheid, , "Gelijk"
  ElseIf txtTotaalBesteld + txtBesteld > Parent.txtHoeveelheid Then
    MsgBox "Totaal besteld = groter dan " & Parent.txtHoeveelheid, , "Groter"
    [B]txtBesteld.Undo
    Me.Undo
    Me.txtTotaalBesteld.Requery[/B]
  Else
    MsgBox "Totaal besteld = kleiner dan " & Parent.txtHoeveelheid, , "Kleiner"
  End If
End Sub

Je kunt uiteraard na testen de overbodige code voor Kleiner weghalen.

Groeten, Paul
 
Sorry voor de late reactie, maar ik had een paar dagen vrij ;)

Het werkt nu perfect, heel erg bedankt Paul! :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan