Access - Filtro de Consulta con Campo de Formulario

 
Vista:

Filtro de Consulta con Campo de Formulario

Publicado por Raul Najera (8 intervenciones) el 15/07/2021 18:46:55
Estimados todos.

Tengo la siguiente situación.

Estoy creando un formulario que tiene:

- Listbox
- Textbox
- Boton1
- Boton2

El objetivo es que el boton1 convierta los valores seleccionados en el listbox como cadena de texto entrecomillado separado por comas, con el objetivo de que el campo sirva como filtro para una consulta.

Esto quiere decir que mi consulta Ej.
1
SELECT * FROM Consulta WHERE campox in ('a','b','c')
, el filtro dentro del IN provenga del campo que trajo los valores seleccionados entrecomillados separados por coma.

El problema en si es cuando quiero ocupar ese campo como filtro en la columna1, el criterio que coloco es:

IN ([Formularios]![Nombre_Formulario]!Textbox)

Me sale la consulta vacia, sin embargo cuando hago el copypaste del valor que sale en el campo directo a la consulta si me da lo deseado. ¿me podrían ayudar?

Les comparto el código que extraje de la web. (No soy el autor) me funciona bastante bien para hacer la cadena de texto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Explicit
 
    Private Sub Form_Current()
    Dim oItem As Variant
    Dim bFound As Boolean
    Dim sTemp As String
    Dim sValue As String
    Dim sChar As String
    Dim iCount As Integer
    Dim iListItemsCount As Integer
 
sTemp = Nz(Me.txt__.Value, " ")
    iListItemsCount = 0
    bFound = False
    iCount = 0
 
Call clearListBox
 
For iCount = 1 To Len(sTemp) + 1
    sChar = Mid(sTemp, iCount, 1)
        If StrComp(sChar, ",") = 0 Or iCount = Len(sTemp) + 1 Then
            bFound = False
            Do
                If StrComp(Trim(Me.TabPrAsig.ItemData(iListItemsCount)), Trim(sValue)) = 0 Then
                    Me.TabPrAsig.Selected(iListItemsCount) = True
                    bFound = True
                End If
                iListItemsCount = iListItemsCount + 1
            Loop Until bFound = True Or iListItemsCount = Me.TabPrAsig.ListCount
            sValue = ""
        Else
            sValue = sValue & sChar
        End If
    Next iCount
End Sub
 
Private Sub clearListBox()
    Dim iCount As Integer
 
For iCount = 0 To Me.TabPrAsig.ListCount
        Me.TabPrAsig.Selected(iCount) = False
    Next iCount
End Sub
 
Private Sub testmultiselect_Click()
    Dim oItem As Variant
    Dim sTemp As String
    Dim iCount As Integer
 
iCount = 0
 
If Me.TabPrAsig.ItemsSelected.Count <> 0 Then
        For Each oItem In Me.TabPrAsig.ItemsSelected
            If iCount = 0 Then
                sTemp = sTemp & Me.TabPrAsig.ItemData(oItem)
                iCount = iCount + 1
            Else
                sTemp = sTemp & "," & Me.TabPrAsig.ItemData(oItem)
                iCount = iCount + 1
            End If
        Next oItem
    Else
        MsgBox "Nothing was selected from the list", vbInformation
        Exit Sub  'Nothing was selected
    End If
 
Me.txt__.Value = "'" & Replace(sTemp, ",", "','") & "'"
Me.txt2 = Trim(CStr(Me.txt__.Value))
End Sub
 
Private Sub clrList_Click()
    Call clearListBox
    Me.txt__.Value = ""
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Filtro de Consulta con Campo de Formulario

Publicado por Norberto (80 intervenciones) el 19/07/2021 12:50:26
Hola:

La sintáxis correcta sería (sólo basándome en la que indicas IN ([Formularios]![Nombre_Formulario]!Textbox)):

1
miSQL = "SELECT * FROM Consulta WHERE campox IN (" & [Formularios]![Nombre_Formulario]!Textbox & ");"

Un saludo,

Norberto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar