VBA probleempje met sql

Status
Niet open voor verdere reacties.

rebirth

Gebruiker
Lid geworden
17 jun 2008
Berichten
170
Ik zit al een tijdje te werken aan een systeem waarbij ik iedere dag een txt file van een vingerafdrukapparaat inlees, om zo de uren automatisch in te lezen van kinderen die in een kinderopvang aankomen. Nu heb ik de basisgegevens vanuit die file in een tabel, maar moet dit daarna 'correct ingedeeld worden. En daar zit ik wat vast. Ik had voorheen een variant gemaakt met een 4tal Dlookup's in elkaar. Maar eigenlijk wou ik een nettere en meer correcte oplossing, daarom dat ik op suggestie van iemand hier, de boel toch ben gaan veranderen. Alleen krijg ik em maar niet aan het werk, en nu krijg ik steeds de melding "gegevenstypen komen niet overeen in criteriumexpressie", en die krijg ik dus niet opgelost? Ik heb er een voorbeeldje bijgestoken, alle code zit achter het knopje in het formulier. Om toch even de reacties voor te zijn, ik weet dat de indeling ervan niet is zoals het waarschijnlijk hoort te zijn, maar aangezien ik alles zowat uit mezelf leer en via experimenteren, heb ik er ook niet de kennis van. Maar ik hoop dat iemand me toch wat verder op weg kan helpen, zodat ik er verder mee kan en hem toch aan het werk kan krijgen.
Bekijk bijlage KO.zip
 
Code:
Set rst = db.OpenRecordset("SELECT Kind.KindID, Kind.[FP_id mama], Kind.[FP_id papa], Kind.[FP_id 3], Kind.[FP_id 4] FROM Kind WHERE (((Kind.[FP_id mama])='" & rs1!veld6 & "')) OR (((Kind.[FP_id papa])='" & rs1!veld6 & "')) OR (((Kind.[FP_id 3])='" & rs1!veld6 & "')) OR (((Kind.[FP_id 4])='" & rs1!veld6 & "'));")
De aangepaste regel hierboven lijkt de foutmelding te vermijden.
 
Klopt; Een tekstveld moet je filteren als een tekstveld, en niet als een numeriek veld. Overigens (en dat is de reden van deze toevoeging) zou ik de code wat netter opschrijven:
Code:
Dim strSQL As String
[B][/B]strSQL = "SELECT KindID, [FP_id mama], [FP_id papa], [FP_id 3], [FP_id 4] " _
    & "FROM Kind WHERE (([FP_id mama])='" & rs1!veld6 & "') " _
    & "OR ([FP_id papa]='" & rs1!veld6 & "') " _
    & "OR ([FP_id 3]='" & rs1!veld6 & "') " _
    & "OR ([FP_id 4]='" & rs1!veld6 & "'))"
Set rst = db.OpenRecordset(strSQL)
 
@ Michel,
Bedankt voor de aanvulling, Access/VBA/SQL is redelijk onbekend terrein voor mij.
De aanpassing die ik voorstelde was ook puur gebaseerd op het googlen van "Set rst = db.OpenRecordset("SELECT " en de vragen/antwoorden die ik daarbij tegenkwam. Jouw verklaring over het filteren als tekstveld geeft de achterliggende reden.
 
Bedankt voor de hulp beide, en voor de verduidelijking Michel. Ik wist eigenlijk niet dat ik dit anders als numeriek veld aanzien werd.
Nu alleen nog de melding dat er een ) teveel staat in de code wegkrijgen. Want volgens mij staat die er helemaal niet.
 
Die stond er wel :o
Code:
Dim strSQL As String
strSQL = "SELECT KindID, [FP_id mama], [FP_id papa], [FP_id 3], [FP_id 4] " _
    & "FROM Kind WHERE (([FP_id mama]='" & rs1!veld6 & "') " _
    & "OR ([FP_id papa]='" & rs1!veld6 & "') " _
    & "OR ([FP_id 3]='" & rs1!veld6 & "') " _
    & "OR ([FP_id 4]='" & rs1!veld6 & "'))"
Set rst = db.OpenRecordset(strSQL)
Goeie tip misschien: als je Notepad++ als editor gebruikt (i.p.v. Notepad bijvoorbeeld) kun je heel makkelijk controleren of het aantal haakjes klopt.
 
Yep, ik had em intussen ook al gevonden :-)
Die Notepad++ ga ik me inderdaad eens downloaden, ziet er wel handig uit.
En intussen werkt gans m'n code, en is het stukken beter dan m'n Dlookup variant.
Dus hartelijk dank voor de hulp heren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan