Toon posts:

[Access2003] SQL parameter probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
in een tabel heb ik enkele queries opgeslagen in een memoveld. Op basis van een keuze op een formulier wordt een recordset gevormd van de resultaten van die query.

De query ziet er bijvoorbeeld zo uit:
code:
1
SELECT VELD1 FROM TABEL WHERE VELD2 = [forms]![test_form]![test_veld]


Dit werkt prima als ik de query met de QBE uitvoer, maar zodra ik in VBA de aanroep
code:
1
set rs = currentdb.openrecordset( enz. enz. )

Doe, krijg ik de melding "Er zijn te weinig parameters. het verwachte aantal parameters is 1"
De query is systactisch juist lijkt me, anders zou ik in de QBE ook een foutmelding moeten krijgen.

Iemand enig idee? voor de select clause
code:
1
PARAMETERS [forms]![test_form]![test_veld] char;
zetten helpt niet.

Verwijderd

Topicstarter
connecten via ADO geeft trouwens hetzelfde probleem

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 15-07 12:32
Ik denk dat er iets fout zit in de syntax die je gebruikt bij set rs = currentdb.openrecordset( ). De query die je daar invoert moet tussen " tekens komen te staan. Sowieso is het mooier als je zoiets als dit doet;

Visual Basic:
1
2
3
4
5
6
7
8
9
dim db as database
dim strSQL as string
dim rs as recordset

db=currentdb
strSQL = "SELECT veld1 " & _
              "FROM tabel1 " & _
              "WHERE veld1 = '" & forms!form!veldnaampje & "'"
rs = db.openrecordset(strSQL)

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


Verwijderd

Topicstarter
Masch schreef op vrijdag 15 juni 2007 @ 10:08:
Ik denk dat er iets fout zit in de syntax die je gebruikt bij set rs = currentdb.openrecordset( ). De query die je daar invoert moet tussen " tekens komen te staan. Sowieso is het mooier als je zoiets als dit doet;

Visual Basic:
1
2
3
4
5
6
7
8
9
dim db as database
dim strSQL as string
dim rs as recordset

db=currentdb
strSQL = "SELECT veld1 " & _
              "FROM tabel1 " & _
              "WHERE veld1 = '" & forms!form!veldnaampje & "'"
rs = db.openrecordset(strSQL)
Zo heb ik het ook gedaan, maar ik dacht voor simpliciteit schrijf ik het ff zo op...

  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 15-07 12:32
En als je eens gaat debuggen, wat krijg je als je een debug.print van strSQL geeft?

Als het goed is, dus de & tekens gebruikt zoals in mijn voorbeeld, moet hij de waarde van het veld in het WHERE gedeelte zetten. Als dit niet het geval is zit er nog steeds iets niet goed in de syntax. Bovenstaand voorbeeld werkt echter zeker, ik gebruik dit erg vaak. Misschien dat het aan het veldtype ligt (bij datum velden gebruik je bijvoorbeeld het # teken)

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 13:06

Dido

heforshe

Ik weet wel zeker dat je niet op de juiste manier je gegevens in je SQL-string stringt. Als je dat goed doet verwacht hij namelijk geen parameters, want je string je waarde ering, niet je veldnaam - althans, als je het goed doet.

Ik vermoed dus dat je de naam van je veld en niet je waarde in de query zet.

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Masch schreef op vrijdag 15 juni 2007 @ 10:18:
En als je eens gaat debuggen, wat krijg je als je een debug.print van strSQL geeft?

Als het goed is, dus de & tekens gebruikt zoals in mijn voorbeeld, moet hij de waarde van het veld in het WHERE gedeelte zetten. Als dit niet het geval is zit er nog steeds iets niet goed in de syntax. Bovenstaand voorbeeld werkt echter zeker, ik gebruik dit erg vaak. Misschien dat het aan het veldtype ligt (bij datum velden gebruik je bijvoorbeeld het # teken)
ik zal het zo zeggen: als ik de debug.print van de strSQL in een access query plak, geeft hij gewoon het goede resultaat, geen meldingen over parameters of fouten. daarom denk ik dus dat de syntax in orde is.

[ Voor 3% gewijzigd door Verwijderd op 15-06-2007 12:06 ]


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 13:06

Dido

heforshe

Verwijderd schreef op vrijdag 15 juni 2007 @ 12:04:
ik zal het zo zeggen: als ik de debug.print van de strSQL in een access query plak, geeft hij gewoon het goede resultaat, geen meldingen over parameters of fouten. daarom denk ik dus dat de syntax in orde is.
En plak die nou eens hier neer?
Er wordt nou al meermaals gezegd dat wat in die query werkt niet letterlijk gaat werken in je strSQL.

Het verschil:

"Select blaat from tabel where veld=[parameter];" werkt wel in de query, niet in strSQL

"Select blaat from tabel where veld=1245;" werkt ook in strSQL, dus moet je dat er ook instoppen.

Wat betekent mijn avatar?


  • Masch
  • Registratie: Augustus 2002
  • Laatst online: 15-07 12:32
Dido schreef op vrijdag 15 juni 2007 @ 13:50:
[...]

En plak die nou eens hier neer?
Er wordt nou al meermaals gezegd dat wat in die query werkt niet letterlijk gaat werken in je strSQL.

Het verschil:

"Select blaat from tabel where veld=[parameter];" werkt wel in de query, niet in strSQL

"Select blaat from tabel where veld=1245;" werkt ook in strSQL, dus moet je dat er ook instoppen.
Bovenstaande klopt helemaal. Om de onderste query in de string te krijgen moet je deze gaan samenstellen. Dit doe je door het gebruik van het & teken.

strSQL = "test" & "123" levert dus test123 op.

Als je parameter de waarde 123 is;
strSQL= "test" & [parameter] levert ook test123 op.

Ik gok dat jij echter dit doet';
strSQL = "test [parameter]", maar dit levert letterlijk test [parameter] op. Dit gaat goed als je dit in een access query gooit (die doet de vertaalslag alsnog), maar niet als je dit in een recordset gebruikt.

(\__/) Ik wist totaal niet wat hier neer te zetten....
(='.'=) Dus het werd....
("")("") Een konijn!!


Verwijderd

Topicstarter
Masch schreef op vrijdag 15 juni 2007 @ 15:56:
[...]

Bovenstaande klopt helemaal. Om de onderste query in de string te krijgen moet je deze gaan samenstellen. Dit doe je door het gebruik van het & teken.

strSQL = "test" & "123" levert dus test123 op.

Als je parameter de waarde 123 is;
strSQL= "test" & [parameter] levert ook test123 op.

Ik gok dat jij echter dit doet';
strSQL = "test [parameter]", maar dit levert letterlijk test [parameter] op. Dit gaat goed als je dit in een access query gooit (die doet de vertaalslag alsnog), maar niet als je dit in een recordset gebruikt.
Sjonge wat zijn jullie hardnekkig :> Zoals ik al zei doet de query het gewoon in een access query (via de QBE). Ook is het niet zo dat ik "sbsbsfb=[parameter]" doe, anders kan ie nooit over parameters beginnen te zeuren he? :)
SQL:
1
2
3
4
5
TRANSFORM Sum(Q_analyse4.F_aant) AS SomVanF_aant
SELECT Q_analyse4.O_AFD, Q_analyse4.K_naam, Q_analyse4.ART_Oms, Q_analyse4.F_omschrijving, Q_analyse4.F_actie, Format(Q_analyse4.BT_datum,"ww") AS Week, Sum(Q_analyse4.F_aant) AS Totaal
FROM Q_analyse4 WHERE (((CStr([Q_analyse4].[kwartaal])) ALike [forms]![F_analyse2]![kwartaalkeuze]) AND ((CStr([Q_analyse4].[week])) ALike [forms]![F_analyse2]![weekkeuze]) AND ((CStr([Q_analyse4].[maand])) ALike [forms]![F_analyse2]![maandkeuze]) AND ((CStr([Q_analyse4].[jaar])) ALike [forms]![F_analyse2]![jaarkeuze]) AND ((CStr([Q_analyse1].[O_AFD])) ALike CStr([forms]![F_analyse2]![afdkeuze])) AND ((Q_analyse4.K_naam) ALike [forms]![F_analyse2]![klantkeuze]) AND ((Q_analyse4.ART_Oms) ALike [forms]![F_analyse2]![artkeuze])) AND ((CStr([Q_analyse4].[L_id])) ALike [forms]![F_analyse2]![bukeuze])
GROUP BY Q_analyse4.BT_datum, Q_analyse4.O_AFD, Q_analyse4.K_naam, Q_analyse4.ART_Oms, Q_analyse4.F_omschrijving, Q_analyse4.F_actie
PIVOT Q_analyse4.FC_omschrijving;

Verwijderd

Alike->Like?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op dinsdag 19 juni 2007 @ 09:48:
[...]

Sjonge wat zijn jullie hardnekkig :> Zoals ik al zei doet de query het gewoon in een access query (via de QBE). Ook is het niet zo dat ik "sbsbsfb=[parameter]" doe, anders kan ie nooit over parameters beginnen te zeuren he? :)
Sjonge wat ben jij eigenwijs. ;)
Een query die in Acces gestart wordt, runt onder de applicatie. De applicatie vervangt parameters als forms!xyz!abc door de actuele waarde en stuurt de handel door naar de jet engine. Querys die vanuit code gestart worden spreken direct de jetengine aan en de jetenigine weet helemaal niks van formulieren en wat je verder nog onder de gui hebt draaien. Ergo, jet krijgt een query met een parameter binnen waar verder geen waarde aan toegekend is.
Oplossing: parameters van het query object vullen of de querystrign helemaal uitschrijven.

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


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 13:06

Dido

heforshe

Verwijderd schreef op dinsdag 19 juni 2007 @ 09:48:
Sjonge wat zijn jullie hardnekkig :>
En kennelijk terecht.

"where veld=[blaat]![foo].[bar]" werkt prima in je QBE, maar niet, never, nooit, van zijn langlevensdagen vanuit je VBa.
Daar moet je dus van maken "where veld=12435"

Dat is nou een paar keer gezegd, maar in de enige query die je post staat het nog fout. Pas dat nou eens aan, en kijk eens of het werkt?

Wat betekent mijn avatar?


Verwijderd

Topicstarter
Dido schreef op dinsdag 19 juni 2007 @ 11:34:
[...]

En kennelijk terecht.

"where veld=[blaat]![foo].[bar]" werkt prima in je QBE, maar niet, never, nooit, van zijn langlevensdagen vanuit je VBa.
Daar moet je dus van maken "where veld=12435"

Dat is nou een paar keer gezegd, maar in de enige query die je post staat het nog fout. Pas dat nou eens aan, en kijk eens of het werkt?
I stand corrected :S jeetje wat een beginnersfout... heb het nu opgelost met een ADO connectie die de parameterwaarden gewoon invult voordat de recordset .open doet. werken met "veld=" & [forms]!... is geen optie omdat de querystring uit een tabel moet komen.

iig bedankt
het ging overigens niet alleen over de zojuist genoemde query, daar moet sowieso nog "PARAMETERS.." bij

[ Voor 6% gewijzigd door Verwijderd op 19-06-2007 11:44 ]

Pagina: 1