** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - busqueda con patron
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradobusqueda con patron

 Responder Responder Página  <12
Autor
Mensaje
toldeman Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Noviembre/2007
Estado: Sin conexión
Puntos: 445
Enlace directo a este mensaje Enviado: 02/Noviembre/2021 a las 17:21
Hola.
Gracias por ayudarme, pero me devuelve null.

Un saludo.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14017
Enlace directo a este mensaje Enviado: 02/Noviembre/2021 a las 17:33
Bien por la aportación de Juanmasp.

Mira a ver la comparación que estás haciendo, te devuelve null porque no encuentra ningún registro que cumpla la condición establecida.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14734
Enlace directo a este mensaje Enviado: 02/Noviembre/2021 a las 17:38
Publicado originalmente por toldeman toldeman escribió:

El campo es [nif o dni], el mismo que tengo que usar como patron.

La idea es que si yo tengo en la tabla [clientes t] en el campo [nif o dni], por ejemplo:
125125
y busco 0125125t

la funcion me devuelva 125125


Eso va a ser difícil...

Si tu escribes 0125125t, el Like se basará en ese patrón por lo que el DLookup devolverá el primer registro que incluya 0125125t. 
Y lo que buscas es un poco al revés: mirar si algún registro incluye una parte del código nuevo que estás introduciendo.
Si eso es cierto, el el DLookup (si es que nos sirve, que tengo mis dudas) habría que construirlo de otra forma.
En tu caso creo que dependerá mucho de los posibles valores que se introduzcan. 

Y, dependiendo de ello, a lo mejor hay otras técnicas a aplicar antes que esa búsqueda. Me explico. Si el código solo puede tener una lóngitud de 6 y es numérico, aplicar una máscara de entrada. De esa forma ya limitas los errores. Y, con esa estructura, el DLookup si que funciona.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
toldeman Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Noviembre/2007
Estado: Sin conexión
Puntos: 445
Enlace directo a este mensaje Enviado: 02/Noviembre/2021 a las 18:24
Publicado originalmente por Mihura Mihura escribió:

Bien por la aportación de Juanmasp.

Mira a ver la comparación que estás haciendo, te devuelve null porque no encuentra ningún registro que cumpla la condición establecida.


Hola devuelve null incluso escribiendo el mismo numero que ya esta registrado.
De todas maneras, lo he resuelto con vba, aunque me gustaba mas utilizando una funcion:

dcmt = InputBox("DNI") ' numero que quiero buscar
y = Right(dcmt, 8) ' le quito el primer caracter de la derecha
s = Left(y, 7) ' le quito el primero de la izquierda
Set r = CurrentDb.OpenRecordset("SELECT [NIF O DNI] From [CLIENTES T] WHERE [nif o dni] like '" & "*" & s & "*" & "'") ' consulta que me devuelve la coincidencia
ju = r.Fields(0) 'cargo la coincidencia en la variable
'luego ya hago el/los condicionales...

Muchas gracias.

Arriba
toldeman Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Noviembre/2007
Estado: Sin conexión
Puntos: 445
Enlace directo a este mensaje Enviado: 02/Noviembre/2021 a las 18:33
Publicado originalmente por xavi xavi escribió:

Publicado originalmente por toldeman toldeman escribió:

El campo es [nif o dni], el mismo que tengo que usar como patron.

La idea es que si yo tengo en la tabla [clientes t] en el campo [nif o dni], por ejemplo:
125125
y busco 0125125t

la funcion me devuelva 125125


Eso va a ser difícil...

Si tu escribes 0125125t, el Like se basará en ese patrón por lo que el DLookup devolverá el primer registro que incluya 0125125t. 
Y lo que buscas es un poco al revés: mirar si algún registro incluye una parte del código nuevo que estás introduciendo.
Si eso es cierto, el el DLookup (si es que nos sirve, que tengo mis dudas) habría que construirlo de otra forma.
En tu caso creo que dependerá mucho de los posibles valores que se introduzcan. 

Y, dependiendo de ello, a lo mejor hay otras técnicas a aplicar antes que esa búsqueda. Me explico. Si el código solo puede tener una lóngitud de 6 y es numérico, aplicar una máscara de entrada. De esa forma ya limitas los errores. Y, con esa estructura, el DLookup si que funciona.

Un saludo


Muchas gracias xavi por la aclaracion.
Pero como hay varios caminos para conseguir lo que pretendo al final he tirado. creo que por uno largo, aunque lo importante era llegar al destino.
He posteado la solucion, no se si a la larga puede darme algun tipo de fallo.
Tengo pocos conocimientos de access y la bd que construi hace mas de 10 años me ha dado muchos problemas, precisamente por no haber sabido estructurarla bien.
Ahora estoy parcheando mientras intento hacer una "mejorada", pero por lo menos no me quedo parado en mi trabajo.

Muchas gracias a todos por vuestra ayuda, no solo en este post, sino a lo largo de todo este tiempo.

Un abrazo..
Arriba
fcoval Ver desplegable
Asiduo
Asiduo


Unido: 19/Enero/2013
Estado: Sin conexión
Puntos: 225
Enlace directo a este mensaje Enviado: 03/Noviembre/2021 a las 09:25
Hola toldeman, como bien dices en esto de la programación hay muchos caminos para llegar al mismo destino.

A mi la duda que todavía me queda y después de haberme leído este hilo varias veces es saber el contenido de lo que se guarda en el campo [NIF o DNI], no se si podrias tener todas estas maneras almacenadas 125125 o 0125125 o 125125T o 0125125T.

Si fuera así, esta claro que el Right y el Left que usas podria fallar, por eso yo lo haria de esta otra manera:

Cita
Sub test()

Dim valor As String

dcmt = InputBox("DNI") ' numero que quiero buscar

'-- Le quito cualquier letra SI la hubiera--
'y = Right(dcmt, 8)     ' le quito el primer caracter de la derecha
valor = extrae_numeros(dcmt)

'-- Le quito el cero de la izquierda SI lo llevara --
's = Left(y, 7)        ' le quito el primero de la izquierda
valor = CStr(CDbl(valor))

ju = Nz(DFirst("[NIF O DNI]", "[CLIENTES T]", "[nif o dni] Like ""*" & valor & "*"""), "No hay valor en la tabla")

Debug.Print ju

Stop

End Sub


Cita
Public Function extrae_numeros(cadena)

Dim i As Integer
Dim res As String

For i = 1 To Len(cadena)
    On Error Resume Next
    If Asc(Mid(cadena, i, 1)) >= 48 And Asc(Mid(cadena, i, 1)) <= 57 Then res = res & Mid(cadena, i, 1)
DoEvents
Next

extrae_numeros = res
End Function


Editado por fcoval - 03/Noviembre/2021 a las 09:31
Arriba
toldeman Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Noviembre/2007
Estado: Sin conexión
Puntos: 445
Enlace directo a este mensaje Enviado: 03/Noviembre/2021 a las 13:34
Muchas gracias fcoval. Implantare tu codigo, le veo mas seguro.

Podemos cerrar el tema.

Un saludo a todos.

Arriba
 Responder Responder Página  <12
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable