[Access] Rapport openen met record-selectie

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 52565

Topicstarter
Voor mijn werkgever ben ik bezig met een applicatie maar ik kom er niet helemaal uit. Het is vast héél simpel (ik ben al best een eind gekomen), maar hij geeft nu een foutmelding waar ik niet uit kom.

Kleine intro: via een formulier moeten er een aantal rapportages uitgeprint worden. Het betreft hier een overzicht van afspraken, geselecteerd per klant. De klant is te selecteren met een keuzelijst met invoerveld en zodra er op de knop "Afdrukken" wordt geklikt moeten de afspraken van de geselecteerde contactpersoon afgedrukt worden.

Op dit moment staat er achter de knop aan code:

Private Sub Knop176_Click()
DoCmd.OpenReport "Afspraakoverzicht", acViewPreview, , "achternaam=" '& txt.naam.cont'""
End Sub


Afspraakoverzicht = Rapport
Achternaam = Veld achternaam in de tabel NAW
txt.naam.cont = Keuzelijst met invoerveld

De foutmelding die Access geeft:

Fout 3075 tijdens uitvoering
) te veel in query-expressie (achternaam=).


Kan iemand me helpen??

Alvast bedankt,
Floris

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

En dan maar hopen dat gene twee klanten dezelfde achternaam krijgen?

anyway:
Visual Basic:
1
"achternaam=" '& txt.naam.cont'""


is dit een exacte copy-paste van je code? Want dan verbaast het me dat hij daar al niet een syntax error op geeft. Het hele stuk achter het = teken wordt door die losse single quote als commentaar beschouwd. 't is niet voor niets groen in je code-editor. ;)

[ Voor 22% gewijzigd door Lustucru op 05-01-2010 13:45 ]

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


Acties:
  • 0 Henk 'm!

Anoniem: 52565

Topicstarter
Lustucru schreef op dinsdag 05 januari 2010 @ 13:42:
En dan maar hopen dat gene twee klanten dezelfde achternaam krijgen?

anyway:
Visual Basic:
1
"achternaam=" '& txt.naam.cont'""


is dit een exacte copy-paste van je code? Want dan verbaast het me dat hij daar al niet een syntax error op geeft.
Over het achternaam-debacel is nagedacht, maar bedankt voor het meedenken.
De code is een exacte copy-paste inderdaad. Programmeren is niet voor mij weggelegd, vandaar dat het waarschijnlijk fout gaat (ik zie het verschil niet tussen " & ' ).

Edit: Okee, dus de singel-quote staat daar niet op zijn plek. Maar hoe moet het dan wel? Ik heb alle combinaties met "-en geprobeerd, maar dan geeft ie weer een andere foutmelding:

Compileerfout:
Verwacht: instructie-einde


Dat zegt mij al net zoveel als de eerste foutmelding..

Edit 2: Ik ben zelf ook nog aan het proberen geweest en met de huidige code werkt ie half/half

Private Sub Knop176_Click()
DoCmd.OpenReport "Afspraakoverzicht", acViewPreview, , ("achternaam = " & "txt.naam.cont")
End Sub


Hij werkt in zoverre dat als ik nu op de knop druk hij vraagt naar de Parameter (moet dus handmatig invullen), maar hij laat wel de juiste gegevens bij de juiste achternaam zien! :?

[ Voor 37% gewijzigd door Anoniem: 52565 op 05-01-2010 13:59 ]


Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Anoniem: 52565 schreef op dinsdag 05 januari 2010 @ 13:45:
Programmeren is niet voor mij weggelegd, vandaar dat het waarschijnlijk fout gaat (ik zie het verschil niet tussen " & ' ).
Nofi, maar dan is het niet slim/vragen om frustraties om applicaties te willen ontwikkelen die in een productieomgeving gebruikt moeten worden.



Wat helpt is om een regel tussen te voegen:
debug.print "achternaam = " & "txt.naam.cont"

Je ziet in het outputscherm precies wat hij naar de query stuurt.

Wat je wilt bereiken is een tekst als:
code:
1
achternaam =  'jansen'

Omdat jansen een tekst is, moeten er quotes omheen. Dat doet Access niet zelf, dus die moet je letterlijk meegeven:
code:
1
"achternaam = '"& var & "'"

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


Acties:
  • 0 Henk 'm!

Anoniem: 52565

Topicstarter
Lustucru schreef op dinsdag 05 januari 2010 @ 14:10:
[...]

Nofi, maar dan is het niet slim/vragen om frustraties om applicaties te willen ontwikkelen die in een productieomgeving gebruikt moeten worden.



Wat helpt is om een regel tussen te voegen:
debug.print "achternaam = " & "txt.naam.cont"

Je ziet in het outputscherm precies wat hij naar de query stuurt.

Wat je wilt bereiken is een tekst als:
code:
1
achternaam =  'jansen'

Omdat jansen een tekst is, moeten er quotes omheen. Dat doet Access niet zelf, dus die moet je letterlijk meegeven:
code:
1
"achternaam = '"& var & "'"
Helaas geeft jouw voorbeeld weer een foutmelding op:

Object vereist

Dat het misschien niet zo handig is om dit te gebruiken in een productieomgeving terwijl mijn kennis niet toereikend genoeg is, ben ik niet met je eens. De hele applicatie werkt (Access snap ik redelijk), alleen loop ik hier op stuk.

Desalniettemin, nogmaals dank voor het meedenken!

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

txt.naam.cont = Keuzelijst met invoerveld
Hoe kom je daaraan? Hoe héét die control?

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


Acties:
  • 0 Henk 'm!

Anoniem: 52565

Topicstarter
Lustucru schreef op dinsdag 05 januari 2010 @ 14:47:
[...]

Hoe kom je daaraan? Hoe héét die control?
Geen idee waar je het over hebt, maar het invoerveld heb ik zelf deze naam gegeven. Omdat ik dacht dat het wel eens aan de punten in de naam kon liggen hebben ik deze aangepast naar 'txtnamecont'.

Mijn huidige code is:

DoCmd.OpenReport "Afspraakoverzicht", acViewPreview, , "achternaam = " & "'txtnamecont'"

Werkt dus niet, moet (nog steeds) een parameter opgeven. Even een resume voor mezelf, ook om na te gaan of ik geen (on)logische denkfout maak:

Ik heb een formulier Rapportages. Hierop staat een keuzelijst met invoerveld waar de achternamen staan en/of ingevoerd kunnen worden. Als ik voor Mevrouw Pietje kies moet hij alle afspraken laten zien van mevrouw Pietje.

Ik heb een rapport gemaakt voor de opmaak, Afspraakoverzicht. In mijn code roep ik via de functie OpenReport het rapport Afspraakoverzicht aan. Omdat ik niet wil dat hij deze direct uitprint kies ik voor acViewPreview. Omdat ik geen filter heb staat er een "lege comma" waarna mijn "where-selectie" komt. Hier moet hij alleen het rapport tonen met de achternaam zoals getoond in de keuzelijst "txtnamecont".

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Kijk eens naar de kleur. Je schreef:
Visual Basic:
1
, "achternaam = " & "'txtnamecont'"

versus iets als
Visual Basic:
1
, "achternaam = '" & Replace(txtnamecont.Value,"'","''") & "'"


Ook al kun je het verschil tussen ' en " niet zien, hoop ik dat je het kleurverschil en de autocompletion wel kan zien... ;)

Overigens: om welke parameter werd er gevraagd? Op zich zou dat bij de code die je gaf niet moeten gebeuren, die zou op het veld achternaam moeten zoeken naar "txtnamecont", als achternaam bestaat.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • sjorsjuhmaniac
  • Registratie: Februari 2009
  • Laatst online: 23:23
Op dit moment ben je 2 strings aan het samenvoegen namelijk "achternaam =" en 'txtnamecont'

Ik neem aan de het de bedoeling is de waarde van de combo-box met de naam txtnamecont te gebruiken.

Dan zou je zoiets als dit krijgen:
Visual Basic:
1
"achternaam =" & txtnamecont.Text


Dit kan niet:
Visual Basic:
1
"achternaam =" & txtnamecont


omdat je dan een object in een string probeert te frotten.

Punten in de naam van controls en variabelen moet je vermijden omdat ook allen eigenschappen aangesproken worden door een punt achter de control-naam te zetten (gevolgd door de eigenschap/functie)

Acties:
  • 0 Henk 'm!

Anoniem: 52565

Topicstarter
Dank allen voor het meedenken.
Ik begrijp waar het fout is gegaan. Door het niet juist plaatsen van '-en en "-en was de code heel simpel, doch fout. Hij dacht dat "achternaam" "txtnamecont" was en liet het rapport zien met de naam "txtnamecont" welke uiteraard niet bestond.

Op dit moment is mijn code:

DoCmd.OpenReport "Afspraakoverzicht", acViewPreview, , "achternaam = " & "'" & txtnamecont & "'"

.. en werkt hij. Lustucru zat inderdaad goed met zijn singel-quotjes, maar ik begreep het zelf niet!

Nogmaals bedankt!

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ga nu eens op zoek naar de achternaam O'Neill.. ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Moirraine
  • Registratie: Mei 2008
  • Laatst online: 13-02-2024
En daarom kun je overigens in zulke gevallen beter je PK numeriek maken, bij voorkeur autonummering, dan zit je ook niet aan te modderen met zoveel quote tekens ;)

Acties:
  • 0 Henk 'm!

Anoniem: 113297

pedorus schreef op dinsdag 05 januari 2010 @ 15:52:
Ga nu eens op zoek naar de achternaam O'Neill.. ;)
en als je sql-injection helemaal wil voorkomen, zijn er nog wel zo'n paar tekentjes.
de apostrof komt iig zo vaak voor dat je dit inderdaad maar beter opvangt ;)
Pagina: 1