Selectiequery met SQL in vba access

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.281
Ik wil wat experimenteren met DoCmd.RunSQL in access vba maar zelfs het eenvoudigste loopt fout :(.
Wat doe ik verkeerd?

Code:
Sub testSQL()
Dim SQL As String
 SQL = "SELECT * FROM tbl_Produits"
DoCmd.RunSQL SQL
End Sub
Ik krijg telkens fout 2342, SQL is verkeerd
 
Bedankt, ik zocht de fout in een heel andere richting.
Als je dan toch een select query wil uitvoeren met bv een variabele (bv in een tekstvak) voor het criterium , moet je dan met DAO aan de slag?
 
Dat kan, maar je kan ook dit eens proberen:
DoCmd.OpenQuery "SELECT * FROM tbl_Produits"

Dat zal echter een datasheet view openen en is denk ik niet je bedoeling.
 
en heb nog een probleem met een andere test ...
In een formulier met prijzen staat een tekstvak txt_Multiply.Value waarin je een getal moet invullen.
Na een klik op een knop cmd_Multiply moeten alle prijzen met dat getal vermenigvuldigd worden.
Nu is het resultaat van een tekstvak natuurlijk tekst
Maar onderstaande code werkt alleen met gehele getallen, niet met decimale, zelfs niet met CSng(txt_Multiply.Value)
Met decimale getallen krijg ik een fout van Access (geen run time error) dat er een syntaxfout zit in de SQL. Als ik een punt als decimaal teken gebruik werkt het wel, maar dat is in onze contreien niet zo gebruikersvriendelijk...
Hoe komt dat? De input voor VBA is toch volgens het control panel? Is dat voor SQL anders? Moet ik dan via de code de komma in een punt wijzigen?


Private Sub cmd_Multiply_Click()

If IsNull(txt_Multiply) Then
MsgBox "Enter a number"
Exit Sub
End If

On Error GoTo MyError
With DoCmd
DoCmd.SetWarnings False
.RunSQL "UPDATE tbl_Produits3 SET Prix = Prix * " & txt_Multiply.Value
.RunCommand acCmdRefresh
.SetWarnings True
End With
Exit Sub
MyError:
MsgBox Err.Description
DoCmd.SetWarnings True
End Sub
 
Zo diep zit ik nog niet in Access dus een antwoord daarop laat ik aan de Helpmij Access specialist. Die komt vanzelf wel langs. Wel nog het advies om je code in codetags te plaatsen d.m.v. het # teken in het menuutje.
 
Dat kan, maar je kan ook dit eens proberen:
DoCmd.OpenQuery "SELECT * FROM tbl_Produits"

Dat zal echter een datasheet view openen en is denk ik niet je bedoeling.

Dit gaat ook niet, fout 7874. Blijkbaar wordt alleen de naam van een bestaande query geaccepteerd
 
Sowieso zou ik controleren of de input numeriek is of niet; jij kijkt alleen of het tekstveld leeg is en dan kan je ook tekst invoegen. Is niet de bedoeling. Access is zelf wel in staat om te beoordelen of een input tekst is of een getal, dus daar heb je verder geen last van. Wel van een decimaalteken. Dat wil je normaal invoeren, met een komma, maar moet dus bij de berekening een punt zijn. Kan je zo oplossen:
Code:
    If Not IsNumeric(Me.txt_Multiply) Then
        MsgBox "Enter a number", vbCritical
        Me.txt_Multiply = Null
        Exit Sub
    End If
    
    On Error GoTo MyError
    With DoCmd
        DoCmd.SetWarnings False
        .RunSQL "UPDATE tbl_Produits3 SET Prix = Prix * " & Replace(Me.txt_Multiply.Value, ",", ".")
        .RunCommand acCmdRefresh
        .SetWarnings True
    End With
 
Ik heb niet de ganse code erbij gezet. Want het tekstvak heeft een keypress event.


Code:
Private Sub txt_Multiply_KeyPress(KeyAscii As Integer)
'MsgBox KeyAscii
If KeyAscii = 8 Or (KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii <= 44 Then  '8 = backspace, 44 = comma
    Exit Sub
Else
    Beep
    KeyAscii = 0
End If

End Sub


Maar ik snap niet goed dat de komma niet aanvaard wordt, moet ik me daar gewoon bij neerleggen :) ?
 
Ja. Daarom de Replace, want op dat moment moet het decimaalteken worden vervangen. Maakt verder ook niet uit natuurlijk.
 
Ik gebruik trouwens de Change gebeurtenis om alle tekens die geen getal zijn te verwijderen. Die code is in ieder geval makkelijker :).
 
Hé, nu was ik eens fier op die Keypress code :rolleyes:
Maar ik gebruik die ook bij opleidingen van User forms in Excel VBA, om te tonen dat die Ascii codes kunnen gebruikt worden voor praktische toepassingen.
 
Ik ben eruit geraakt...
Op internet gezocht hoe je een "query on the fly kunt maken"
http://www.fontstuff.com/access/acctut17.htm



Code:
Private Sub cmd_QueryOnTheFly_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDefs
Dim Str_SQL As String
Set db = CurrentDb
Set qdf = db.QueryDefs("qry_Elèves")

Str_SQL = "Select tbl_Elèves.* from tbl_Elèves where Elève_Ville = '" & cbo_Town.Value & "'"
'qdf.SQL = Str_SQL 'no intellisense - wrong
db.QueryDefs("qry_Elèves").SQL = Str_SQL
DoCmd.OpenQuery "qry_Elèves"
Set qdf = Nothing
Set db = Nothing


End Sub
 
Laatst bewerkt:
Op internet gezocht? Lees je HelpMij nooit? Dat heb ik al zó vaak uitgelegd.... vorige week nog :).
 
Ik vrees dat ik even niet kan volgen...
Wat heb je vorige week nog uitgelegd?
Of staat het antwoord op mijn vraag in die (trouwens zeer uitgebreide :)) handleiding die je hebt geschreven:)?
 
Dat ook, maar ik gebruik zó vaak de QueryDefs collectie in antwoorden, dat ik 'm eigenlijk gelijk al kopieer als ik de pc aanzet :).
 
Sorry...
Dat zal dan in een antwoord aan iemand anders geweest zijn, ik heb zoveel werk momenteel dat ik alleen mijn eigen vragen bekijk :)
Als ik meer tijd heb zal ik ook de andere vragen bestuderen...
 
Je kunt, als je een nieuw probleem hebt, natuurlijk ook gewoon in het Access forum zoeken, want daar staan dat soort antwoorden. Maar daar kom jij, uit principe geloof ik, gezien het feit dat je de Access vragen nog steeds in het VBA forum zet, zelden :D.
 
Is helemaal niet uit principe, maar het gaat toch over VBA, in Access dan. Waarom is er dan een subforum over VBA? Welke vragen horen daar dan thuis? Maar no problem, volgende vaag komt op het Access forum :)
 
Waarom is er dan een subforum over VBA?
Heb je wel eens in het Excel forum gekeken? Gaan voor 90% alleen maar over VBA :D. Je hebt in beginsel natuurlijk gelijk, maar de scheiding is ook heel vaag. Ik vermoed dat dit forum is opgezet voor algemene VBA vragen. Functies om BSN nummers te checken bijvoorbeeld die generiek toepasbaar zijn in alle toepassingen. Of vragen over procedures, loopjes, IF..THEN..ELSE zaken. Kortom: vragen die niet-specifiek zijn voor een bepaalde applicatie. Zodra je iets hebt dat specifiek over Access gaat, kun je die beter in het Access forum zetten omdat dat beter gelezen wordt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan