VBA Query probleem

Status
Niet open voor verdere reacties.

PatrickStel

Gebruiker
Lid geworden
20 mei 2015
Berichten
39
Hallo,

Ik ben bezig in vba om een query te laten lopen, die maakt gebruik van 2 variabelen.
normaal heb ik hier geen problemen mee maar dit x kom ik er niet uit

Code:
    SQL_T = "SELECT COUNT (*) AS [Person_Hit] FROM AangemeldeMensen WHERE [Achternaam] = '" & Me.Achternaam & "' AND Format([Geboortedatum], 'Short Date') = '" & Me.GeboorteDatum & "'"
    Set dbs = CurrentDb
    Set rs = dbs.OpenRecordset(SQL_T)
    Person_Hit = rs!Person_Hit
    MsgBox Person_Hit

De variabelen zijn afkomstig van een formulier.

Als ik deze query laat lopen met de waarden;
Me.Achternaam heeft waarde Voorbeeld
Me.GeboorteDatum heeft waarde 2-9-1980

Krijg ik 0 op de return, wat raar is want: Voorbeeld uit 2-9-1980 bestaat zeker wel in AangemeldeMensen, ook als Achternaam weg laat ui de query en alleen geboortedatum overlaat krijg ik wel de return 1.
Ik weet trouwens dat de geboortedatum eigenlijk met # moet.

Als ik Me.achternaam in een msgbox weer geef zie ik wel Voorbeeld, maar om een reden die ik nu niet zie gaat hij niet lekker de query in.

Iemand die mij kan vertellen welke fout ik gemaakt heb?

Alvast bedankt,
Patrick
 
Ik vind het erg raar dat je een datumveld probeert te filteren met een tekststring. Alsof je, als je in Polen rijdt, je navigatiessysteem op een Poolse stem zet, omdat die het wel beter zal weten :). Daarnaast vind ik het überhaupt al raar dat je nog een goede uitkomst krijgt zo ook, want dat zou dus echt niet moeten kunnen. Als je in VBA gaat filteren, werk je met Amerikaanse datumformaten. Jouw formulier ziet de datum in de (mag ik aannemen) Nederlandse opmaak. Ergo: 2-9-1980 is dan niet hetzelfde als 2-9-1980. Je datum wordt in VBA namelijk gezien als 9-2-1980. En daar doet jouw opmaak niets goeds mee.
Ik filter een datumveld dus sowieso altijd als een datumveld; ik zie geen enkele reden om dat niet te doen. Maar om de juiste datum te lezen, zet ik die eerst om naar een getal. En in de query wordt dat getal dan weer terugvertaald naar een datum. En dat ziet er dan zo uit:
Code:
    SQL_T = "SELECT COUNT (1) AS [Person_Hit] FROM AangemeldeMensen " _
        & "WHERE [Achternaam] = """ & Me.Achternaam & """ " _
        & "AND [Geboortedatum] = CDate(" & CDbl(Me.GeboorteDatum) & ")"
    Set rs = CurrentDb.OpenRecordset(SQL_T)
    MsgBox rs!Person_Hit
Ik heb de db niet, dus ik kan niet controleren of het werkt :).
 
Bedankt voor je reactie, het klinkt inderdaad beetje wazig, en je hebt ook helemaal gelijk eigenlijk zou ik een datum als een datum moeten hanteren.

Maar het idiote is dat hij Me.Achternaam niet in de query wegschrijft zoals het hoort.

Als ik deze Query uitvoer :
Code:
SQL_T = "SELECT COUNT (1) AS [Person_Hit] FROM AangemeldeMensen WHERE [Geboortedatum] = CDate(" & CDbl(Me.GeboorteDatum) & ") AND [Achternaam] = 'Voorbeeld'"
Krijg ik wel een positieve return namelijk 1
maar doe ik deze query
Code:
SQL_T = "SELECT COUNT (1) AS [Person_Hit] FROM AangemeldeMensen WHERE [Geboortedatum] = CDate(" & CDbl(Me.GeboorteDatum) & ") AND [Achternaam] = """ & Me.Achternaam & """"

dan krijg ik een negatieve return namelijk 0

en dat is dus zo wazig
 
Het enige verschil tussen AND [Achternaam] = 'Voorbeeld'" en AND [Achternaam] = """ & Me.Achternaam & """" (op de enkele/dubbele quote na, waarbij de dubbele quote de voorkeur verdient) is dat je in jouw eerste voorbeeld de naam hard inprogrammeert, en in het tweede zacht. Het tweede voorbeeld is dus afhankelijk van een object. Ik vermoed dat de naam ervan anders is, of dat de vulling niet d.m.v. het veld [Achternaam] gebeurt. Je kunt dat controleren door eerst een Msgbox te gebruiken:
Code:
MsgBox Me.Achternaam
Die moet de naam teruggeven die je wilt zien. Blijft de msgbox leeg, dan heb je dus het probleeem dat het veld leeg wordt gezien.
 
Dat begrijp ik, ook als ik msgbox me.Achternaam doe zie ik gewoon Voorbeeld vandaar die query met Voorbeeld hardcoded erin, kijken als dat wel werkte
 
Dan zie ik de fout niet; je kunt de SQL nog even testen met een Inputbox; zo bijvoorbeeld:
Code:
Dim tmp as String
     SQL_T = "SELECT COUNT (1) AS [Person_Hit] FROM AangemeldeMensen WHERE [Geboortedatum] = CDate(" & CDbl(Me.GeboorteDatum) & ") AND [Achternaam] = ""Voorbeeld"""
     tmp=Inputbox("","",SQL_T)
     SQL_T = "SELECT COUNT (1) AS [Person_Hit] FROM AangemeldeMensen WHERE [Geboortedatum] = CDate(" & CDbl(Me.GeboorteDatum) & ") AND [Achternaam] = """ & Me.Achternaam & """"
     tmp=Inputbox("","",SQL_T)
Daar zou dan, als je de tekst uit de inputbox kopieert naar het Kladblok, twee keer hetzelfde moeten staan.
 
Ik weet ook niet waar het fout ging, waarschijnlijk iets fout op de pc want nu is het wel goed...

Bedankt voor je hulp!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan