Onvoldoende parameters bij SQL gebruik

Status
Niet open voor verdere reacties.

BasHD

Gebruiker
Lid geworden
2 dec 2008
Berichten
99
Hallo,

Ik gebruik een sql aanroep en vervolgens een Openrecordset.

De uitkomst is echter dat er onvoldoende parameters zijn. Verwacht 2.

Ik heb de VBA nog nooit zo geprobeerd. Gebruik ik OpenRecordset wel goed?

Fout komt bij het dik gedrukte gedeelte:

Wie kan mij helpen, hier is de code:

Code:
Private Sub cboDatum_Click()

Dim DBase As DAO.Database
Dim strSQL As String


Set DBase = CurrentDb
strSQL = "SELECT * FROM [CRV_DuurzaamheidJaar] WHERE [UBNNummer] = [Forms]![Leden]![UbnNummer] And [EindePer] = [Forms]![DuurzaamheidJaarForm]![cboDatum] ORDER BY [EindePer]DESC"

   [B][COLOR="darkorange"] With DBase.OpenRecordset(strSQL)[/COLOR][/B]         
        If .RecordCount > 0 Then
        [AanwVaarsAantJaar] = .Fields("AantVaars").Value
        End If
        .Close
    End With

'rst.Close
DBase.Close
Set DBase = Nothing

End Sub
 
Er vanuit gaande dat je de code vanuit een formulier afschiet, waar je filterwaarden op staan, moet je de code als volgt aanpassen:
Code:
strSQL = "SELECT * FROM [CRV_DuurzaamheidJaar] WHERE [UBNNummer] = " & [Forms]![Leden]![UbnNummer] & " And [EindePer] = " & [Forms]![DuurzaamheidJaarForm]![cboDatum] & " ORDER BY [EindePer]DESC"
 
de quootjes en het vervolg

Code:
strSQL = "SELECT * FROM [CRV_DuurzaamheidJaar] WHERE [UBNNummer] = " & [Forms]![Leden]![UbnNummer] & " And [EindePer] = " & [Forms]![DuurzaamheidJaarForm]![cboDatum] & " ORDER BY [EindePer]DESC"
With DBase.OpenRecordset(strSQL)
        If [B].RecordCount [/B]> 0 Then
        [AanwVaarsAantJaar] = .Fields("AantVaars").Value
        End If
        .Close
    End With

Deze formule wordt inderdaad vanuit een formulier afgeschoten. En doet het met de toevoeging van " & & "

Ik loop tegen het volgende aan:

De hierboven genoemde code geeft .recordCount 0.

De code hier onder geeft recordCount 1:

Code:
strSQL = "SELECT * FROM [CRV_DuurzaamheidJaar] WHERE [UBNNummer] = " & [Forms]![Leden]![UbnNummer] & " ORDER BY [EindePer]DESC"
With DBase.OpenRecordset(strSQL)
        If .RecordCount > 0 Then
        [AanwVaarsAantJaar] = .Fields("AantVaars").Value
        End If
        .Close
    End With

Dit stukje : And [EindePer] = " & [Forms]![DuurzaamheidJaarForm]![cboDatum] & "

is een keuzelijst met invoervak dat als volgt gevuld wordt:

Code:
Private Sub cboDatum_Enter()


Dim strSQL As String

strSQL = "SELECT [EindePer]"
strSQL = strSQL & "FROM [CRV_DuurzaamheidJaar]"
strSQL = strSQL & "WHERE [UBNNummer] = [Forms]![Leden]![UbnNummer]"
strSQL = strSQL & "ORDER BY [EindePer];"

'stSQL = "Select[Einde per] From [CRV_Duurzaamheid] WHERE [UBNNummer] = '" & [Forms]![Leden]![UbnNummer] & "' ORDER BY [EindePer];"

Forms![DuurzaamheidJaarForm]!cboDatum.RowSource = strSQL
Forms![DuurzaamheidJaarForm]!cboDatum.Requery

End Sub

Het heeft de eigenschap korte datum notatie. Ook in de tabel CRV_Duurzaamheid is dat zo.
Kan deze datum notatie storend zijn voor het correct uitvoeren van de SQL zodat recordCount geen 1 oplevert wat ik wil maar 0. En hoe kan ik dat veranderen?

Ik lees in de link van de eerste reactie dat SQL met Amerikaanse datum notaties werkt. Ik kan in de eigenschappen alleen maar Europeese notaties gaan vinden. Of moet ik mijn computer omgooien op amerikaanse uitvoering?
 
De notatie heeft er niets mee te maken; dat bepaalt alleen maar hoe je de datum ziet. Je filtert nu ook niet op een datumveld, maar op een numeriek veld. Dat kun je op twee manieren oplossen: of je vertaalt de datum naar een getal, of je geeft een specifieke opmaak mee. De code ziet er in het tweede geval zo uit:

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
& " And [EindePer] = " & Format([Forms]![DuurzaamheidJaarForm]![cboDatum], strcJetDate)

In het eerste geval:
Code:
& " And CDate([EindePer]) = " & CDbl([Forms]![DuurzaamheidJaarForm]![cboDatum])
Kies er één, zou ik zeggen ;)
 
Is het probleem al opgelost? Zo ja, mag je de vraag op Opgelost zette. Zo Nee: wat is nu het probleem?
 
volgende vraag

Hallo Michel,

Heb gekozen voor het volgende:

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
& " And [EindePer] = " & Format([Forms]![DuurzaamheidJaarForm]![cboDatum], strcJetDate)

Excuses dat ik niet zo snel gereageerd heb. Dat was netter geweest.

Er rijst wel een andere vraag:

Is er een mogelijkheid om een tabel te vullen vanuit 2 andere tabellen zonder tussen komst van een formulier.
Ik heb nu altijd gewerkt dat een tabel alleen gevuld kan worden aan de hand van een formulier weergave van de tabel.

Voorbeeld:

Tabel 1

Naam Nummer

Tabel 2

Nummer Score1 Score2

Gewenste tabel 3

Naam Score

Kan ik dan via een .MoveFirst commando naar de eerste Naam in tabel 1 gaan en vervolgens in tabel2 de scores bij het nummer zoeken om ze vervolgens in tabel 3 weg te schrijven?


Ik wil alleen weten of het mogelijk is want dan ga ik aan het nadenken maar stel dat het zonder formulier niet kan dan hoef ik er niet over te denken ook.

Gr

BB
 
Leg eerst eens uit wat het resultaat zou moeten zijn, en hoe de tabellen aan elkaar gelinkt zijn, want dat zie ik eerlijk gezegd nog niet zo. Tabel1 heeft in jouw voorbeeld twee velden: Naam en Nummer. Ik neem aan, dat Nummer daarbij het sleutelveld is. Dat komt ook terug in tabel2, maar die is nogal dramatisch genormaliseerd.... Normaal gesproken (let op het dubbele gebruik van Normaal ;) ) zou je maar één veld Score verwachten. En dan tabel3: Hierin gebruik je het Naamveld uit Tabel1, maar niet het sleutelveld. En hierin zie ik wèl één veld Score terugkomen.... Kortom: ik snap 'm niet...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan