Access: Buscar dato en otras BD de igual estructura, actualizadas mediante un TXT.

De nuevo Expertos. Tengo el siguiente código, que me facilito Julián González Cabarcos, el que me busca un documento (DNI) en otros archivos de bases de datos con iguales estructuras que se renuevan y guardan semestralmente. Ahora, en vez de escribir 'C:\unabase.accdb', podría escribir todas las direcciones de los archivos en un TXT, ¿y qué busque ahi? Es para evitar que alguien por error modifique el código VBA, pero que pueda modificarlo desde un TXT.

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

1 respuesta

Respuesta
2

Si, Lo puedes hacer utilizando la instrucción Open... For Input (abre un archivo de texto) y la función Input

Ver: https://support.office.com/en-us/article/input-function-5a666c45-6048-405f-bdfe-c5209c45756d 

¿Pero no te sería mejor utilizar una tabla de Access y así lo tienes todo "empaquetado"?

Hola. Buenas. Y como quedaría? Supongamos que guardo las direcciones en una tabla "X". Gracias por su tiempo.

Supón que tienes una tabla que se llama DireccionesBDDs, con un único campo de texto llamado Ruta en el que pones las direcciones de las bases de datos.

Por lo tanto esta tabla tiene tantos registros como BDDs

El código quedaría así

Private Sub Buscar_AfterUpdate()

Dim Datos As Recordset

Set Datos = CurrentDb.OpenRecordset("DireccionesBDDs")

Do Until Datos.EOF

     CurrentDb.Execute "insert into aux(DNI,apellidos,nombre) select dni, apellidos,nombre from datos in '" & Datos!Ruta & "' where dni='" & Me.Buscar & "'"

 Loop

Lista2.RowSource = "select dni, apellidos, nombre from aux where dni='" & Me.Buscar & "'"

End Sub

Perdón, antes de la instrucción Loop debe ir esta otra

Datos. MoveNext

Como verás, el bloque Do... Loop es un bucle que va cargando las direcciones y ejecuta el SQL Insert que ya tenías con ellas.

Hola de nuevo. Cuando ejecuto, me sale "Se ha producido el error ´13´ en tiempo de ejecución: No coinciden los tipos".

Al depurar me resalta:

Set Datos = CurrentDb.OpenRecordset("DireccionesBDDs")

Aclaro, que he creado la la tabla DireccionesBDDs, tal como me describió, con un único campo llamado Ruta. Gracias de nuevo

No debería fallar. Lo he reproducido en mi máquina y funciona bien.

¿Me puedes hacer un pantallazo de esta tabla de DireccionesBDDs en modo diseño?

También de las librerías que tienes conectadas en VBA (Herramientas->Referencias de la ventana de VBA)

Y este es el código completo:

Dim Datos As Recordset
Set Datos = CurrentDb.OpenRecordset("DireccionesBDDs")
Do Until Datos.EOF
CurrentDb.Execute "insert into Aux(Fecha, Apellidos, Nombres, Documento, Domicilio) select Fecha, Apellidos, Nombres, Documento, Domicilio from Datos in '" & Datos!Ruta & "' where Documento='" & Me.Buscar & "'"
Datos.MoveNext
Loop
Lista2.RowSource = "select Fecha, Apellidos, Nombres, Documento, Domicilio from Aux where Documento='" & Me.Buscar & "'"

Gracias por su tiempo. Saludos nuevamente

Para trabajar con todas les herramientas que te da VBA, además de las 4 que tienes activadas deberías activar las siguientes librerías:

OLE Automation

Microsoft Office 15.0 Access database engine Object library

Microsoft Office 15.0 Object library

Microsoft ADO Ext. 6.0 for DDL and Security

Microsoft OLE DbService Component 1.0 Type Library

Microsoft Scripting Runtime

Com ello el problema debería desaparecerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas