Listbox voor Multiple selection in Form

Status
Niet open voor verdere reacties.

AMBERTJE

Gebruiker
Lid geworden
27 aug 2009
Berichten
121
Hoi lieve mensen,

Ik zit met een probleempje namelijk:

Op een formulier wil ik dmv een listbox verschillende waardes kunnen aanduiden en het veld met zijn andere corresponderende velden uit een tabel tonen in een query. De waarden van het veld (LP_SSCC) die in deze listbox komen zijn variabel en nooit vaste waardes (textveld van 18 getallen)

Uit Tbl_Recall_Data wil ik enkel alle gegevens van bepaalde LP_SSCC's zien en niet van alle LP-SSCC's.

De listbox werkt perfect en ik kan ook meerdere selecties maken maar als de query getoond moet worden loopt het mis. Item not found in this collection.

Dit is mijn SQL statement:
Code:
SELECT DISTINCT [Tbl_Recall_Data].[LP_SSCC] FROM [Tbl_Recall_Data] UNION select "ALL" FROM [Tbl_Recall_Data];

De code die de listbox bewerkt:
Code:
Option Compare Database

Private Sub CmdOpenQuery_Click()
On Error GoTo Err_CmdOpenQuery_Click

    Dim myDB As DAO.Database
    Dim qDef As DAO.QueryDef
    Dim i As Integer
    Dim strSQL As String
    Dim strWhere As String
    Dim strIN As String
    Dim flgSelectAll As Boolean
    Dim varItem As Variant   

    Set myDB = CurrentDb()
    strSQL = "SELECT * FROM Tbl_Recall_Data "   

    'Build the IN string by looping through the License Plate listbox
    For i = 0 To LstbLicensePlates.ListCount - 1
        If LstbLicensePlates.Selected(i) Then
            If LstbLicensePlates.Column(0, i) = "All" Then
                flgSelectAll = True
            End If
            strIN = strIN & "'" & LstbLicensePlates.Column(0, i) & "',"
        End If
    Next i

    'Create the Where string, and strip off the last comma of the IN string
    strWhere = "WHERE [LP_SSCC] in (" & Left(strIN, Len(strIN) - 1) & ")"    

    'If "All" was selected in the listbox, don't add the WHERE condition
    If Not flgSelectAll Then
        strSQL = strSQL & strWhere
    End If    

    myDB.QueryDefs.Delete "Qry_Select_Multiple_LP"
    Set qDef = myDB.CreateQueryDef("Qry_Select_Multiple_LP", strSQL)    

    'Open the query, build using the IN clause to set the creteria
    DoCmd.OpenQuery "Qry_Select_Multiple_LP", acViewNormal   

    'Clear listbox selection after running query
    For Each varItem In Me.LstbLicensePlates.ItemsSelected
        Me.LstbLicensePlates.Selected(varItem) = False
    Next varItem  

Exit_CmdOpenQuery_Click:
    Exit Sub    

Err_CmdOpenQuery_Click:
    If Err.Number = 5 Then
        MsgBox "You must make a selection(s) from the list", , "Selection Required !"
        Resume Exit_CmdOpenQuery_Click
    Else

    'Write out the error and exit the sub
        MsgBox Err.Description
        Resume Exit_CmdOpenQuery_Click
    End If 

Set myDB = Nothing
Set qDef = Nothing
End Sub

Ziet iemand waar de fout zit aub?
Grtjs,
Amberke
 
Laatst bewerkt:
Op welk punt gaat het fout? Wordt de query [Qry_Select_Multiple_LP] wel aangemaakt, en heeft die het juiste criterium bijvoorbeeld?
 
Hey Michel,

Nu werkt het wel, het enige dat ik veranderd heb is de Query (ik vraag om hem te deleten maar de query stond er niet).

Opgelost dus.

Bedankt voor je reactie alvast.
Groetjes,
Ambertje
 
Dit soort problemen krijg je meestal bij het voor de eerste keer uitvoeren van een routine. Ik los dat meestal zo op:

Code:
    On Error GoTo MaakQuery
    Set qTmp = CurrentDb.QueryDefs("qTemp")
    On Error GoTo 0
    qTmp.SQL = strSQL

MaakQuery:
    Set qTmp = CurrentDb.CreateQueryDef("qTemp", strSQL)
    Resume

Zoals je ziet gooi ik de query niet weg, maar verander ik simpel de SQL ervan. Uiteraard moet ook hier de query wel worden aangemaakt, en dat gebeurt dus als de routine de query niet tegenkomt.
 
Hoi Michel,

Bedankt voor de tip deze zal zeker nog van pas komen.
Groetjes,
Monique
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan