[Access 2007 VBA] selectie uit een keuzelijst halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Clyde Barrow
  • Registratie: Oktober 2006
  • Laatst online: 20-03-2022
Reeds enkele uren zit ik vast op een probleempje in VBA Access 2007...

Ik probeer een rapport te genereren aan de hand van de selectie in een keuzelijst op een formulier.

naam formulier = frmZoekFormulier
naam keuzelijst = invoervak

Ik krijg steeds de melding dat er een syntaxfout zit in het from gedeelte van de SQL...
Hier gebruik ik nu invoervak.selectedItem om het geselecteerde op te halen, denk dat selecteditem niet de goede eigenschap is om het op te halen... Kan echter niet vinden wat dan wel..

Ben hierin een leek en hoop dat het probleem een beetje duidelijk omschreven is. Zou enorm dankbaar zijn als iemand me kan verderhelpen;

de code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub Report_Open(Cancel As Integer)
    'declaratie van de variabelen
    Dim strSQL As String
    Dim strWhere As String
    Dim strOrder As String
    
    'open het formulier om de criteria voor het rapport in te geven in het dialoogvenster
    DoCmd.OpenForm "frmZoekFormulier", , , , , acDialog
    
    'het keuzevak waaruit de opleiding gekozen wordt in een variabele zetten
    Set frm = Forms!frmZoekFormulier
    
    'stel de recordbron (met SQL) voor het rapport samen
    strSQL = "SELECT databank.opleiding, " & "databank.opleidingsverstrekker, " & "databank.startdatum, " & _
        "databank.einddatum, " & "databank.naam, " & "databank.voornaam " & _
        "FROM databank"
    
    strWhere = "WHERE (databank.opleiding =   frm!invoervak.selecteditem)"
    
    strOrder = " ORDER BY databank.naam, databank.voornaam, databank.startdatum, databank.einddatum"
    
    strSQL = strSQL & strWhere & strOrder
    
    'recordbron voor het rapport aanpassen
    Me.RecordSource = strSQL
    
End Sub

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Elementair debuggen: zet een breakpoint op regel 25 (F9) en kijk eens in zeg Immediate (met "?strSQL") wat er in strSQL zit. Dit is gewoon niet zo'n handige methode van een query opbouwen. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Clyde Barrow
  • Registratie: Oktober 2006
  • Laatst online: 20-03-2022
thx! Dit is echter de wat er in de querry zit als ik breakpoint op regel 25 zet:

?strsql
SELECT databank.opleiding, databank.opleidingsverstrekker, databank.startdatum, databank.einddatum, databank.naam, databank.voornaam FROM databank WHERE (databank.opleiding = frm!invoervak.column(0)) ORDER BY databank.naam, databank.voornaam, databank.startdatum, databank.einddatum

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Lijkt me erg sterk, dan is er iets met copy/paste misgegaan... De code in de TS geeft "databankWHERE" bijvoorbeeld. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Clyde Barrow
  • Registratie: Oktober 2006
  • Laatst online: 20-03-2022
Ondertussen in orde, dit topic mag gesloten worden.

Er was nog gewijzigd tussen het plaatsen van de topic en de copy/paste :-)

Die spatie was inderdaad de dooddoener en ook die selectedItem moest gewoon weggelaten worden zo bleek.

Bedankt voor het kijken!

[ Voor 67% gewijzigd door Clyde Barrow op 04-01-2012 11:55 ]


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

En wonderbaarlijk genoeg is tijdens het copy/paste '(databank.opleiding = frm!invoervak.selecteditem)' spontaan veranderd in '(databank.opleiding = frm!invoervak.column(0))' :P

Maar afgezien daarvan: de fout zit er in dat je een lokale variabelenaam (frm) meegeeft aan de querystring in plaats van de waarde van frm!invoervak.column(0). De queryengine heeft totaal geen weet van de variabelen die je in je code gebruikt. Het is van tweeën één:

code:
1
2
3
4
5
6
7
"Where opleiding = forms!frmZoekformulier!invoervak"

óf
"Where opleiding =  " & frm!invoervak 

óf (als opleiding een tekstwaarde is)
"Where opleiding =  '" & frm!invoervak & "'"


edit:

Mooi dat het is opgelost, maar post dan even ook de definitieve code; wellicht handig voor mensen die later tegen dit topic aanlopen. :)

[ Voor 18% gewijzigd door Lustucru op 04-01-2012 12:05 . Reden: tussenpsot ]

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


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Lustucru schreef op woensdag 04 januari 2012 @ 11:58:
code:
1
2
óf (als opleiding een tekstwaarde is)
"Where opleiding =  '" & frm!invoervak & "'"
Iets met SQL-injection en escapen natuurlijk: ;)
Visual Basic:
1
2
'óf (als opleiding een tekstwaarde is)
"Where opleiding =  '" & Replace(frm!invoervak, "'", "''") & "'"

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Clyde Barrow
  • Registratie: Oktober 2006
  • Laatst online: 20-03-2022
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub Report_Open(Cancel As Integer)
    'declaratie van de variabelen
    Dim strSQL As String
    Dim strWhere As String
    Dim strOrder As String
    Dim frm As Form
    
    'open het formulier om de criteria voor het rapport in te geven in het dialoogvenster
    DoCmd.OpenForm "frmZoekFormulier", , , , , acDialog
    
    'het keuzevak waaruit de opleiding gekozen wordt in een variabele zetten
    'Set frm = Forms!frmZoekFormulier
    
    'stel de recordbron (met SQL) voor het rapport samen
    strSQL = "SELECT databank.opleiding, " & "databank.opleidingsverstrekker, " & "databank.startdatum, " & _
        "databank.einddatum, " & "databank.naam, " & "databank.voornaam " & _
        "FROM databank "  ' spatie !!!!
    
    strWhere = "WHERE (databank.opleiding =  Forms!frmZoekFormulier!invoervak)"
    
    strOrder = " ORDER BY databank.naam, databank.voornaam, databank.startdatum, databank.einddatum"
    
    strSQL = strSQL & strWhere & strOrder
    
    'recordbron voor het rapport aanpassen
    Me.RecordSource = strSQL
    
End Sub



Bedankt voor de hulp! :-)
Pagina: 1