Access: Buscar un registro en tablas de otros archivos de igual estructura

Espero que anden bien. Hoy molesto con una consulta que seguramente es sencilla, pero no pude resolver. Tengo un archivo de Access, el que cada seis meses renuevo por las dudas. Ahora, cada vez que necesito buscar un registro, debo ingresar en cada uno de ellos y "filtrar". ¿Existe una manera en la que busque una sola vez en todos ellos? Necesito una guía para comenzar. Mi idea es que de alguna manera, ingrese el nuevo archivo y continúe funcionando el buscador.

1 respuesta

Respuesta
2

No dices lo que quieres encontrar, ni donde quieres "poner" ese valor, etc. Te pongo un ejemplo y lo adaptas a lo tuyo. Supongamos que tengo un formulario

Y quiero "averiguar" el código postal de ese cliente que puede estar o no, en la base Neptuno o en la base Otra( en este caso sí está en la Neptuno, pero no está en Otra. Lo primero que hago es construir una tabla Aux

Luego en el evento Al hacer clic del botón Buscar(que no sería necesario ya que se podía poner en cualquier otro evento), le pongo

Private Sub Comando14_Click()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into aux(nombrecliente,codpostal) select nombrecompañía, códpostal from clientes" _
& " in 'C:\users\cabarcos\Documents\basespracticas\neptuno.mdb' where nombrecompañía='" & Me.NombreCliente & "'"
DoCmd.RunSQL "insert into aux(nombrecliente,codpostal) select nombrecompañía, códpostal from clientes" _
& " in 'C:\users\cabarcos\Documents\basespracticas\otra.mdb' where nombrecompañía='" & Me.NombreCliente & "'"
CodPostal = DLookup("codpostal", "aux", "nombrecliente='" & Me.NombreCliente & "'")
End Sub

Es decir, que inserte en la tabla Aux en los campos respectivos los valores de nombrecompañia, CódPostal que corresponda a un cliente que se llame igual al que hay en ese momento en pantalla,( pero podía ser otro criterio cualquiera). Como en la tabla Otra no hay ese cliente no me insertará nada. Osea, en la tabla Aux sólo habrá un registro. Por tanto, cuando le diga que el valor de CodPostal sea igual al que hay en esa tabla correspondiente a ese cliente, sólo habrá uno.

Luego, si quieres, puedes decirle que borre los registros de la tabla Aux o lo que quieras hacer.

Para que busque en más bases, solo tienes que copiar la instrucción de Neptuno, pegar y cambiarle el nombre de la base donde tiene que buscar.

Buenas Icue y excelente comienzo de año. Disculpas por el tiempo que no escribí más, había agregado una pregunta pero al parecer nunca se publico. Le comento que he probado con el código que me paso y no logre que funcionara, se me hizo algo confuso. Mi idea es buscar por medio de un formulario, el Documento Nacional de Identidad (DNI), aproximaciones de Apellido o Nombres en tablas (BE) de iguales estructuras, que se "limpian" y guardan cada seis meses. ¿Podría ayudarme con el código?

Formulario: Datos

Tabla: Datos

Campos: DNI, Apellidos y Nombres

Tabla Auxiliar (creada por su consejo): Buscador

Muchas gracias y disculpas de nuevo, creí que se había publicado mi inquietud. Buen comienzo de año. Saludos

Vamos a ver si me explico. Supongamos que tengo una base llamada UnaBase en un directorio cualquiera, que tiene una tabla Datos con DNI, Apellidos y Nombre

Como puedes ver está en una carpeta llamada Programas

Y otra base llamada Otrabase(me he devanado los sesos para ponerles nombres originales) en otro directorio

Puedes ver que está en otra carpeta.(Acuérdate de los datos de Maria)

Como no sé, si la tabla Datos con la que trabajas en la base actual tiene o no datos, ni lo que vas a hacer con los datos que obtengas voy a suprimir la tabla Aux y que los ingrese directamente en la tabla Datos actual. Si tengo el formulario basado en la tabla Datos de la base con la que estás trabajando

Si escribo un DNI, en un cuadro de texto al que he llamado ElegirDNI y pulso Enter

Por el contrario, si en el cuadro de texto de abajo pongo

y pulso Enter

Es decir, me busca los datos por una cadena del nombre(lo mismo se haría para los apellidos). El código de los cuadros de texto es

Private Sub ELegirDNI_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into datos(dni,apellidos,nombre) select dni, apellidos, nombre  from datos" _
& " in 'C:\users\cabarcos\Documents\programas\unabase.accdb' where dni='" & Me.ELegirDNI & "'"
DoCmd.RunSQL "insert into datos(dni,apellidos,nombre) select dni, apellidos,nombre from datos" _
& " in 'C:\users\cabarcos\Documents\borrar\otrabase.accdb' where dni='" & Me.ELegirDNI & "'"
Me.Requery
End Sub
Private Sub ElegirNombre_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into datos(dni,apellidos,nombre) select dni, apellidos, nombre  from datos" _
& " in 'C:\users\cabarcos\Documents\programas\unabase.accdb' where nombre like ""*""& '" & Me.ElegirNombre & "'&""*"""
DoCmd.RunSQL "insert into datos(dni,apellidos,nombre) select dni, apellidos,nombre from datos" _
& " in 'C:\users\cabarcos\Documents\borrar\otrabase.accdb' where nombre like ""*""& '" & Me.ElegirNombre & "'&""*"""
Me.Requery
End Sub

Buenas de nuevo Icue. Gracias por responderme nuevamente. He estado probando y coloque los cuadros de texto en el mismo formulario de Carga (Datos), y me creaba nuevos registros. Es por que los registros se pueden repetir en otras tablas? Debería mostrar los resultados en un cuadro de lista? Gracias por su tiempo de nuevo y saludos.

No he entendido nada a partir de "Es porque...

Con respecto a lo de Debería mostrar, ya te dije que no sé que vas a hacer con los datos que te busque, por tanto para mi es difícil adivinarlo.

Hola Icue. Lo "ideal" seria mostrar los datos que busque en un cuadro de lista, para que me muestre los resultados repetidos. Gracias de nuevo

Vamos a suponer que en otra base, aparte de las anteriores, llamada Ultimabase, para el DNI 33333333C le corresponde otro nombre y otros apellidos( es para el ejemplo). Osea, hace la "búsueda" en tres tablas pero sólo hay el dato coincidente en dos. En este caso sí que vamos a utilizar la tabla Aux con DNI, Apellidos y Nombre. Si tengo un formulario con un cuadro de lista Lista2

Ahora escribo 

Pulso Enter

Como sigo sin saber como trabajas, le he puesto un botón, pero la instrucción podría estar en cualquier otro evento. Si lo pulso, me "borra" el cuadro de lista y elimina los registros de la tabla Aux para quedar dispuesto para una nueva búsqueda.

El código del formulario es

Private Sub Buscar_AfterUpdate()
DoCmd.SetWarnings False
DoCmd.RunSQL "insert into aux(DNI,apellidos,nombre) select dni, apellidos,nombre from datos" _
& " in 'C:\users\cabarcos\Documents\programas\unabase.accdb' where dni='" & Me.Buscar & "'"
DoCmd.RunSQL "insert into aux(DNI,apellidos,nombre) select dni, apellidos,nombre from datos" _
& " in 'C:\users\cabarcos\Documents\borrar\otrabase.accdb' where dni='" & Me.Buscar & "'"
DoCmd.RunSQL "insert into aux(DNI,apellidos,nombre) select dni, apellidos,nombre from datos" _
& " in 'C:\users\cabarcos\Documents\borrar\ultimabase.accdb' where dni='" & Me.Buscar & "'"
Lista2.RowSource = "select dni, apellidos, nombre from aux where dni='" & Me.Buscar & "'"
End Sub
Private Sub Comando4_Click()
DoCmd.SetWarnings False
Lista2.RowSource = ""
Buscar = ""
DoCmd.RunSQL "delete * from aux"
End Sub

Un MILLÓN de gracias por su tiempo Icue. Ahora si pude. Excelente!!! Disculpe si no me hice entender desde el comienzo, pero necesitaba que me guiarán en el tema. Saludos y muchas gracias de nuevo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas