Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-06-2004
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 16
sitrico Va por buen camino
Question ¿Como Unir tablas de dos ALIAS diferentes?

Buenas, Tengo poca experiencia con SQL y necesito conbinar en una consulta tablas de dos bases de datos (alias) diferentes, he podido hasta ahora hacerlo usando algo como:

Código SQL [-]
 
Select a.campo1, b.campo2 From "Tabla1.DB" a, "C:\DIRBDD2\TABLA2.DB" b
Where a.codigo = b.codigo
Como ven no uso el alias para identificar la segunda base de datos sino que "obligo" al BDE a buscar en el directorio específico del segundo alias la tabla.

Esto funciona para tablas locales pero en redes o con otros tipos de base de datos dudo que sirva.

¿ Cual es la forma correcta de unir las bases de datos ?

Nota: El código SQL generalmente lo creo en RunTime, usando bases de datos locales Paradox y un tQuery pero es muy posible que migre a Cliente/Servidor (FireBrid?)
__________________
Sitrico

Última edición por sitrico fecha: 30-06-2004 a las 21:27:04.
Responder Con Cita
  #2  
Antiguo 30-06-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 22
jachguate Va por buen camino
Firebird no tiene soporte para consultas en múltiples bases de datos. Podes revisar el diseño de tu aplicación... pues quizas no sea necesario que la información se encuentre en dos bases de datos distintas.

Una solución si tenes varios módulos es que podes tener una sola base de datos, a la que se conecten distintos clientes "especializados"... uno para inventarios, otro para contabilidad, etc. Pero todos los datos están en la misma bd, con lo que este tipo de consultas si son posibles.

He visto que se comentó ayer u hoy por aqui que es posible que el BDE te de soporte para consultar varias BD's interbase al mismo tiempo... no se si sea posible, pero si lo es, seguro que estas serán lentas y también imposibles de optimizar, sobre todo si incluyen diferentes joins, predicados complejos y no digamos clausulas del tipo group by/having e incluso Order by.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 01-07-2004
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 16
sitrico Va por buen camino


Aunque esa era precisamente la respuesta que más temia, vor a ejemplificar algo más (solo por las dudas).

La aplicación (la actual y la mayoría de las que he desarrollado) son "multiempresa" y usan varios directorios para almacenar las diferentes tablas de las bases de datos, me explico:

Tipicamente creo una estructura de directorios así:

Código:
\- AplicationDir -\- Data General -\- Data Empresa 1
                      |                      |
                      |                      \- Data Empresa 2
                      |                      |
                      |                      \- Data Empresa 3
                      |
                      \- Otros Directorios... (Ayuda, Imagenes, etc)
y uso 2 alias, uno general para las bases de datos comunes y otro para referirme a la base de datos de la empresa, para ello guardo el directorio en un archivo común y cuando es necesario creo el Alias y lo asigno a ese directorio al seleccionar la empresa.

Si tengo que juntar todas las tablas en una sola base de datos debería agregar el código de la empresa como campo clave a cada una de las tablas de datos de las empresas.

Siempre he usado el método anterior porque me parece más seguro mantener los datos de las diversas empresas por separado en lugar de unirlos en una sóla base de datos (que si se daña perdería toda la información de todas las empreas).

Se me ocurren 2 opciones, mover todos los datos de la empresa al directorio general al seleccionar la empresa y devolverlos al salir o cambiar de empresa o (y esto suena mejor) copiar las tablas comunes (que generalmente son estáticas definiciones y cosas así) dentro de la base de datos de la empresa para poder accesarlas como una sola base de datos, la unica desventaja es la redundancia de datos que se generaría (pero son tablas pequeñas) y no se que efecto real sobre el rendimiento tenga en ambientes cliente servidor.

Creo que voy a usar mi segunda opción, pero acepto (y agradezco)sugerencias.

Lo que sí quisiera saber es: ¿ Como puedo copiar tablas de una Base de datos a otra mediante codigo SQL ?.

P.D. Todo este rollo por querer trabajar como sugieren Voutarks (y otros) en este hilo: Consejo sobre componentes a usar en conexión por internet
__________________
Sitrico

Última edición por sitrico fecha: 01-07-2004 a las 01:52:20.
Responder Con Cita
  #4  
Antiguo 01-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 22
jachguate Va por buen camino
Cool

Cita:
Empezado por sitrico
... y usan varios directorios para almacenar las diferentes tablas de las bases de datos...
Es un planteamiento típico del desarrollo con tablas planas. De hecho yo trabajé con sistemas con este esquema en los viejos tiempos de Turbo Pascal, con archivos de B'trieve.

Cita:
Empezado por sitrico
Si tengo que juntar todas las tablas en una sola base de datos debería agregar el código de la empresa como campo clave a cada una de las tablas de datos de las empresas.
hay varios planteamientos, y este es uno válido y funcional.

Cita:
Empezado por sitrico
Siempre he usado el método anterior porque me parece más seguro mantener los datos de las diversas empresas por separado en lugar de unirlos en una sóla base de datos (que si se daña perdería toda la información de todas las empreas).
Con firebird las probabilidades que la base de datos se dañe son infimas en comparación con paradox. Además, esto regularmente se "cura" con una buena política de copias de seguridad.

Cita:
Empezado por sitrico
Se me ocurren 2 opciones, mover todos los datos de la empresa al directorio general al seleccionar la empresa y devolverlos al salir o cambiar de empresa
Esto impediría totalmente un sistema multiusuario con diferentes puestos trabajando en diferentes empresas (caso por demás típico..)

Cita:
Empezado por sitrico
o (y esto suena mejor) copiar las tablas comunes (que generalmente son estáticas definiciones y cosas así) dentro de la base de datos de la empresa para poder accesarlas como una sola base de datos, la unica desventaja es la redundancia de datos que se generaría (pero son tablas pequeñas) y no se que efecto real sobre el rendimiento tenga en ambientes cliente servidor.
No creo que haya impacto perceptible en el rendimiento.

Cita:
Empezado por sitrico
Lo que sí quisiera saber es: ¿ Como puedo copiar tablas de una Base de datos a otra mediante codigo SQL ?.
Volvemos a que en firebird esto no es posible. Has de exportar los datos a algun formato e importarlos en la otra bd. Hay programas especializados en esto; podes crear tus propios utilitarios y tambien hay "trucos" como el uso de tablas externas a la bd.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:49:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi