Buscar por apellido un registro ACCESS

Tengo dos tablas "datos personales" y "actividades". Que están relacionadas por DNI. He creado un formulario con la tabla datos personales y un subformulario con la tabla actividades.

Estoy intentando que a través de cun cuadro combinado me haga la búsqueda de un registro cuando selecciono un apellido pero no me busca. Me deja seleccionar el apellido que quiero pero no me lleva al registro correcto.

Este es el código que estoy escribiendo en el formulario principal de datospersonales

Private Sub Buscar_AfterUpdate()
Me.RecordSource = "select * from [DATOS PERSONALES] where dni='" & Me.BUSCAR & "'"
End Sub

Y en el origen de los datos lo siguiente:
SELECT [DATOS PERSONALES].DNI, [apellido1] & " " & [apellido2] & ", " & [nombre1] AS Nombrec FROM [DATOS PERSONALES] ORDER BY [apellido1] & " " & [apellido2] & ", " & [nombre1];

Cuando voy a buscar un registro y le doy a enter me salta un mesaje donde me dice

"Se ha producido un error 2580 tiempo de ejecución. El origen de registros "select * from [DATOS PERSONALES] where dni='"00000000a indicado en este formulario o informe no existe."

He puesto un ejemplo de nº de DNI 00000000a pero me lo hace con todos

2 respuestas

Respuesta
2

Aunque hay quien opine que la mejor forma de buscar un registro es modificando el origen de datos (recordsource) del formulario, a mi no me parece la mejor opción (luego te digo cómo lo haría yo). En todo caso, si te vas a poner a modificar el recordsource para añadirle un WHERE, deberías hacerlo sobre el recordsource original, que por lo que dices, tu código para buscar el registro sería:

Private Sub Buscar_AfterUpdate()
Me.RecordSource = "SELECT [DATOS PERSONALES].DNI, [apellido1] & " " & [apellido2] & ", " & [nombre1] AS Nombrec FROM [DATOS PERSONALES] WHERE DNI='" & Me.BUSCAR & "' ORDER BY [apellido1] & " " & [apellido2] & ", " & [nombre1];
Me.Requery
End Sub

Yo usaría directamente los filtros, que para eso están:

Private Sub Buscar_AfterUpdate()
Me.Filter="DNI='" & Me.BUSCAR & "'"
Me.FilterOn=True
End Sub

Y puedes poner un botón para volver a verlos todos con este código: Me.FilterOn=False

Otra opción muy sencilla que tienes es, a la hora de crear el cuadro combinado, usar el asistente e indicarle la opción para que te localice el registro (o algo parecido). Luego es seguir los pasos del asistente.

Respuesta
2

Pues me parece muy bien que modifiques el origen del registro con el combinado Buscar, pese a que alguien te diga lo contrario. Por ejemplo, supongamos que tengo el formulario Copia con el subformulario Actividades y un combinado llamado Buscar y voy a elegir a Antonio

En el momento que lo selecciono

Y no necesito volver a activar ningún filtro, porque cada vez que seleccione un nombre ya estoy actualizando el combinado Buscar

En el origen de la fila del combinado Buscar le tengo puesto

SELECT Copia.DNI, [apellido1] & " " & [apellido2] & ", " & [nombrecliente] AS Nombre FROM Copia GROUP BY Copia.DNI, [apellido1] & " " & [apellido2] & ", " & [nombrecliente];Y en el evento Después de actualizar de ese combinado

Private Sub Buscar_AfterUpdate()
Me.RecordSource = "select * from copia where dni='" & Me.Buscar & "'"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas