Access - Búsqueda a través de cuadro de texto en formulario

 
Vista:
Imágen de perfil de Carlos
Val: 30
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Búsqueda a través de cuadro de texto en formulario

Publicado por Carlos (22 intervenciones) el 01/04/2020 17:19:53
Hola, tengo creado un cuadro de texto en mi formulario ya través de él realizó las búsquedas en el mismo.

lo tengo en access 2007, aunque anteriormente estuvo instalado el Office 2010, pero nunca el acceess, siempre estuvo el acceso 2007 y ahora el Office 2007 completo sin el Office 2010.

bueno pues expongo a ver si encuentro respuestas.

en mi cuarto de texto, el la hoja de propiedades a después de actualizar tengo puesto esto.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub txt1_AfterUpdate()
If txt1 <> "" Then  ' su el campo no está vacío
Me.RecordSource = "Select * from [Internos_todos] where [Internos] like '*" & txt1 & "*'"
 
End If
 
If Nz(txt1, "") = "" Then 'si el texto está vacío
MsgBox "ingrese texto a buscar", vbOkOnly, "ATENCIÓN"
txt1.SetFocus 'devuelve el enfoque del cuadro
 
If Me.RecordsetClone.RecordCount = O Then ' su no encuentra nada
MsgBox " No se encuentra el nombre", vbOkOnly, "AVISO"
 
Me.Refresh
 
End If
 
Exit Sub
 
End Sub


Bueno, ahora, si buscar algo me sale un cuadro
de Visual Basic , que dice
Se ha producido el error "48" en tiempo de ejecución, error al cargar la biblioteca DLL

y al depurar, me dice que está línea de comando está mal, pero no sé en qué

1
If Me.RecordsetClone.RecordCount = O Then ' su no encuentra nada

Que si la elimino y su vez el último If no me da problema, pero no me da el aviso de no encontrar nada

Y otra cosa, ya que estoy. De que manera podría podría poner este código para que al pulsar el ENTER ya me diga si el campo está repetido.

La tabla internos tiene id interno autonumerico sin réplicas, nombre (texto), Módulo (texto)...

Muchas gracias, por escucharme
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

Búsqueda a través de cuadro de texto en formulario

Publicado por Anonimo (3319 intervenciones) el 02/04/2020 00:52:11
Creo que se debería revisar el árbol de decisiones, no tiene una lógica concreta.

Se verifica que en el cuadro de texto exista algo (puede ser un espacio ….)
Si lo hay: Modifica el RecordSource del formulario

Si no lo hay: envía el foco al mismo cuadro de texto que lo tiene (aquí se puede montar un lio)

Lo correcto seria limpiar el cuadro de texto y negarle que salga del propio cuadro de texto (por ejemplo, enviándolo al evento EXIT con el parámetro True)

Al cambiar el RecordSource del formulario, se reajustan muchas cosas y dado como se ha programado no tiene mucho sentido (pues siempre llega a ese punto, encuentre o no encuentre nada).

Si se desea 'saber' si el filtro devuelve datos (porque se esta aplicando un filtro que cambiara el conjunto de datos del formulario), lo adecuado seria preguntárselo directamente … y ¿que mejor que pedirle que devuelva el numero de coincidentes?

Función de dominio DCount: devuelve el numero de registros que cumplen la condición y (como es de esperar) si no encuentra nada devuelve CERO (para Access un FALSE).

Elementos_Encontrados = DCount ("*", "[Internos_todos]", "[Internos] like '*" & txt1 & "*'"

He utilizado los datos aportados, habrá que utilizar los reales.
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
Imágen de perfil de Carlos
Val: 30
Ha aumentado su posición en 2 puestos en Access (en relación al último mes)
Gráfica de Access

Búsqueda a través de cuadro de texto en formulario

Publicado por Carlos (22 intervenciones) el 02/04/2020 18:21:53
Muchas gracias por responder.
Bueno en relación a la respuesta la verdad es que no me aclaro demasiado. Quizás falte información, no se pero lo

Si al EXIT como comenta escribo esto

1
2
3
Private Sub txt1_Exit(Cancel As Integer)
Elementos_Encontrados = DCount ("*", "[Internos_todos]", "[Internos] like '*" & txt1 & "*'"
End Sub

Me dice que esperaba separador de lista o )

Por dar más datos, que quizás no me he explicado bien.
[Internos_todos] es una consulta que tiene el campo interno que recoge los apellidos y el nombre
1
[1erApellido]&" "&[2doApellido]&" "&[Nombre]

Osea que la búsqueda siempre serán como mínimo dos campos

Y para el evento EXIT, sugieres algo así

1
2
3
4
5
6
Private Sub txt1_Exit(Cancel As Integer)
Elementos_Encontrados = DCount ("*", "[Internos_todos]", "[Internos] like '*" & txt1 & "*'"
Me.Internos.Visible = True
Else
Me.Internos.Visible = False
End Sub

Me estoy liando un poco, no lo entiendo muy bien.

alguna aclaración, por favor!!
Gracias!!
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

Búsqueda a través de cuadro de texto en formulario

Publicado por Anonimo (3319 intervenciones) el 02/04/2020 23:41:15
A la función le falta el paréntesis final (se quedo en el tintero)

Lo de 'elementos_encontrados' es una variable inventada que dará error de compilación si no se la define antes de utilizarla (es un ejemplo para ver imitar y trastear, no es de Copy & Paste)

Para trabajar en VBA, se necesita cuando menos entender para que sirve cada cosa, es como si se mete uno en un laboratorio y no distingue el agua oxigenada del aguarrás (poco futuro y corto presente).

Las sub-funciones integradas en Access y asociadas por diseño a los objetos (como es el caso de la función EXIT) pueden ser utilizadas para nuestro particular beneficio.

Una función de este tipo, solo se activa si tiene algún contenido (o al compilar y sobre todo al convertirla se las anula), asi que para que la función responda a la llamada, ha de activarse, pero no tiene porque hacer nada especial, dado que tiene un parámetro: 'Cancel' que por defecto es FALSE podemos utilizarlo para este fin con algo como esto:

1
2
3
Private Sub txt1_Exit(Cancel As Integer)
 Cancel = Cancel
End Sub

Ya podemos utilizarla a nuestro antojo (esto es: es visible para poder utilizarla')

Si se llega a ese evento sin darle valor (o el mismo valor que tiene por defecto: 0 = False) saldrá del objeto, perderá el foco …. etc.
Pero ….
Si se la llama con el parámetro TRUE al llegar a ella se encontrara con que se la aborta (Cancelar el evento salir = Verdadero)

Conclusión, no se sale ni pierde el foco ni nada de nada tan fácil como poner

1
IF NO-hay-datos-validos Then txt1_Exit True

Anoto:
NO-hay-datos-validos <== es una condición que me he inventado en un ejemplo también inventado, la real podría ser que no exista nada en el cuadro de texto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar