Consulta de unión entre tablas externas

¿Cómo puedo unir dos tablas con la misma estructura y alojadas en una base datos externa?

Ejemplo:

SELECT Cod_art, des_ar1, stock, pedidos_compra, compra, venta,saldo,COD_CPR
FROM G:\BD_MODULO_FR\BD_DIVD\BD_MODULO_FR - copia_be.accdb COMPRAS FERNANDO
UNION Select Cod_art, des_ar1, stock, pedidos_compra, compra, venta,saldo,COD_CPR
FROM G:\BD_MODULO_FR\BD_DIVD\BD_MODULO_FR - copia_be.accdb COMPRAS JOSE

Me sale un mensaje de que hay un error de sintaxis en la cláusula FROM

Respuesta
1

Vincule esas tablas en la base de datos donde quiera realizar la consulta. Cuando las vincule, funcionarán como si estuvieran en la propia base de datos.

Para vincularlas, debe ir a:

- Datos externos

- Nuevo origen de datos

- De una base de datos

- Access

Ahí selecciona la ubicación de la base de datos externa. Y debe marcar la casilla que dice "Vincular al origen de datos creando una tabla vinculada"

Ya están vinculadas!

Precisamente por tener las tablas vinculadas se quejaba de que no las encontraba, es por eso, que le puse el directorio, pero aún así me da ese error que te he descrito.

Si están bien vinculadas sólo hay que poner el nombre de las tablas, no su ubicación.

Si las tiene en la base de datos, llámelas "FERNANDO" y "JOSE" y la consulta será:

SELECT Cod_art, des_ar1, stock, pedidos_compra, compra, venta, saldo, COD_CPR
FROM FERNANDO

UNION

SELECT Cod_art, des_ar1, stock, pedidos_compra, compra, venta, saldo, COD_CPR
FROM JOSE

Es correcta la apreciación de Enrique Feijóo. No obstante, hacerlo así comporta un problema de mantenimiento. Si por la razón que sea se modifica la ubicación de las bases de datos externas, uno se ve obligado a retocar todas las posibles consultas que atacan esas bases de datos, lo cual puede ser muy tedioso. Si se usan tablas vinculadas, lo único que hay que hacer es usar el administrador de tablas vinculadas para rehacer el vínculo a la nueva ubicación, sin necesidad de entrar al diseño de ninguna de las consultas.

¡Gracias!  Crack, lo deje como mencionabas y funcionó. Supongo que se quejaba del espacio.

Lo puse expresamente sin espacio para que fuera más sencillo, pero si prefiere tener nombres con espacios, también se puede, usando los corchetes:

[el nombre con espacios]

A mí me gustaría saber cómo se define o se usa una variable en una consulta (no en un módulo o formulario). También disfruto aprendiendo.

Y por supuesto que un cambio de ubicación afecta a las tablas vinculadas, pero se "refrescan" las conexiones usando el "administrador de tablas vinculadas". Y de una vez, quedan corregidas todas las posibles consultas que usen esas tablas. Y no hay ninguna necesidad ni de cambiar el nombre de las tablas, ni el tipo de ningún campo.

1 respuesta más de otro experto

Respuesta
1

Se pueden obtener datos externos sin necesidad de vincular las tablas, solo hay que indicar su ubicación, esto es:

(Utilizando los datos publicados, ojo al espacio en 'compras fernando', requiere corchetes)

SELECT Cod_art, des_ar1, stock, pedidos_compra, compra, venta,saldo,COD_CPR
FROM [COMPRAS FERNANDO] IN "G:\BD_MODULO_FR\BD_DIVD\BD_MODULO_FR - copia_be.accdb";

 Se pueden crear consultas de unión con tablas de diferentes procedencias y mezcladas con las locales.

¡Gracias! 

Acotación:

La ruta a la base de datos es texto plano y una variable de tipo String la puede sustituir y de ser necesario con la función DIR se puede verificar la existencia (y si fuera el caso la nueva ubicación).

Bastante menos problemático que cambiar el nombre a una tabla o el tipo de campo y corregirlo allá donde se utilice (relativamente sencillo con la función integrada de 'buscar y reemplazar'), si se utiliza la variable: en un único punto.

Si un cambio de ubicación no afecta a la vinculación ya creada, me encantaría conocer el método (disfruto aprendiendo).

Una función permite acceder a la variable a cualquier nivel:

Public Functrion MRuta() as String
MRuta = LA-VARIABLE 
End Function

Y si no me equivoco hay (al menos en las versiones recientes de Access) un nuevo tipo de variable 'publica' que lo hace de una forma similar (como una función de dominio, más fácil si la versión dispone de ella).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas