Imprimir página | Cerrar ventana

Error en los criterios de una consulta

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84680
Fecha de impresión: 20/Abril/2024 a las 10:58


Tema: Error en los criterios de una consulta
Publicado por: letoy
Asunto: Error en los criterios de una consulta
Fecha de publicación: 29/Agosto/2019 a las 22:10

Este tema fue cerrado anteriormente porque creía que estaba resuelto al no dar error de sintaxis con el ejemplo de Xabi. No da error, pero sigue sin mostrar los registros con campos sin contenido.

Lanzo de nuevo la consulta pues no he encontrado la forma de desbloquear la consulta anterior, por lo que no se si de forma correcta vuelvo a lanzar la misma consulta.

 

 

Hola muy buenas.

 

Mi problema es que tengo un subformulario con un campo en una tabla que se llama “observaciones” tipo texto con 255 caracteres.

Cuando voy a hacer una consulta desde el campo de texto “obsevaciones”sobre ese campo utilizo el siguiente criterio en consultas:

 

Como "*" & [Formularios]![Diario Recordatorios]![Observaciones] & "*"

 

Si el campo tiene texto y cumple el criterio, funciona perfectamente.

 

Pero si dejo en blanco el campo observaciones del formulario, muestra todos los registros de la tabla que tienen texto sea el que sea, como es logico, pero los registros que no tienen texto no los muestra ¿por que no los incluye?.

 

En resumen mi objetivo es que muestre los que cumplen el criterio, y si dejo el campo de texto sin contenido en el formulario, la consulta debe de mostrar todos los registros de la tabla tengan texto o no.

He puesto diferentes cosas en el criterio O como Es Nulo, "", etc pero no funciona.

Me podriais ayudar 

Un saludo.

 

Ha este tema me contestaron Xabi y Mihura y me apuntaron que pusiera el siguiente código

"*" & nz([Formularios]![Control Emisiones]![Cuadrocliente];"") & "*"

Pero sigue sin mostrar los registros que tienen el campo sin contenido, como ocurria cuando yo empleaba el código puesto anteriormente.

 

Muchas gracias.

 

 




Respuestas:
Publicado por: VIMIPAS
Fecha de publicación: 29/Agosto/2019 a las 22:20
Hola, buenas noches.

¿Puedes probar esto?:

"* ' " & nz([Formularios]![Diario Recordatorios]![Observaciones];"") & " ' *"

Y además en la consulta, en el campo de la consulta que toque, ¿puedes poner también el Nz, así:?

Nz(campoconsultaqueteocupa)

Ya nos cuentas.

Saludos.


-------------
Gracias


Publicado por: VIMIPAS
Fecha de publicación: 29/Agosto/2019 a las 22:29
Hola de nuevo.

Que soy un enamorado de las "búsquedas" creo que por aquí lo saben todos, y es por ello que te propongo que veas un ejemplo mío (de los muchos que tengo subidos a este foro en "Tus Funciones Favoritas"):

http://www.mvp-access.com/foro/combos-cuadros-lista-subformularios-like-e-instr_topic81077.html" rel="nofollow - http://www.mvp-access.com/foro/combos-cuadros-lista-subformularios-like-e-instr_topic81077.html

Tómatelo con calma y desmenúzalo, sin prisa, ahí tengo como buscarlo todo, absolutamente todo.

Evidentemente, tu caso no está, pues no era el objeto de ese estudio el ejemplo que te he puesto, pero si quieres podemos adentrarnos en él (tu caso) cuando termines con esto y vemos a ver como podría quedar resuelto y así serviría para posteriores casos como el tuyo.

Saludos.


-------------
Gracias


Publicado por: letoy
Fecha de publicación: 29/Agosto/2019 a las 23:05
Hola Vimipas 

He puesto el siguiente código 

"*'" & Nz([Formularios]![Control Emisiones]![CuadroCliente];"") & "'*"

Pero la consulta no muestra ningún registro.

Lo de poner

 Nz([Formularios]![Control Emisiones]![CuadroCliente])

ya lo hice antes pero da error de sintaxis

Gracias.


Publicado por: mounir
Fecha de publicación: 29/Agosto/2019 a las 23:09
Hola!
Lo que puedes hacer es copiar la SQL de la consulta con criterio y sin el y según se necesite se asigna al origen del registro del formulario y problema solucionado.

-------------
Un Saludo.


Publicado por: Mihura
Fecha de publicación: 29/Agosto/2019 a las 23:17
Letoy, que lío te estás montando con la construcción de cadenas ...

el argumento es así:

... LIKE '*valor*'

es decir la comilla simple va por fuera de los asteriscos.

Después cambias el valor por tu parámetro y te quedará así:

" LIKE '*" & Nz([Formularios]![Control Emisiones]![CuadroCliente];"") & "*'"


Te recomendaría que le echaras un repaso al curso de Olaz Martínez que tenemos en el foro, no tendrías estos problemas con el Access. Wink




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: letoy
Fecha de publicación: 30/Agosto/2019 a las 09:36
Mihura puede que tenga un poco de lio, pero la comilla simple la puse por dentro porque asi me lo indicaron, pero tu ahora me indicas que por fuera y yo la pongo por fuera, pero sigue sin funcionar.
LIKE ya lo estaba utilizando aunque no lo habia indicado.

Mounir no entiendo mucho tu solución que apuntas, hay que tener en cuenta que el valor del campo puede variar una vez este el formulario abierto.
Muchas gracias a ambos.


Publicado por: Mihura
Fecha de publicación: 30/Agosto/2019 a las 10:19
Entiendo que Vimipas se despistó con la colocación de las comillas.

Lo que te he puesto debe de funcionar:

- entorno diseño de consulta: 

   Como '*' & Nz([Formularios]![Control Emisiones]![CuadroCliente];'') & '*'        -> son todo comillas simples


- vista la consulta en modo SQL:

SELECT Numero_cli, Nombre_cli, Apellidos_cli
FROM Clientes
WHERE Apellidos_cli  Like '*' & Nz([Formularios]![Control Emisiones]![CuadroCliente],'') & '*'


¿No tendrás caracteres de control en ese campo de observaciones?




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: mounir
Fecha de publicación: 30/Agosto/2019 a las 10:20
Hola!

Mi pruepuesta es si el campo está vacío que asigne un origen de registro sin criterio, me explico, mas o menos así:-

If Len(MiCampo)= 0 Then

'La SQL sin criterio

Me.RecordSource = "SELECT ......... FROM TuTabla"

Else

'La SQL con criterios
Me.RecordSource = "SELECT ......... FROM TuTabla WHERE.[Observaciones] Like "*" & [Formularios]![Diario Recordatorios]![Observaciones] & "*";"

'Luego actualizas formulario
Me.Requery



-------------
Un Saludo.


Publicado por: VIMIPAS
Fecha de publicación: 30/Agosto/2019 a las 20:39
Buenas noches a todos.

Efectivamente Mihura me corrige acertadamente.

Aquí tengo mas sobre esta materia, expuesta por mi mismo anteriormente:

http://www.mvp-access.com/foro/uso-de-like_topic80947_page2.html" rel="nofollow - http://www.mvp-access.com/foro/uso-de-like_topic80947_page2.html

Las comillas van "antes" y "no después".

Gracias Mihura.

En cuanto a la proposición de Mounir, a mi me parece una solución buena y que seguramente efectiva al 100%. Pero antes habrá que dejar bien claro el concepto de como se "escribe la sintaxis de lo que se persigue en VBA".

Access en si mismo es tonto, no sabe distinguir entre las comillas antes o después, somos nosotros los que debemos distinguir esos matices.

Saludos.


-------------
Gracias



Imprimir página | Cerrar ventana