Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ligado / Interconexión de dos BD/Sesiones (https://www.clubdelphi.com/foros/showthread.php?t=45042)

_Willa 21-06-2007 09:08:44

Ligado / Interconexión de dos BD/Sesiones
 
Buenas,

Tengo alguna duda, haber si alguien me puede decir,

Tengo dos bases de datos distintas, aunque realmente contiene el
mismo contenido, es decir, disponen de las mismas tablas, pero bueno
esto no es relevante.

El tema es como esas dos BD. o imagino que serán dos sesiones distintas
se pueden interligar de tal manera pueda actualizar el contido de una
tabla de la SesionA, con el contido de la misma tabla en la SesiónB.a

No se si me he explicado.

Gracias de antemano

_Willa 21-06-2007 13:56:53

Soy de nuevo el mismo de antes,
es que no se si ha quedado demasiado claro.

Tengo 2 ficheros .gdb, y lo que me gustaria hacer sería
que el contenido de una tabla del fichero_A.gdb, se
actualizase en otra tabla distinta contenida en el fichero_B.gdb

por lo tanto creo que son 2 sesiones distintas, no?
bueno no lo sea!!

salu2

RolphyReyes 21-06-2007 14:41:26

Saludos.

Lo que andas buscando es el efecto de replicacion, eso lo puedes conseguir con un programa que esta en http://www.ibphoenix.com se llama IbReplication.

Por otra parte desde la misma BD no puedes actualizar otra BD no hasta FireBird 3 segun tengo entendido; por lo pronto si quieres hacer este efecto tendras que hacer tu una utilidad o tu aplicacion hacer los procedimientos adecuados.

Espero haberte ayudado.

TJose 22-06-2007 04:27:41

Hola _Willa

Si lo que quieres es mantener una copia de la base de datos 'en tiempo real', puedes usar una característica de firebird que se denomina shadow.
Resultados en Google

saludos
TJose

_Willa 22-06-2007 09:52:35

Creo que no me estais entendiendo. por eso voy a poner algun ejem.
Imaginaros que tengo un Base de Datos, llamada LecturasGlobales.gdb
que contiene una serie de tablas ( gasolinera, tarifas, movimientos, etc )

y ahora tengo otra Base de Datos que se llama LecturasParciales.gdb
que entre sus tablas existe una llamada 'movimientos'.

Y lo que se trata es llevar los datos contenidos en la tabla de 'movimientos'
de la Base de Datos Parcial, y añadir o actualizar la base de datos 'movimientos' contenida en la Base de Datos Global.

Por cierto, no se si lo dice, estoy usando Base de DAtos del
tipo Interbase, y programando en C++builder, aunque si existe codigo
en Delphi, no me importa demasiado.
No importa usar procedimientos almacenados, pero me gustarián que estos
no estuviesen en la base de datos, sino poder usar TIBStoredProc,
es decir, hacerlo desde el propio programa.

Muchas Gracias, desde ya!!
salu2
_Willa

RolphyReyes 22-06-2007 14:45:08

Pues segun entiendo resolviste el problema. Si lo que quieres llevar los datos de una BD a otra "manual" entonces lo unico que debes de hacer es tener dos conexiones (componentes tipo BD) desde tu programa y listo; osea llevar los datos via programacion.

_Willa 25-06-2007 09:23:02

ok, Entiendo.

Usar estos componentes por cada una de las BD.

- TIBDatabase
- TIBTransaction
- TIBDataSet

- Realizar consulta sobre cada una de las Tablas
- Mediante un bucle, ir reg a reg de la consulta realiza
actuando sobre la siguiente BD.

Lo probaré.
Gracias!!!!

Delfino 25-06-2007 16:32:07

Puedes usar una query con parametros donde insertas o modificas campos de una BD con los valors de otra..

TJose 26-06-2007 01:48:06

Hola _Willa

Cita:

Usar estos componentes por cada una de las BD.

- TIBDatabase
- TIBTransaction
- TIBDataSet
También puedes usar una transacción distribuida (creo que así se llama), esto es:
- 2 TIBDatabase
- 1 TIBTransaction

ejecutas las sentencias que quieres en cada una de las bases de datos dentro de una misma transacción.

Saludos

_Willa 27-06-2007 09:12:50

Gracias, TJose probaré esto ultimo que dices para ver la manera
en la que puedo encajarlo en C++Builder.

puede ser algo así como...
Código:


    ib_db1 = new TIBDatabase(NULL);  // Primera BD
    ib_db2 = new TIBDatabase(NULL);  // Segunda BD

    ib_tra = new TIBTransaction(NULL);  // Transacción Común.

    ib_db1->AddTransaction(ib_tra);
    ib_db2->AddTransaction(ib_tra);

    ib_tra->AddDatabase(ib_db1);
    ib_tra->AddDatabase(ib_db2);

Bueno Probaré si funciona todo esto.
_Gracias.

_Willa 28-06-2007 11:57:02

Una duda q me ha quedado, es si en lugar de usar codigo Builder C++,
si podria hacer esto mismo a través del un procedimiento Almacenado,

Es decir, se podría hacer un procedimiento Almacenado ( sp_xxxx ) que
permita enlazar datos de dos Base de Datos distintas, para consultar/mover,etc - datos de una tabla a otra tabla de otra Base Datos.

Con sentencias SQL, dos Bases de Datos Distintas (.gdb ) se pueden usar a la vez ??

Si alguien ha realizado algo asi ?? , Se puede en sp ??

_Gracias_

RolphyReyes 28-06-2007 14:47:02

Saludos.

Como te habia respondido anteriormente desde una BD Interbase/Firebird no es posible la "manipulacion" de datos a otra BD, segun esta en la pagina principal de Firebird esto sera posible en la version 3.

Pero con http://www.ibexpert.com segun su documentacion utilizando unas sentencias "propias" de ellos se puede realizar esta operación, solo que el manejador debe de ser la de pago.

Hasta luego.


La franja horaria es GMT +2. Ahora son las 23:02:48.

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