Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

495 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

28 april 2024, 09:20:56

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: Too few parameters.Expected 1.  (gelezen 12765 keer)

0 leden en 1 gast bekijken dit topic.

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Too few parameters.Expected 1.
« Gepost op: 26 juli 2010, 16:50:37 »
Hallo idereen,
Ik heb de volgende query: "Select * FROM DemonstratieTabel WHERE InkoopDatum > InkoopDatumGrens ORDER BY Indicator" en stap voor stap door de code gaan levert bij het passeren van de querycode geen fout op. Zodra de routine waarin de query voorkomt verlaten wordt krijg ik de foutmelding in het onderwerp. Zet ik de query op tekst, dan blijft de fout weg. Ik heb twee vragen.
1) Waarom wordt de foutmelding niet gegeven direct na het uitvoeren van de code? Kan de oorzaak zijn dat de routine waarin de query voorkomt wordt aangeroepen in Form_Load?
2) Wat mankeert er aan de query? Als ik de query test met de Query Builder krijg ik geen     fout. 
Nog iets dat mogelijk van belang kan zijn:
De InkoopDatum is een string. Omdat je daarmee niet met > kunt werken (ook met Val krijg ik een fout) heb ik dat probleem omzeild door een variabele InkoopDatumGrens te declareren,  die een waarde te geven en die na > te gebruiken. Deze InkoopDatumGrens zit echter niet in de database. Hoe los ik dit probleem op een nette manier op?

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #1 Gepost op: 26 juli 2010, 22:40:04 »
Hallo Jan,

Zonder de exacte code en variabele waardes is het lastig zoeken.
Vervang de query eens door:
"Select * FROM DemonstratieTabel WHERE " & chr(34) & InkoopDatum & chr(34) & " > " & chr(34) & InkoopDatumGrens & chr(34) & " ORDER BY Indicator"

Let op de spatie voor en achter het > teken.


Groeten, Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #2 Gepost op: 27 juli 2010, 15:55:43 »
Hoi Peter,
Bedankt voor je reactie. Jouw versie van de query geeft de fout niet, maar ik begrijp niet waarom niet. Wil je me uitleggen wat toevoegen van deze quotes precies doet?

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #3 Gepost op: 27 juli 2010, 19:29:05 »
Citaat
Wil je me uitleggen wat toevoegen van deze quotes precies doet?
Maar natuurlijk. Het zorgt ervoor dat de variabele waardes ook als een waarde in de query staan en niet gefragmenteerd worden als er bijvoorbeeld spaties in voorkomen, waardoor de query zelf verminkt raakt.
Ook wordt de query gevuld met de variabele-waarde en niet met de variabele-naam.


Peter

 
 


Offline Ronald

  • Forum Manager
  • *****
  • Berichten: 1.856
  • Geslacht: Man
    • NL Computer Forum
Re: Too few parameters.Expected 1.
« Reactie #4 Gepost op: 27 juli 2010, 20:38:49 »
Hoi Peter,

Vervang de query eens door:
"Select * FROM DemonstratieTabel WHERE " & chr(34) & InkoopDatum & chr(34) & " > " & chr(34) & InkoopDatumGrens & chr(34) & " ORDER BY Indicator"

Moet dat niet zijn... :

"Select * FROM DemonstratieTabel WHERE InkoopDatum > " & chr(34) & InkoopDatumGrens & chr(34) & " ORDER BY Indicator"

Ik vermoed dat 'Inkoopdatum' de kolomnaam is, en geen variabele. :P

Maar ook 'InkoopDatumGrens' zou een kolomnaam kunnen zijn. Dat weten we pas als Jan laat zien hoe zijn tabel er precies uitziet. :)

Groeten,

Ronald
Forum Manager NL Computer Forum
Microsoft Certified Solutions Expert (MCSE) - Business Intelligence

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #5 Gepost op: 27 juli 2010, 21:15:53 »
Hi Peter,
Bedankt voor je reactie. Ik begrijp de oplossing en heb nog een puzzle waar ik niet uit kom.
Als ik de query uitvoer in de Query Builder doet hij het in beide versies: die van jou en die van mij. Kennelijk is de QueryBuilder niet erg betrouwbaar. Maar goed, de fout is weg, maar er is een andere fout (die niet door VB als fout wordt aangemerkt). Als ik de query Run in de QueryBuilder is de tabel keurig gesorteerd. Voer ik de query uit in de programmacode, dan sorteert hij niet.
Ik gebruik alleen de code van de Databasename en de RecordSource als volgt:
Dim InkoopDatumGrens
InkoopDatumGrens = 20000102
datDemonstratie.DatabaseName = ext(App.Path) & "DATABASE\Portef1.mdb"
datDemonstratie.RecordSource = "Select * FROM DemonstratieTabel WHERE " & Chr(34) & InkoopDatum & Chr(34) & " > " & Chr(34) & InkoopDatumGrens & Chr(34) & " ORDER BY Indicator"
Dit is toch voldoende. Als ik de query typ in de eigenschap RecordSource van Eigenschappen werkte het bij  mij altijd wel. Hij zou het dan dus ook in de code moeten doen?

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #6 Gepost op: 27 juli 2010, 23:50:35 »
Jan,

Probeer eens de tip van Ronald in deze berichtendraad.

Lukt het dan wel?

Citaat
Als ik de query typ in de eigenschap RecordSource van Eigenschappen   werkte het bij  mij altijd wel. Hij zou het dan dus ook in de code   moeten doen?
Wat gebeurt er als je datDemonstratie.Refresh direct na datDemonstratie.RecordSource = ... zet?


Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #7 Gepost op: 28 juli 2010, 16:32:59 »
Hallo Peter,
Als ik dat doe verandert er niets, het werkt nog steeds niet. Als ik de query heb uitgevoerd en dan probeer de gesorteerde records in een array in te lezen krijg ik de foutmelding "No current record" bij uitvragen van de tabel. Na afsluiten en opniew opstarten van het systeem en het programma kreeg ik de de fout "Object variable or With block variable not set". Waar zou dat op kunnen slaan? Volledigheidshalve geef ik hier de code die ik gebruik:
In een in Form_Load van het Main wordt een routine aangeroepen met daarin o.a.
datDemonstratie.DatabaseName = ext(App.Path) & "DATABASE\Portef1.mdb"
datDemonstratie.RecordSource = "DemonstratieTabel"
Deze code is bedoeld om de tabel te vullen en wat andere zaken uit te voeren en deze tabel bevat inderdaad records.
In de routine waarin de query wordt gebruikt heb ik als code:
Dim InkoopBedrag, VerkoopBedrag
frmInvestor.datQueryDemonstratie.DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
frmInvestor.datQueryDemonstratie.Refresh
Dim InkoopDatumGrens
InkoopDatumGrens = 20000102
frmInvestor.datQueryDemonstratie.RecordSource = "Select * FROM DemonstratieTabel WHERE " & Chr(34) & InkoopDatum & Chr(34) & " > " & Chr(34) & InkoopDatumGrens & Chr(34) & " ORDER BY Indicator"

 

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #8 Gepost op: 28 juli 2010, 19:35:45 »
Hoi Ronald,
InkoopDatum en InkoopDatumGrens zijn geen van beide kolomnamen. InkoopDatum is een veld in de tabel en InkoopDatumGrens is een externe variabele (dus geen veld in de tabel).

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #9 Gepost op: 28 juli 2010, 19:53:50 »
Jan,

De datQueryDemonstratie.Refresh staat op de verkeerde plaats.

Vervang deze code:
Dim InkoopBedrag, VerkoopBedrag
frmInvestor.datQueryDemonstratie.DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
frmInvestor.datQueryDemonstratie.Refresh
Dim InkoopDatumGrens
InkoopDatumGrens = 20000102
frmInvestor.datQueryDemonstratie.RecordSource  = "Select * FROM DemonstratieTabel WHERE " & Chr(34) &  InkoopDatum & Chr(34) & " > " & Chr(34) &  InkoopDatumGrens & Chr(34) & " ORDER BY Indicator"

door deze code:
Dim InkoopBedrag, VerkoopBedrag
Dim InkoopDatumGrens

frmInvestor.datQueryDemonstratie.DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
InkoopDatumGrens = 20000102
frmInvestor.datQueryDemonstratie.RecordSource  = "Select * FROM DemonstratieTabel WHERE " & Chr(34) &  InkoopDatum & Chr(34) & " > " & Chr(34) &  InkoopDatumGrens & Chr(34) & " ORDER BY Indicator"
frmInvestor.datQueryDemonstratie.Refresh

Als ik de code overneem is InkoopDatum nog onbekend. Ik neem dat die hetzelfde formaat heeft als InkoopDatumGrens.
Verder zijn de variabelen types niet opgegeven waardoor ze het type Variant worden.
Naar mijn mening is het beter het type te gebruiken dat de waarde in de tabel heeft. In het geval van InkoopDatum en InkoopDatumGrens zou dat het type String kunnen zijn.

Verandert dat iets?


Peter
(Sorry, mijn kennis van SQL is niet al te groot.)

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #10 Gepost op: 28 juli 2010, 21:25:42 »
Hi Peter,
Geen probleem, mijn kennis van SQL is evenmin groot, zoals je gemerkt zult hebben.
Je hebt natuurlijk gelijk dat het het beste is variabelen gelijk het juiste type mee te geven. Ik had dat ook gedaan, maar omdat vóór jouw toevoeging van Chr(34) de string niet werd geaccepteerd door VB, ik dacht vanwege de > InkoopDatumGrens, heb ik het type weggehaald.
Je laatste aanwijzing opgevolgd, maar hij blijft "no current record" aangeven.   

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #11 Gepost op: 28 juli 2010, 21:47:32 »
Citaat
Je laatste aanwijzing opgevolgd, maar hij blijft "no current record" aangeven.
Vermoedelijk is er toch iets mis met de query in de regel:
frmInvestor.datQueryDemonstratie.RecordSource = "Select * FROM   DemonstratieTabel WHERE " & Chr(34) & InkoopDatum & Chr(34)   & " > " & Chr(34) & InkoopDatumGrens & Chr(34) & "   ORDER BY Indicator"

Vervang bovenstaande regel door:
Dim sRS As String
sRS = "Select * FROM   DemonstratieTabel WHERE " & Chr(34) & InkoopDatum & Chr(34)   & " > " & Chr(34) & InkoopDatumGrens & Chr(34) & "   ORDER BY Indicator"
frmInvestor.datQueryDemonstratie.RecordSource = sRS
MsgBox sRS

Wat staat er in de MsgBox?


Peter

Offline Ronald

  • Forum Manager
  • *****
  • Berichten: 1.856
  • Geslacht: Man
    • NL Computer Forum
Re: Too few parameters.Expected 1.
« Reactie #12 Gepost op: 28 juli 2010, 23:15:18 »
Hoi Jan,
InkoopDatum en InkoopDatumGrens zijn geen van beide kolomnamen. InkoopDatum is een veld in de tabel en InkoopDatumGrens is een externe variabele (dus geen veld in de tabel).

Laat ik het dan zo vragen: als je de inhoud van die tabel in Excel zou zetten, wat staat er dan bovenaan in de 1e rij (dat noem ik de kolomnamen)?
En wat staat er dan vervolgens daaronder *in* de tabel?

Ik bedoel dus bijvoorbeeld zoiets:

Productcode   Productomschrijving   Inkoopdatum   Stuks
A123          Sigarenuiteigendozen  28-07-2010    12

Groeten,

Ronald
Forum Manager NL Computer Forum
Microsoft Certified Solutions Expert (MCSE) - Business Intelligence

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #13 Gepost op: 29 juli 2010, 01:18:13 »
Ronald,
Als ik de tabel bekijk met Visual Data Manager heeft de tabel alleen maar rijen. Maar als je meerdere records in een spreadsheet wilt zetten worden de rijen kolommen en bestaat elke regel uit de samenstellende velden van de rijen. In die zin kun je van kolommen spreken.
 
 
m.vr.gr.,
Jan

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #14 Gepost op: 29 juli 2010, 01:36:34 »
Peter,
Als ik deze vervanging uitvoer en het programma draai krijg ik in de MsgBox
"SELECT * FROM DemonstratieTabel WHERE "" > "20000102" ORDER BY Indicator" en geeft het programma de fout "Object variable or With block variable not set". Hij leest en sorteert dus kennelijk de tabel niet, want de MsgBox geeft InkoopDatum als leeg.