Saltar al contenido

Problema con consulta sql usando Like

publicado

Hola de nuevo.

Llevo mucho rato probando y leyendo y no veo manera de salir de esta. Tengo una consulta sql que construyo concatenando Textbox que no me acabo de funcionar bien. 

Quiero usar Like y la "*" y no veo forma donde ponerla. La ponga donde la ponga o me da error de sintaxis o otros errores. Tal y como tengo el código solo me funciona si el valor que pongo en el Textbox es EXACTO, pero yo quiero que con solo poner parte de la cadena que filtro sea suficiente, por eso intento usar Like.

Os agradezco la ayuda, en definitiva necesito saber como construir la consulta usando "*".

Este es el código:

Private Sub CommandButton1_Click()
'macro que filtra los datos de los textbox en el listbox
Dim filtro As String
If TextBox1 <> "" Then filtro = "[PERIODO] Like '" & TextBox1 & "'"
If TextBox2 <> "" Then filtro = filtro & " AND [CODIGO_OT] Like '" & TextBox2 & "'"
If TextBox3 <> "" Then filtro = filtro & " AND [DESCRIPCION_OT] Like '" & TextBox3 & "'"
If TextBox4 <> "" Then filtro = filtro & " AND [CENTRO_CONTABLE] Like '" & TextBox4 & "'"
If TextBox5 <> "" Then filtro = filtro & " AND [NRO_COMPROBANTE] Like '" & TextBox5 & "'"
If TextBox6 <> "" Then filtro = filtro & " AND [AGRUPACION] Like '" & TextBox6 & "'"
If TextBox7 <> "" Then filtro = filtro & " AND [IMPORTE_DEBE] Like '" & TextBox7 & "'"
If TextBox8 <> "" Then filtro = filtro & " AND [IMPORTE_HABER] Like '" & TextBox8 & "'"
If TextBox9 <> "" Then filtro = filtro & " AND [CONCEPTO] Like '" & TextBox9 & "'"
If TextBox10 <> "" Then filtro = filtro & " AND [GRUPO] Like '" & TextBox10 & "'"
'comprobamos no hayamos puesto AND al principio de la consulta sql
If Left(filtro, 4) = " AND" Then filtro = Mid(filtro, 5, Len(filtro))
If filtro = "" Then Exit Sub
ListBox1.Clear
'consulta sql
Conexión
Sql = "Select [PERIODO],[CODIGO_OT],[DESCRIPCION_OT],[CENTRO_CONTABLE],[NRO_COMPROBANTE]," & _
"[AGRUPACION],[IMPORTE_DEBE],[IMPORTE_HABER],[CONCEPTO],[GRUPO]" & _
"From Contable Where " & filtro
Rst.Open Sql, Conn, 3, 3, 1
If Rst.EOF = False Then ListBox1.Column = Rst.GetRows
Rst.Close
Set Rst = Nothing
Conn.Close
Set Conn = Nothing
End Sub

Muchas gracias.

Moisés.

 

Featured Replies

publicado
  • Autor

@AlexanderS, muchas gracias.

No se por qué, pero estaba encabezonado con "*". Ahora ya funciona como quería.

Muchas gracias.

Copio el código....

Sub Filtrar_listBox()
'macro que filtra los datos de los textbox en el listbox
Dim filtro As String
ComboBox1 = Empty
If TextBox1 <> "" Then filtro = "[PERIODO] Like '%" & TextBox1 & "%'"
If TextBox2 <> "" Then filtro = filtro & " AND [CODIGO_OT] Like '%" & TextBox2 & "%'"
If TextBox3 <> "" Then filtro = filtro & " AND [DESCRIPCION_OT] Like '%" & TextBox3 & "%'"
If TextBox4 <> "" Then filtro = filtro & " AND [CENTRO_CONTABLE] Like '%" & TextBox4 & "%'"
If TextBox5 <> "" Then filtro = filtro & " AND [NRO_COMPROBANTE] Like '%" & TextBox5 & "%'"
If TextBox6 <> "" Then filtro = filtro & " AND [AGRUPACION] Like '%" & TextBox6 & "%'"
If TextBox7 <> "" Then filtro = filtro & " AND [IMPORTE_DEBE] Like '%" & TextBox7 & "%'"
If TextBox8 <> "" Then filtro = filtro & " AND [IMPORTE_HABER] Like '%" & TextBox8 & "%'"
If TextBox9 <> "" Then filtro = filtro & " AND [CONCEPTO] Like '%" & TextBox9 & "%'"
If TextBox10 <> "" Then filtro = filtro & " AND [GRUPO] Like '%" & TextBox10 & "%'"
'comprobamos no hayamos puesto AND al principio de la consulta sql
If Left(filtro, 4) = " AND" Then filtro = Mid(filtro, 5, Len(filtro))
If filtro = "" Then Exit Sub
ListBox1.Clear
'consulta sql
Conexión
Sql = "Select [PERIODO],[CODIGO_OT],[DESCRIPCION_OT],[CENTRO_CONTABLE],[NRO_COMPROBANTE]," & _
"[AGRUPACION],[IMPORTE_DEBE],[IMPORTE_HABER],[CONCEPTO],[GRUPO]" & _
"From Contable Where " & filtro
Rst.Open Sql, Conn, 3, 3, 1
If Rst.EOF = False Then ListBox1.Column = Rst.GetRows
Rst.Close
Set Rst = Nothing
Conn.Close
Set Conn = Nothing
End Sub

Saludos,

Moisés.

publicado

Y adelantándome a tu próximo problema, para comparar fechas en Access, estas deben ir entre almohadillas:

Ejemplo para seleccionar la fecha 10/08/2018:

Select * from tabla where fecha = #10/08/2018#

 

.

publicado
  • Autor

@Antoni, seguramente en breve me iba a surgir este problema.

Te agradezco te hayas adelantado.

Muchas gracias, sinceramente.

Moisés.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.