Accediendo a diferentes bases de datos en las consultas

Las tablas relacionadas en una sentencia SELECT hacen referencia a la base de datos a la que está conectada la consulta (TfrxNXQuery). Pero ¿como utilizar en una misma sentencia tablas de diferentes bases de datos?

En el generador de informes de GESTWIN se pueden utilizar expresiones dentro de las sentencias SQL del tipo :

SELECT *
FROM Cuenta
WHERE Codigo=[QuotedStr(IntToStr(430))]

Lo que hemos hecho es incluir una expresión dentro de la sentencia, enmarcándola entre corchetes cuadrados. Éstas expresiones son evaluadas por el generador ántes de enviarla a la base de datos. En este caso la sentencia resultante sería :

SELECT *
FROM Cuenta
WHERE Codigo='430'

Pues bien, haciendo uso de las expresiones podemos incluir referencias a tablas que pertenecen a diferentes bases de datos. Supongamos que queremos obtener una relación de todos los registros del fichero Cuenta, que contiene el Plan General Contable de la Empresa pero, además, deseamos incluir las descripciones que se incluyen en la tabla PGC, en la que se detallan las definiciones y relaciones contables de cada una.

El primer problema que observamos es que la tabla Cuenta pertenece a la base de datos del usuario (directorio Gestwin\data_XXX) y PGC a la de la aplicación (base de datos global, situada en Gestwin\data). ¿La solucion? Hacer uso de las expresiones embebidas para acceder a la base de datos global :

SELECT *
FROM Cuenta LEFT JOIN [AppDatabase.Path].PGC AS PGC ON ( Cuenta.Codigo=PGC.Codigo )

AppDatabase hace referencia a la base de datos global y la propiedad Path devuelve la expresión que permite ubicar a la base de datos.

La siguiente imagen muestra de forma gráfica todo lo expuesto hasta ahora :

NOTA IMPORTANTE

Si una de las tablas a las que se pretende acceder es una tabla temporal y el resto de la consulta se realiza sobre otro tipo de tabla (Aplicación, Global) es necesario utilizar el parámetro -D en el aceso directo de GESTWIN. Por ejemplo C:\GestWin\gd.exe ContableComercial -SD. En caso contrario los accesos a las tablas temporales es exclusivo y no pueden incluirse en la consulta.