Access - Error con la síntaxis en filtrado SQL

 
Vista:

Error con la síntaxis en filtrado SQL

Publicado por Ana (22 intervenciones) el 30/04/2013 15:10:49
Hola a todos,

Solicito la ayuda de Vds. para resolver un problema con un filtrado en mi formulario.
El error es de síntaxis y no logro resolverlo debido a mi inexperiencia, a ver si me pueden ayudar por favor.
Tengo los siguientes campos en la tabla y los siguientes controles en mi formulario:

FACTURA y TIPO son campos de Texto de una tabla, los valores los recojo de una caja de texto llama -Txtfactura- y de un cuadro combinado llamado -Cmtipo- que puede tener 3 valores, (valores posibles, "nada ó nulo", "S" y "N".

Quiero filtrar teniendo en cuenta ambas condiciones, he puesto este código pero me arroja un error de "no coincden los tipos" y me marca el error en la línea donde tengo la cadena de búsqueda.

1
2
3
4
5
6
Dim Cadena1 as string, Cadena2 as string
Cadena1= Trim(Nz(Me.Txtfactura, ""))
Cadena2= Trim(Nz(Me.Cmtipo, ""))
 
Me.Form.Filter = "[FACTURA] Like '" & "*" & Cadena1 & "*'" And "[TIPO] = " & " '" & cadena2 & "'"
Me.Form.FilterOn =  true


Saludos cordiales para todos, espero me ayuden.
Ana
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

Error con la síntaxis en filtrado SQL

Publicado por jose (830 intervenciones) el 02/05/2013 18:18:59
Filtros, filtros, a mi no me gusta llamarlos filtros, sino condiciones que ha de reunir la colsulta, y ya se que parece lo m ismo, pero no me gusta la palabra filtro para referirse a unos condicionantes .(ES UNA MANIA)

te voy a poner una forma que te va a servir para buscar en cualquier tabla lo que quieras con las condiciones que quieras


ESTO LO PUEDES PONER EN UN BOTON POR EJEMPLO EN EL EVENTO HACER CLIC

Cadena1= Trim(Nz(Me.Txtfactura, ""))
Cadena2= Trim(Nz(Me.Cmtipo, ""))

Set rs = CreateObject("ADODB.RecordSet")
Set CON = Application.CurrentProject.Connection

c10 = "": c20 = "": c30 = "": c40 = "": C50 = ""

c10 = "SELECT * FROM [NOMBRE-TABLA] "
c20=" WHERE (
C30= " ( ([NOMBRE-TABLA].FACTURA) LIKE '" & "*" & CADENA1 & "*" & "' )
C40= " AND ([NOMBRE-TABLA].TIPO) = '" & CADENA2 & "' )
C50= " )"


consulta = c10 & c20 & c30 & c40 & C50
rs.Open consulta, CON, adOpenDynamic, adLockOptimistic

IF RS.EOF=FALSE THEN
rs.MoveLast
rs.MoveFirst
END IF



CUENTA = 0
Do While rs.EOF = False
REM AQUI SE RECORRE EL RECORSET Y PUEDES HACER LO QUE QUIERAS
MSGBOX = RS.Fields("FACTURA").Value

rs.MoveNext
Loop


RS.Close

REM ---------------------------------------------------
REM SI LO QUE QUIERES ES PONERLO COMO ORIGEN DEL FORMULARIO

c10 = "": c20 = "": c30 = "": c40 = "": C50 = ""

c10 = "SELECT * FROM [NOMBRE-TABLA] "
c20=" WHERE (
C30= " ( ([NOMBRE-TABLA].FACTURA) LIKE '" & "*" & CADENA1 & "*" & "' )
C40= " AND ([NOMBRE-TABLA].TIPO) = '" & CADENA2 & "' )
C50= " )"


CONSULTA = c10 & c20 & c30 & c40 & C50

ME.RECORSOURCE= CONSULTA



OJO EN ESTE CASO(
Cadena1= Trim(Nz(Me.Txtfactura, ""))) CON EL "" YA QUE VACIO NO ES LO MISMO QUE NULO
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

Error con la síntaxis en filtrado SQL

Publicado por Ana (22 intervenciones) el 02/05/2013 23:29:43
Jose,
Agradecida enormemente por tus explicaciones, ¿tienes página web?, me encantaría poder aprender código de la manera que lo plasmas en este ejemplo, lo de separar por bloques la consulta es la primera vez que lo veo y ofrece mucha más claridad.

Si me permites y no te causa molestias me gustaría preguntarte:

Porqué mueves el recordset al final y seguido al principio? me refiero a ésto, me lo puedes explicar:
IF RS.EOF=FALSE THEN
rs.MoveLast
rs.MoveFirst
END IF

En la línea c20 ¿no faltan comillas?

Yo hasta ahora he usado DAO, podría adaptar éste ejemplo, qué opinas, o no funcionaría.

Saludos y te doy las gracias de nuevo.
Ana
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