met listbox item(s) sql query maken

Status
Niet open voor verdere reacties.

tobo100

Gebruiker
Lid geworden
14 okt 2013
Berichten
156
hallo allemaal ik heb een probleem met het volgende misschien kan iemand me helpen
ik probeer door op een listbox te klikken (een of meerdere items)
een query te maken helaas lukt het niet echt
de waarde van listbox is een datapart in de vorm van een jaar...
later gaat de query een rapport vullen

bij voorbaat dank Vr Gr tobo
Bekijk bijlage Database1.rar
 
Er gaat nogal wat fout met je query. Laten we hem er eens bijhalen zoals je hem nu samenstelt:
Code:
SELECT * FROM blad1 WHERE blad1.geboortedatum   = 2006','2011') ORDER BY datum;
1. [geboortedatum] is een datumveld, geen jaartal. 2006 en 2011 zijn geen datums, maar jaartallen.
Oplossing: maak van WHERE blad1.geboortedatum = het volgende: WHERE Year([geboortedatum]) =
2. een jaartal is een getal, geen tekst. Jaartallen filter je zonder quootjes.
3. Als je op meerdere waarden wilt filteren, moet je aangeven dat je dat wilt doen. Het = teken betekent: is gelijk aan, en één jaartal van een geboortedatum kan nooit tegelijk 2006 en 2011 zijn.
Oplossing: verander het filter naar een OR variant, of een IN variant.
Het eindresultaat is dan bijvoorbeeld dit:
Code:
SELECT * FROM blad1 WHERE Year([geboortedatum])  In(2006,2011) ORDER BY datum
 
ik heb er dit van gemaakt maar klopt natuurlijk voor geen hout

Code:
strSQL = "SELECT * FROM blad1 WHERE Year([geboortedatum]) like strCriteria  ORDER BY id"
 
Alle tekst binnen de dubbele quootjes wordt letterlijk zo in de SQL gezet, en dat kan zo dus inderdaad niet. Want strCriteria is dynamisch. Bovendien is het nu één woord, en geen variabele. Ik zou graag de code zien die je nu gebruikt om strCriteria te maken, want LIKE hoort daar ook niet bij. Zoals ik al zei: gebruik OR of IN om de jaren te verzamelen.
Code:
strSQL = "SELECT * FROM blad1 WHERE Year([geboortedatum]) " &  strCriteria & " ORDER BY id"
 
dit is de code die ik gebruik
ik krijg nog steeds foutmelding bij de regel --> qdf.SQL = strSQL
ik kom er niet uit wat er fout gaat....

Code:
Dim strCriteria As String
Dim strSQL As String


Set db = CurrentDb()
Set qdf = db.QueryDefs("Query1")    ' <-------query file

For Each varItem In Me.lstFilter1.ItemsSelected
    If Not strCriteria = "" Then strCriteria = strCriteria & ","
    strCriteria = strCriteria & "'" & Me.lstFilter1.ItemData(varItem) & "'"
Next varItem

If Len(strCriteria) = 0 Then
   MsgBox "You did not select anything from the list" _
          , vbExclamation, "Nothing to find!"
   Exit Sub
End If

strCriteria = Right(strCriteria, Len(strCriteria) - 1)

strSQL = "SELECT * FROM blad1 WHERE Year([geboortedatum])  " & strCriteria & " ORDER BY id;"

qdf.SQL = strSQL

DoCmd.Requery "query1"

Set db = Nothing
Set qdf = Nothing
End Sub

Bekijk bijlage Database1.rar
 
Zolang je getallen als tekst blijft behandelen, blijf je een probleem houden.
 
denk dat het probleem is dat ik niet zie wat ik verkeerd doe
ik heb je laatste regel ingevoegd in de veronderstelling dat dat de juiste oplossing was
de taal vba die jij spreekt is als luisteren naar candelight van Jan van Veen
als ik die taal spreek is het net als je een gootsteen laat leeg lopen...:shocked:
 
Zelf luister ik liever naar een gootsteen die leegloopt dan naar Jan van Veen... niet alleen is een gootsteen een stuk muzikaler, het duurt ook nog eens korter :).
Ik heb in berichtje #2 al gezegd dat je het filter zonder quootjes moest maken. Dus zo:
Code:
For Each varItem In Me.lstFilter1.ItemsSelected
    If Not strCriteria = "" Then strCriteria = strCriteria & ","
    strCriteria = strCriteria & Me.lstFilter1.ItemData(varItem)
Next varItem
 
ik blijf maar vast lopen ik kom geen streep verder
de query word niet met gegevens gevuld

in de query: Year([geboortedatum]) criteria: In ([strCriteria])


Code:
Option Compare Database

Private Sub Knop1_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String


Set db = CurrentDb()
Set qdf = db.QueryDefs("Query1")

For Each varItem In Me.lstFilter1.ItemsSelected
    If Not strCriteria = "" Then strCriteria = strCriteria & ","
    strCriteria = strCriteria & Me.lstFilter1.ItemData(varItem)
Next varItem


If Len(strCriteria) = 0 Then
   MsgBox "You did not select anything from the list" _
          , vbExclamation, "Nothing to find!"
   Exit Sub
End If

strCriteria = Right(strCriteria, Len(strCriteria))
strSQL = "SELECT * FROM blad1 WHERE Year([geboortedatum])In (strCriteria) ORDER BY id"

qdf.SQL = strSQL

DoCmd.OpenQuery "query1"

'Set db = Nothing
'Set qdf = Nothing
End Sub
 
Laatst bewerkt:
Ik heb 'm toch anders. Probeer deze variant anders eens:
Code:
    Set db = CurrentDb()
    Set qdf = db.QueryDefs("Query1")
    
    For Each varItem In Me.lstFilter1.ItemsSelected
        If Not strCriteria = "" Then strCriteria = strCriteria & ","
        strCriteria = strCriteria & Me.lstFilter1.ItemData(varItem)
    Next varItem
    If Not strCriteria Is vbNullString Then
        strCriteria = "WHERE Year([geboortedatum]) In(" & strCriteria & ")"
    End If
    strSQL = "SELECT * FROM blad1 " & strCriteria & " ORDER BY geboortedatum;"
    qdf.SQL = strSQL
    
    DoCmd.OpenQuery "query1"
 
foutcode: typen komen niet met elkaar overeen
Code:
If Not strCriteria Is vbNullString Then
 
Welke versie gebruik je? Dat zou zonder meer moeten werken in een correcte db. Misschien moet je hem eens compileren, want ik denk dat er ergens een fout zit. Maar probeer 'm anders zo:
Code:
Not strCriteria = ""
 
na veel geploeter uuuuuuren rommelen eindelijk de code werkend gekregen
allen het stukje "'If Not strCriteria Is vbNullString Then" blijft fout melding geven
als ik dat uitsluit werkt alles naar behoren
ik heb access2013 64 bit btw
verder heb ik nog geprobeerd om de waarde van een textbox in de sql code te krijgen
het gaat om dit filter ### Like [Formulieren]![Filteren].[txtFilter2] & "*" ###
heeft iemand daar nog een idee over hoe ik dat correct moet toevoegen


Code:
Private Sub dezeresultaten_Click()
Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim varItem As Variant
Dim strCriteria As String
Dim strSQL As String


Set db = CurrentDb()
    Set qdf = db.QueryDefs("dezeresultaten")
    
    
For Each varItem In Me.lstFilter1.ItemsSelected
    If Not strCriteria = "" Then strCriteria = strCriteria & ","
    strCriteria = strCriteria & Me.lstFilter1.ItemData(varItem)
Next varItem


If Len(strCriteria) = 0 Then
 lstFilter1.BackColor = RGB(255, 0, 0)
   MsgBox "You did not select anything from the list" _
          , vbExclamation, "Nothing to find!"
          lstFilter1.BackColor = RGB(255, 255, 255)
   Exit Sub
End If


    
    For Each varItem In Me.lstFilter1.ItemsSelected
        If Not strCriteria = "" Then strCriteria = strCriteria & ","
        strCriteria = strCriteria & Me.lstFilter1.ItemData(varItem)
    Next varItem
    
    
    'If Not strCriteria Is vbNullString Then
        strCriteria = "WHERE Year([geboortedatum]) In(" & strCriteria & ")" 
        strSQL = "SELECT * FROM blad1 " & strCriteria & " [COLOR="#FF0000"]And Like [Formulieren]![Filteren].[txtFilter2] & "*"[/COLOR]  ORDER BY geboortedatum;"
    qdf.SQL = strSQL
    
    DoCmd.OpenQuery "dezeresultaten"
Set db = Nothing
Set qdf = Nothing
For Each varItem In Me.lstFilter1.ItemsSelected
    Me.lstFilter1.Selected(varItem) = False
Next varItem
End Sub
 
Heb ik je net met mooie code laten zien hoe je een filter opbouwt door de waarden uit het formulier te halen, grijp je zelf terug op de (in mijn ogen slechte) verwijzing in de query... Probeer 'm zelf eens aan te passen; je hoeft alleen maar een extra IF .. End IF toe te voegen op het tekstveld. En als VbNullString niet werkt, dan moet je op ="" filteren. Zoals ook al in de code gebeurt.
 
ik heb die query nodig (volgens mij) om waardes in een rapport te krijgen
de waardes van de listbox en waarde van een textvak
het lukt me wel om Of de een Of de ander in de query te krijgen maar niet gezamelijk
ik weet ook niet of dit de beste manier is om een rapport te vullen
misschien wil jij het onderstaande voor mij op de juiste manier aan elkaar knutselen?

vast bedankt Gr Tobo


Code:
Anaam = Me.txtFilter2.Value
    
        strCriteria = "WHERE Year([geboortedatum]) In(" & strCriteria & ")"
        strSQL = "SELECT * FROM blad1 " & strCriteria & "" 
        qdf.SQL = strSQL
        
        'strCriteria = "WHERE ([achternaam]) Like """ & Anaam & "*"""
   
        'strSQL = "SELECT * FROM blad1 " & strCriteria & ""
    'qdf.SQL = strSQL
    
    DoCmd.OpenQuery "dezeresultaten"
 
Is, zoals ik al zei, een simpele aanpassing. Je moet alleen een extra check inbouwen, want je moet in het criterium maar één keer WHERE gebruiken, en anders AND toevoegen.
Code:
    strCriteria = "WHERE Year([geboortedatum]) In(" & strCriteria & ")"
    If Me.txtFilter2.Value & "" <> "" Then aNaam = Me.txtFilter2.Value
    If aNaam <> "" Then
        If strCriteria <> "" Then strCriteria = strCriteria & " AND " Else: strCriteria = " WHERE "
        strCriteria = strCriteria & "([achternaam]) Like """ & aNaam & "*"""
    End If
    strSQL = "SELECT * FROM blad1 " & strCriteria & ""
    qdf.SQL = strSQL
    DoCmd.OpenQuery "dezeresultaten"
 
geweldig werkt als n speer ik ga proberen het een en ander uit te breiden dankje wel !!
 
Kan de vraag denk ik op <Opgeplost>!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan