parameter waarde opgeven

Status
Niet open voor verdere reacties.

HankMegens

Gebruiker
Lid geworden
1 sep 2015
Berichten
86
Hallo,

In een formulier, vraag ik de gebruiker om een waarde op te geven, welke in gebruik om een prijsverhoging door te voeren.
Nadat deze waarde is ingetypt en men op de knop doorvoeren wordt gedrukt komt access met de vraag om de parameter welke eerder door de gebruiker is ingevoerd.
Daarna wordt deze laatste parameter gebruikt en niet de parameter welke op het formulier is ingevuld.

Hier onder de betreffende code
Code:
Private Sub doorvoeren_Click()

Dim Vpercentage As Integer
Dim Vverhoging As Integer

If Me.verhogingperc.Value < 0.01 Then
    MsgBox ("U dient een geheel getal in te voeren, bijv. 5")
    Me.verhogingperc.Value = 0
    Me.verhogingperc.SetFocus
    GoTo einde
End If



If Vdoorgeef = "INTERNE KOSTEN" Then
Vkeuze = MsgBox("Weet u het zeker, alle percelen worden gewijzigd", vbYesNo)
    If Vkeuze = vbNo Then
        GoTo einde
    End If
    If Me.verhogingperc.Visible = True Then
            Vpercentage = Me.verhogingperc.Value
            DoCmd.RunSQL "UPDATE Percelen SET Percelen.[Interne Kosten] = ([interne kosten]*(1+Vpercentage));"
    Else
            Vverhoging = Me.verhogingabs.Value
            DoCmd.RunSQL "UPDATE Percelen SET Percelen.[Interne Kosten] = [interne kosten]+Vverhoging;"
    End If
ElseIf Vdoorgeef = "KABEL TV" Then
    If Me.verhogingperc.Visible = True Then
            Vpercentage = Me.verhogingperc.Value
            DoCmd.RunSQL "UPDATE Stambestand SET Stambestand.[Vast recht kabel TV] = [Vast recht kabel TV]*(1+" & Vpercentage & ");"
    Else
            Vverhoging = Me.verhogingabs.Value
            DoCmd.RunSQL "UPDATE Stambestand SET Stambestand.[Vast recht kabel TV] = [Vast recht kabel TV]+" & Vverhoging & ";"
    End If

End If

DoCmd.Close
DoCmd.OpenForm "F-Prijsverhoging"

einde:


End Sub

Het betreft hier Vpercentage en Vverhoging
Vpercentage = Me.verhogingperc.Value veranderen in Vpercentage = Me.verhogingperc geeft ook het zelfde resultaat

Wat zie ik over het hoofd?

Alvast bedankt
 
Gek genoeg heb je de noodzakelijke oplossing wél in de tweede tak gebruikt :). Overigens kan de code een stukje simpeler:
Code:
Private Sub doorvoeren_Click()
Dim strSQL As String
    If Not Me.verhogingperc.Value = CInt(Me.verhogingperc.Value) Then
        MsgBox ("U dient een geheel getal in te voeren, bijv. 5")
        Me.verhogingperc.Value = 0
        Me.verhogingperc.SetFocus
        Exit Sub
    End If
    
    If Vdoorgeef = "INTERNE KOSTEN" Then
        Vkeuze = MsgBox("Weet u het zeker, alle percelen worden gewijzigd", vbYesNo)
        If Vkeuze = vbYes Then
            If Me.verhogingperc.Visible = True Then
                strSQL = "UPDATE Percelen SET [Interne Kosten] = [Interne Kosten]*(1+" & Me.verhogingperc.Value & ")"
            Else
                strSQL = "UPDATE Percelen SET [Interne Kosten] = ([Interne Kosten]*(1+" & Me.verhogingabs.Value & "))"
            End If
    ElseIf Vdoorgeef = "KABEL TV" Then
        If Me.verhogingperc.Visible = True Then
            strSQL = "UPDATE Stambestand SET [Vast recht kabel TV] = [Vast recht kabel TV]*(1+" & Me.verhogingperc.Value & ");"
        Else
            strSQL = "UPDATE Stambestand SET [Vast recht kabel TV] = [Vast recht kabel TV]+" & Me.verhogingabs.Value
        End If
    End If
    
    If Not strSQL = "" Then 
        DoCmd.RunSQL strSQL    
        DoCmd.Close acForm, Me.Form.Name
        DoCmd.OpenForm "F-Prijsverhoging"
    End If 
End Sub
En helemaal snappen doe ik de resultaatwerking niet; je vraagt om gehele getallen:
Code:
        MsgBox ("U dient een geheel getal in te voeren, bijv. 5")
En die waarde tel je op bij de waarde 1:
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = [Interne Kosten]*(1+" & Me.verhogingperc.Value & ")"
Dus als iemand 6 invult (waarschijnlijk bedoel je dan 6%, dan wordt de prijs vermenigvuldigd met (1+6) en dat is in mijn optiek 700%. Kijk, dát noem ik nou inflatie :)
 
Laatst bewerkt:
Octafish,

Ik wet dat er idd nog wat dingen niet kloppen (percentage gaat idd wel erg extreem).
Ik heb het verzoek gekregen deze database verder af te maken, omdat de eerste programmeur niet meer te bereiken is. Ik moet dus uitpuzzelen wat er al wel werkt en wat niet en dan een en ander verder afbouwen.

Ik ga met je verhaal aan de slag.
 
Je fout lag dus in het feit dat je de variabele in de string had gezet, en niet de waarde had toegevoegd. Als je de percentages als geheel getal vraagt (vandaar de check met cInt) moet je daarna die waarde dus door 100 delen. Je krijgt dan iets als:
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = [Interne Kosten]*(1+" & (Me.verhogingperc.Value/100) & ")"
 
Octafish,


Die had ik idd al in mij achterhoofd om te gebruiken
Ik krijg nu echter (met of zonder delen door 100) de volgende melding.
3075.jpg

Volgens mij klopt de synaxt dus beetje raar


Hank
 
hallo,

te vroeg geroepen.
ik krijg de melding dat er een komma in mijn query statement staat

3075.jpg

als ik het SQL statement in een nieuwe query zet en 0,01 vervang in 0.01 werkt het wel.
dit is de syntax van de query
bij3075.jpg

Hoe los ik dit op? (toetsenbord/taalinstelling?)


Bedankt
 
Laatst bewerkt:
Jouw landinstellingen zijn Nederlands en VBA werkt met Amerikaanse notatie. Doe je de berekening in VBA, dan zou dat goed moeten gaan.
 
Octafish,

Het eerste begrijp ik, dat tweede is me niet helemaal duidelijk.
Ik maak de berekening toch in VBA?


Hank
 
Je gebruikt nu een query die een berekening maakt. Vergelijk dit
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = [Interne Kosten]*(1+" & (Me.verhogingperc.Value/100) & ")"
        MsgBox strSQL
maar eens met
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = " & Me.[Interne Kosten]*(1+Me.verhogingperc.Value/100) 
        MsgBox strSQL
De eerste variant voert de berekening uit in de query, dus als de query wordt uitgevoerd, de tweede variant zet de uitkomst van een berekening (een getal dus) in een veld, maar rekent verder niet.
 
Octafish,

Ik begrijp wat je bedoeld.
Echter krijg ik nu de foutmelding 2465, "Microsoft access cant find the field "I" referred to in your expression"
In de strSQL die jij mij geeft, staat tijdens de uitvoering echter niks.


Hank
 
Vervang MsgBox strSQL eens door
Code:
tmp=InputBox("","",strSQL)
En post de tekst uit de inputbox er eens bij?
 
octafish,

Ik krijg bij de uitvoering het volgende te zien:
strSQLresultaat.png

zoals ik al aangaf, is deze leeg.


Hank
 
Dat is dus wat anders dan "Microsoft access cant find the field "I" referred to in your expression". Als je string nu leeg is, dan vraag je in de msgbox dus niet de tekst uit strSQL op, maar wat anders. Als je letterlijk
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = " & Me.[Interne Kosten]*(1+Me.verhogingperc.Value/100) 
        MsgBox strSQL
in je code hebt staan dan verwacht ik minstens de tekst "UPDATE Percelen SET [Interne Kosten] = " in je msgbox te zien. De rest zou nog leeg kunnen zijn als er fouten in je berekening zitten. Maar die tekst moet je dus in ieder geval zien. Vult hij de string wel als je in het venster <Lokale variabelen> kijkt?
 
Octafish,

er staat inderdaad iets in de string (een foute weergave van mij)

Code:
UPDATE Percelen SET [Interne Kosten] = [Interne Kosten]*(1+0,01);
Krijg ik te zien.
Dit heeft toch te maken met de syntax van de string?printscreen.jpgprintscreen.jpg
 
Heb je dit (Me.[Interne Kosten]*(1+Me.verhogingperc.Value/100) ) letterlijk uit je eigen code geplukt? Je plaatje is, door het volledige scherm, niet best leesbaar. En ik had eigenlijk verwacht dat Access wel spaties zou neerzetten, en de rechte haken zou vervangen. Kortom: meer dit.
Code:
        strSQL = "UPDATE Percelen SET [Interne Kosten] = " &  Me.Interne_Kosten * (1 + Me.verhogingperc.Value/100)
En in je output zou je dan getallen moeten zien, geen veldnamen.
 
Octafish,

Je laatste suggestie met de extra spaties werkt niet.
Een stapje terug krijg ik een foutmelding.

Heb de foutmelding en de verwijzing ernaar in de bijlages gezet

2465.png
printscreen.png
 
Ik zie wel waar je code fout gaat, en dat is: je gebruikt mijn codevoorbeeld niet :). Sowieso raad ik je altijd aan om de IntelliSense te gebruiken en niet zelf te gaan typen. Nu maak je fouten in de syntax waardoor je code niet werkt.
 
Octafish,

Ik knip en plak jouw code in mijn database, en krijg dezelfde meldingen.
Hoe gebruik ik intellisence?
 
Da's de makkelijkste vraag die ik deze maand op HelpMij heb gezien :D Heel simpel: zodra je een punt typt achter een opdracht/gebeurtenis, krijg je een lijst met beschikbare objecten/eigenschappen/gebeurtenissen etc. te zien. In jouw voorbeeldje doe je dat bijvoorbeeld als je me.i typt. Dan zal Access ongeveer naar het object [Interne kosten] springen. Zeker als je ook nog een 'n' typt.
Objecten met spaties zijn een crime in Access; eigenlijk moet je die vermijden als het kan (en meestal is dat wel te doen). Dus niet een veld [Interne kosten] maken, maar dat veld [InterneKosten] of [Interne_kosten] noemen. In beide gevallen hoeven er geen haken omheen, en zal de Intellisense ze goed oppikken. Spaties worden door Access overigens zelf al door underscores vervangen. Maar toch: voorkomen is beter dan genezen :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan