Toon posts:

[ms access] Berekening in formulier

Pagina: 1
Acties:
  • 1.555 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Op 1 of andere manier krijg ik het volgende niet voor elkaar:

Ik heb in access een tabel met oa de volgende velden: Aantal, Inkoop_per_stuk, Inkoop_Totaal.
Op het formulier zitten een aantal invulvelden waaronder bovengenoemde.
Ik wil dus dat als bijv. 2 bij Aantal invul, en 3 bij Inkoop_per_stuk, er 6 bij Inkoop_Totaal komt te staan. Ik krijg dit wel elkaar als ik bij "Besturingselementbron" =[Aantal]*[Inkoop_per_stuk] invul, maar dan slaat hij de waarde niet op in het veld Inkoop_Totaal.

Please help...

  • BaRF
  • Registratie: Augustus 2001
  • Laatst online: 01-04 10:45

BaRF

bijna kerst

aargh access, niet excel |:( * BaRF leest niet goed ;)

[ Voor 113% gewijzigd door BaRF op 07-02-2004 22:59 ]

The space between is where you'll find me hiding, waiting for you


  • Ook
  • Registratie: September 2000
  • Laatst online: 14-12-2025

Ook

Yes I can!

Heb je in Access het "Gegevenstype" wel op 'numeriek' staan voor de velden waarin de getallen staan?? Standaard staat dat op 'Text', maar als je ermee gaat rekenen is 'numeriek' wel aan te raden namelijk.

[ Voor 13% gewijzigd door Ook op 08-02-2004 03:13 ]

Wees consequent, maar niet altijd


  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 31-03 19:58
Er zijn Database guru's die zeggen dat je waarden die berekend kunnen worden nooit afzonderlijk in een tabel moet opslaan. Daarvoor zin tegenargumenten te verzinnen en ik neem aan dat jij deze in casu hebt.

Wat je moet doen is gebruik maken van Access gebeurtenissen. Bekijk de eigenschappen van het veld waarin je bijv. aantal invult. Je ziet dan een tabblad "GeBeurtenis". Kies de opbouwfunctie bij "na bijwerken". Kies voor Programmacode. Vul hier het volgende in:
code:
1
me!Inkoop_Totaal = me!Aantal * me!Inkoop_per_stuk


Als je nu teruggaat naar het formulier en je veranderd in het veld Aantal dan zul je zien dat na het verlaten van het veld ook de waarde in het veld Inkoop_totaal is aangepast. Doe hetzelfde bij het veld Inkoop_per_stuk en je hebt het gewenste effect.

Hans van Zijl


Verwijderd

Topicstarter
jwpmzijl schreef op 08 februari 2004 @ 03:31:
Er zijn Database guru's die zeggen dat je waarden die berekend kunnen worden nooit afzonderlijk in een tabel moet opslaan. Daarvoor zin tegenargumenten te verzinnen en ik neem aan dat jij deze in casu hebt.

Wat je moet doen is gebruik maken van Access gebeurtenissen. Bekijk de eigenschappen van het veld waarin je bijv. aantal invult. Je ziet dan een tabblad "GeBeurtenis". Kies de opbouwfunctie bij "na bijwerken". Kies voor Programmacode. Vul hier het volgende in:
code:
1
me!Inkoop_Totaal = me!Aantal * me!Inkoop_per_stuk


Als je nu teruggaat naar het formulier en je veranderd in het veld Aantal dan zul je zien dat na het verlaten van het veld ook de waarde in het veld Inkoop_totaal is aangepast. Doe hetzelfde bij het veld Inkoop_per_stuk en je hebt het gewenste effect.
Ontzettend bedankt! Het werkt. Ik heb het alleen zonder de me! 's gedaan, dan werkt het ook. Maar denk je dat het ook mogelijk is zonder programmacode, maar met bijv. expressies?

  • Boss
  • Registratie: September 1999
  • Laatst online: 01-04 14:33

Boss

+1 Overgewaardeerd

Ik zou meer aandacht geven aan het andere deel van de opmerking van jwpmzijl. Het zijn niet alleen databaseguru's die die mening hebben, het is gewoon redelijk standaard om een database zo op te bouwen. Als je hebt A*B=C, dan sla je A en B op, C niet. C kan je immers altijd weer herleiden aan de hand van A en B.
Bovendien moet je nu code dubbel maken. Want zowel na het veranderen van A als B zal je C opnieuw moeten berekenen.

Mocht je het toch per sé op willen slaan, dan moet het met die VBA code. In een expressie is het niet mogelijk.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Boss schreef op 08 februari 2004 @ 17:42:
Ik zou meer aandacht geven aan het andere deel van de opmerking van jwpmzijl. Het zijn niet alleen databaseguru's die die mening hebben, het is gewoon redelijk standaard om een database zo op te bouwen. Als je hebt A*B=C, dan sla je A en B op, C niet. C kan je immers altijd weer herleiden aan de hand van A en B.
Bovendien moet je nu code dubbel maken. Want zowel na het veranderen van A als B zal je C opnieuw moeten berekenen.

Mocht je het toch per sé op willen slaan, dan moet het met die VBA code. In een expressie is het niet mogelijk.
Ik begrijp dat het beter is om alleen A en B op te slaan, maar als je dan dmv een rapport een offerte wilt maken is het wel handig als C daarop komt te staan.
En hoe moet je immers de totalen optellen als je ze niet hebt vast gelegd...

[ Voor 6% gewijzigd door Verwijderd op 08-02-2004 18:54 ]


  • riZZy
  • Registratie: Februari 2004
  • Laatst online: 14-03 16:57
Verwijderd schreef op 08 februari 2004 @ 18:49:
[...]


Ik begrijp dat het beter is om alleen A en B op te slaan, maar als je dan dmv een rapport een offerte wilt maken is het wel handig als C daarop komt te staan.
En hoe moet je immers de totalen optellen als je ze niet hebt vast gelegd...
Je maakt dan gewoon een query die gebaseerd is op je tabel.
In je query kun je dan C berekenen en die gebruiken in je rapport.

Is niet lastig, dus wel nuttig om je wat meer te verdiepen in het gebruik van query's.

[ Voor 10% gewijzigd door riZZy op 08-02-2004 19:03 ]


Verwijderd

Topicstarter
riZZy schreef op 08 februari 2004 @ 19:01:
[...]


Je maakt dan gewoon een query die gebaseerd is op je tabel.
In je query kun je dan C berekenen en die gebruiken in je rapport.

Is niet lastig, dus wel nuttig om je wat meer te verdiepen in het gebruik van query's.
Ik gebruik nu al query's, maar ik zie het nadeel er niet van in, om de uitkomst op te slaan.

[ Voor 12% gewijzigd door Verwijderd op 08-02-2004 19:32 ]


Verwijderd

Topicstarter
jwpmzijl schreef op 08 februari 2004 @ 03:31:
Er zijn Database guru's die zeggen dat je waarden die berekend kunnen worden nooit afzonderlijk in een tabel moet opslaan. Daarvoor zin tegenargumenten te verzinnen en ik neem aan dat jij deze in casu hebt.

Wat je moet doen is gebruik maken van Access gebeurtenissen. Bekijk de eigenschappen van het veld waarin je bijv. aantal invult. Je ziet dan een tabblad "GeBeurtenis". Kies de opbouwfunctie bij "na bijwerken". Kies voor Programmacode. Vul hier het volgende in:
code:
1
me!Inkoop_Totaal = me!Aantal * me!Inkoop_per_stuk


Als je nu teruggaat naar het formulier en je veranderd in het veld Aantal dan zul je zien dat na het verlaten van het veld ook de waarde in het veld Inkoop_totaal is aangepast. Doe hetzelfde bij het veld Inkoop_per_stuk en je hebt het gewenste effect.
Ik heb Inkoop_Totaal als "vergrendeld" waardoor je niet zomaar een andere waarde in kunt vullen. Als ik nu een paar van de vergrendelde waardes bij elkaar op wilt tellen dan werkt jouw oplossing niet, want het lijkt erop dat als iets automatisch in een cel wijzigd, access dit niet als een aanpassing ziet..

Verwijderd

Topicstarter
schopje.... (mbt vergrendelde cellen optellen)

[ Voor 62% gewijzigd door Verwijderd op 10-02-2004 08:08 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Wordt een beetje koffiedik kijken want als je e.e.a. op de standaardmanier doet, werkt het wel. Bovendien is het me niet duidelijk wat je bedoelt. je hebt in de voet van het formulier een tekstvakje staan met als gegevensbron = som(Inkoop_Totaal)? Dat wordt inderdaad niet automatisch bijgewerkt tenzij je naar het tekstvak verwijst en niet naar het onderliggende veld in de tabel. BV =som(tekst9) (brr..i lelijk) of wijzig de naam van het tekstvak.
Maar er zijn meer mogelijkheden. Post even meer info...

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Boss
  • Registratie: September 1999
  • Laatst online: 01-04 14:33

Boss

+1 Overgewaardeerd

En nogmaals: Sla die waarde niet op! Het is echt niet nodig, en gaat je echt problemen geven als later je database wat complexer gaat worden.

Berekeningen kan je ook op rapporten doen, of in de achterliggende query. Ook het optellen van berekende velden is geen probleem, zoals je zelf wel denkt.

offtopic:
Ik denk dat er genoeg argumenten staan hier, neem het aan van de mensen die al meerdere databases gemaakt hebben en later zal je ze dankbaar zin :)

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Idd doe het niet, tenzij je hele goede redenen hebt om het wel te doen. En die zie ik hier ook niet.
offtopic:
Mijn eerste databaasjes maakte ik in superbase en filemaker (atari en mac) met berekende velden en meervoudige invoer per veld. Gossamme wat heb ik gevloekt en gebaald toen ik al die handigheidjes weer af moest leren.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 31-03 19:58
Verwijderd schreef op 08 februari 2004 @ 19:34:
[...]
Ik heb Inkoop_Totaal als "vergrendeld" waardoor je niet zomaar een andere waarde in kunt vullen. Als ik nu een paar van de vergrendelde waardes bij elkaar op wilt tellen dan werkt jouw oplossing niet, want het lijkt erop dat als iets automatisch in een cel wijzigd, access dit niet als een aanpassing ziet..
Als jij door programmacode de waarde in een veld wijzigt dan zal een AfterChange event die voor dat veld is gedefinieerd niet uitgevoerd worden.
Afterchange werkt nl. alleen na veranderingen middels het formulier. Je zult jouw code die betreffende veld aanpast moeten uitbreiden met code om e.e.a. opnieuw te berekenen.

In de praktijk is het dan makkelijker om een aparte procedure te maken waarin alle berekende waarden opnieuw uitgerekend worden. De procedure roep je dan aan vanuit de andere AfterChange events.

Hans van Zijl

Pagina: 1