Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

492 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

28 april 2024, 13:39:22

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

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

0 leden en 1 gast bekijken dit topic.

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #15 Gepost op: 29 juli 2010, 20:57:07 »
Jan,

Citaat
in de MsgBox
"SELECT * FROM DemonstratieTabel WHERE "" > "20000102" ORDER BY Indicator"
Dat dacht ik al. De variabele InkoopDatum is leeg en dat geeft dergelijke fouten.
Controleer dus je code of zorg ervoor dat de query niet uitgevoerd wordt als InkoopDatum leeg is.


Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #16 Gepost op: 30 juli 2010, 13:01:17 »
Hoi Peter,
De InkoopDatum is in de tabel nergens leeg of 0. Het lijkt er dus op dat hij de tabel niet herkent of kan vinden of de tabel is op dat moment niet beschikbaar. Dat lijkt mij echter stug, want de database en de recordsource worden ingesteld in de Form_Load van het hoofdformulier en dit stadium is het programma allang voorbij wanneer de query wordt uitgevoerd.

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #17 Gepost op: 30 juli 2010, 18:58:00 »
Hoi Jan,

Volgens mij zitten we niet op 1 spoor. Even een paar vragen.
Wat is nu precies 'InkoopDatum'?
a) Is dat een string die ergens in je VB programma gedeclareerd is, zoals ik dat begrijp in je 1e bericht:
Citaat
Nog iets dat mogelijk van belang kan zijn:
De InkoopDatum is een string.
Zoja, waar wordt InkoopDatum dan gevuld.

b) is 'InkoopDatum' een kolom in de tabel zoals Ronald aangaf in bericht #12.
In dat geval moet de query zijn:
sRS = "Select * FROM DemonstratieTabel WHERE InkoopDatum > " & Chr(34) & InkoopDatumGrens &   Chr(34) & "   ORDER BY Indicator"

Lukt het dan wel?
Graag alle vragen beantwoorden.

Nog een tip:
Log de query en eventueele errors in een logbestand inclusief de sub of functienaam waar de code in staat. Dan kun je beter analyseren wat je code uitvoert.


Peter
 

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #18 Gepost op: 30 juli 2010, 20:43:21 »
Hoi Peter,
Hierbij het gevraagde, alsmede twee subs die het geheel in een bepaald kader plaatsen.
InkoopDatum is dus een kolom in Tabel DemonstratieTabel en is in Visual Data Manager gedefinieerd als string.

Offline Ronald

  • Forum Manager
  • *****
  • Berichten: 1.856
  • Geslacht: Man
    • NL Computer Forum
Re: Too few parameters.Expected 1.
« Reactie #19 Gepost op: 30 juli 2010, 21:26:54 »
Hoi Jan,

Ok, het is dus toch de naam van een kolom in de tabel. Die moet dan in ieder geval NIET variabel zijn. :D

Select * FROM DemonstratieTabel WHERE InkoopDatum > " & Chr(34)   & InkoopDatumGrens &  Chr(34) & " ORDER BY Indicator"
Dit zou al beter moeten werken. Van belang kan nog wel zijn welk datatype de InkoopDatum kolom heeft. Dat kun je eventueel in Access nakijken, bij het opmaken van de tabel. Als het een 'echte' datum is, dan zou je nog kunnen proberen met 'InkoopDatumGrens = "2000-10-02".

Wat mij in de code opvalt, is dat je bij het uitlezen van de tabel voor een deel andere kolommen uitleest dan er bij het vullen van de tabel worden aangesproken. Bijvoorbeeld de "NaamFonds" kolom: deze wordt opgevraagd bij het uitlezen, maar niet gevuld bij het vullen van de tabel. Of heeft "NaamFonds" een standaard waarde?

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 #20 Gepost op: 30 juli 2010, 22:22:17 »
Hi Ronald,
De InkoopDatum is gedefinieerd als string, omdat met het gebruikelijke datumformaat
dd-mm-jjjj zo omslachtig  te sorteren valt. Op datums wordt in mijn programma heel vaak gesorteerd, omdat alle bestanden die ik gebruik de datum al in die stringvorm hebben. Dus gewoon een kwestie van gemakzucht (of luiheid als je wilt).   
Je opmerking dat bij het aanmaken van de tabel veld Symbool gebruikt wordt dat bij het ophalen NaamFonds heet is juist, maar deze worden vaak door elkaar gebruikt. Maar om te voorkomen dat de gegevens uit dit veld gewist worden bij veranderen van de naam van het veld in de tabel heb ik het maar zo gelaten. Het was de bedoeling deze aan het einde van de rit aan elkaar gelijk te maken en uit te proberen of de inhoud al dan niet gewist wordt bij veranderen van naam.
 
 
groetjes,
 
Jan

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #21 Gepost op: 31 juli 2010, 13:57:36 »
Hoi Jan,

In je code mis ik weer het database .Refresh commando.
Als ik dat toevoeg lukt het hier wel en blijft de melding 'error 91...' en 'no current record' weg.
Hieronder de aangepaste en opgeschoonde code:
Public Sub OphalenDemonstratieTabel(TransactieMatrix())

On Error GoTo FoutOphalenDemonstratieTabel

Dim InkoopBedrag As Currency, VerkoopBedrag As Currency
Dim InkoopDatumGrens As String
Dim M As Integer

With frmInvestor.datQueryDemonstratie
   .DatabaseName = frmInvestor.ext(App.Path) & "DATABASE\Portef1.mdb"
   InkoopDatumGrens = "20000102"
   Dim sRS As String
   sRS = "Select * FROM DemonstratieTabel WHERE InkoopDatum > " & Chr(34) & InkoopDatumGrens & Chr(34) & " ORDER BY Indicator"
   .RecordSource = sRS
   .Refresh
   M = 0
   Do While .Recordset.EOF = False
   If .Recordset("InkoopAantal") <> 0 And .Recordset("VerkoopAantal") <> 0 And .Recordset("InkoopDatum") > 20001002 And .Recordset("VerkoopDatum") > 20001003 Then
      M = M + 1
      TransactieMatrix(M, 0) = .Recordset("NaamFonds")
      TransactieMatrix(M, 1) = .Recordset("IndicatorTekst")
      TransactieMatrix(M, 2) = .Recordset("InkoopAantal")
      TransactieMatrix(M, 3) = .Recordset("VerkoopAantal") * .Recordset("VerkoopKoers") - .Recordset("VerkoopAantal")
      TransactieMatrix(M, 4) = .Recordset("InkoopKoers")
      TransactieMatrix(M, 5) = .Recordset("VerkoopKoers")
      TransactieMatrix(M, 6) = .Recordset("InkoopKosten")
      TransactieMatrix(M, 7) = .Recordset("VerkoopKosten")
      TransactieMatrix(M, 8) = .Recordset("InkoopBedrag")
      TransactieMatrix(M, 9) = .Recordset("VerkoopBedrag")
      TransactieMatrix(M, 10) = .Recordset("InkoopDatum")
      TransactieMatrix(M, 11) = .Recordset("VerkoopDatum")
      TransactieMatrix(M, 12) = .Recordset("TransactieSoort")
      TransactieMatrix(M, 13) = .Recordset("HoldingPeriod")
      TransactieMatrix(M, 14) = .Recordset("MFE")
      TransactieMatrix(M, 15) = .Recordset("MAE")
   End If
   .Recordset.MoveNext
Loop
End With
Exit Sub

FoutOphalenDemonstratieTabel:
    FoutBron = Err.Number & " " & Err.Description
    Call frmInvestor.WriteLog("---< " & sRS & " geeft fout " & FoutBron & " in OphalenDemonstratieTabel")
    If FoutBron <> VorigeFout Then
'        Call frmInvestor.WriteLOG("---< " & App.Title & " geeft >---" & Foutbron)
        VorigeFout = FoutBron
        Resume Next
    End If
End Sub


Lukt het nu wel?


Peter

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #22 Gepost op: 31 juli 2010, 17:57:57 »
Hoi Peter,
Het is nu gelukt. De tabel wordt keurig gesorteerd en de fouten blijven weg. Heel erg bedankt voor je hulp.
Het valt met je SQL-kennis dus nog wel mee. Rest mij nog een vraag: In welke gevallen is het nodig een Refresh te geven? Ik heb in mijn programma nog een paar andere queries en in geen van deze gevallen was een Refresh nodig.
 

Offline jvdpeet †
  • Senior lid
  • ****
  • Berichten: 365
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #23 Gepost op: 31 juli 2010, 18:01:52 »
Hoi Ronald,
De query werkt nu goed en zonder fouten. Ik was de Refresh vergeten en Peter maakte mij daarop opmerkzaam. Je opmerking over NaamFonds in de ene routine en Symbool in de andere routine was juist. Het was inderdaad een fout.
Hartelijk bedankt voor je hulp.
 

Offline Peter

  • Sysop
  • *****
  • Berichten: 5.683
  • Geslacht: Man
Re: Too few parameters.Expected 1.
« Reactie #24 Gepost op: 31 juli 2010, 21:27:29 »
Jan,

Citaat
In welke gevallen is het nodig een Refresh te geven?
Als .DatabaseName of.RecordSource verandert. Het commando .Refresh zorg voor een verversing van je database component in VB. Met de eerste 2 commando's wordt alleen een waarde ingesteld en dus niet automatisch je database component ververst.

Nog een opmerking:
In de sub AanmakenDemonstratieTabel staat 2 keer de regel
     frmInvestor.datDemonstratie.Recordset("InkoopAantal") = TransactieMatrix(i, 2)


groeten, Peter
« Laatst bewerkt op: 31 juli 2010, 21:36:44 door Peter »