Calculatie opslaan in query

Status
Niet open voor verdere reacties.

muufley

Gebruiker
Lid geworden
23 sep 2010
Berichten
47
Ik heb een soortgelijke vraag als op dit topic http://www.helpmij.nl/forum/showthread.php/622271-Variabelen-automatisch-terug-zetten-op-0 . Wat ik probeer te bereiken is dat een nummeriek calculatie wordt gemaakt en het resultaat in een query wordt opgeslaan.
Op een formulier heb ik een control "gewicht" daarnaast een control "min". De gebruiker vult in het control "min" een getal in en met de on_click event van een knop wordt die waarde afgetrokken van "totaal" en die aangepaste waarde moet dan worden opgeslaan in de query (net zoals in de mutaties database van Octafish in het andere topic.)
Oorspronkelijk had ik een update query op de on_click van een knop maar dat werkte niet.

Code:
mySQL = "Update qrystpos"
mySQL = mySQL & "SET qrystpos.[Date Modified] = Now()"
mySQL = mySQL & "qrystpos.[Gewicht]-qrystpos.[Min]"
mySQL = mySQL & " WHERE qrystpos.Substractie > " & 0
DoCmd.RunSQL mySQL
 
Laatst bewerkt:
Ik zie in je code wel een foutje of twee, dat de uitvoer blokkeert. Kan een typfout zijn overigens, maar dat hoor ik dan wel ;) Ten eerste: een ontbrekende spatie tussen twee regels, waardoor je letterlijk qrystposSET uit laat voeren. En Je hebt ongetwijfeld geen veld [0].

Code:
mySQL = "Update qrystpos" & vbCrLf
mySQL = mySQL & "SET [Date Modified] = Now()" & vbCrLf
mySQL = mySQL & "[Gewicht]-[Min]" & vbCrLf
mySQL = mySQL & "WHERE Substractie >  0" 
DoCmd.RunSQL mySQL

Paar zaken die een probleem kunnen veroorzaken: je voert een Update uit op een query. Volgens mij kan dat niet. Je kunt wel een tabel bijwerken. Een query is een dynamische recordset, maar geen tabel. Tenzij je tabel zo heet natuurlijk... Tweede ding dat ik zou veranderen is de naam van het veld [Min], omdat MIN een gereserveerd woord is. Daar moet je eigenlijk met veldnamen vanaf blijven. Verzin daar dus een andere veldnaam voor, om eventuele (toekomstige) problemen voor te zijn.
 
De tiepfouten waren mij ook al opgevallen, maar je hele omschrijving van je probleem is nogal incompleet. Wat doet het niet en welke foutmelding krijg je? Wat probeer je precies te doen? Probeer je een waarde van meerdere records af te trekken of van 1 specifiek record?
Waar je ook eens naar zou kunnen kijken is parameters bij querydefs ipv letterlijke sql vormen uit vba.
Om je een idee te geven: http://www.access-programmers.co.uk/forums/archive/index.php/t-75881.html
 
@ dropl

Ik probeer een waarde af te trekken van één specifieke record in een continious form. Misschien is dit duidelijker: https://rapidshare.com/files/458942551/Database_vers2.rar .
Het formulier heet frminstock.

Het probleem is dat access runSQL niet wil uitvoeren. Na wat aanpassingen krijg ik nu de foutmelding:
Run time error '3075': Syntax error (missing operator) in query expression 'Now() [Gewicht]-'

met volgende code:

Code:
mySQL = "Update tblamaltheehoofd" & vbCrLf
mySQL = mySQL & "SET [Date Modified] = Now()" & vbCrLf
mySQL = mySQL & "[Gewicht]-[Sub]" & vbCrLf
mySQL = mySQL & "WHERE Sub >  0"

Parameters bij querydefs ken ik niet, wat zijn de mogelijkheden daarvan?
 
Het bestand is niet te downoaden; althans: er is geen download link, alleen een upload.
 
En dit moet je ook nog aanpassen:
Code:
mySQL = mySQL & "SET [Date Modified] = Now()[B],[/B]" & vbCrLf
 
En dit moet je ook nog aanpassen:
Code:
mySQL = mySQL & "SET [Date Modified] = Now()[B],[/B]" & vbCrLf

Ik krijg hierbij nog steeds een syntax error, deze keer in update statement. Ik snap het niet, alles lijkt nu ok maar toch gaat het niet.
 
Ik heb 'm nu, moest wel een bibliotheekverwijzing aanpassen, die nog naar Office 203 verwijst. Op het formulier frminStock vind ik niet de code die je hierboven citeert. Waar kan ik die vinden?
 
Frminstock bevat een subformulier slices_sub1, elke regel van het subformulier bevat een knop (ik weet dat dit overbodig is, maar de gebruiker vind dit logischer). De code zit op de on_click event van die knop(pen).
Met de bedoeling dat in het vak "sub" het getal dat daarin wordt geplaatst afgetrokken wordt van de waarde in het vak "aantal" (controlnaam is "Gewicht") op diezelfde regel.
 
Code:
mySQL = "Update tblamaltheehoofd" & vbCrLf
mySQL = mySQL & "SET [Date Modified] = Now()" & vbCrLf
mySQL = mySQL & "[Gewicht]-[Sub]" & vbCrLf
mySQL = mySQL & "WHERE Sub >  0"

Gewicht-Sub is een loze statement, net als 20-3
Gewicht = Gewicht - Sub
is wel een statement.
 
Klopt ook nog.... Je moet, als je een bijwerkquery maakt, wel aangeven welk veld moet worden bijgewerkt, met waarmee. Wat ik zelf dan meestal doe, is de gegenereerde sql eerst in een variabele zetten, die ik dan in een query plak. Dan zie je gelijk of, en zo ja waar, er fouten zitten.

Code:
mySQL = "Update tblamaltheehoofd" & vbCrLf
mySQL = mySQL & "SET [Date Modified] = Now(),"
mySQL = mySQL & "[Gewicht]=[Gewicht]-[Sub]" & vbCrLf
mySQL = mySQL & "WHERE Sub >  0"

Dim tmp
tmp = InputBox("", "", mySQL)
 
Met de aanpassing "[Gewicht]=[Gewicht]-" werkt het nu.
Het enige curieuze nu is dat ik twee maal op de knop moet drukken eer de verandering doorgevoerd is maar dit is niet zo'n groot probleem. Ik heb nog Me.Refresh na Docmd.runSQL geplaatst om de verandering te zien.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan