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)
-   -   Acceso a Firebird desde Firebird (https://www.clubdelphi.com/foros/showthread.php?t=95032)

Gregorio Cíber 27-01-2021 15:02:17

Acceso a Firebird desde Firebird
 
Hola, amigos. ¿Se puede interactuar con una BD con Firebird 3 desde dentro de otra BD con Firebird 3 para producir modificaciones en la primera?. Paso a explicarme:


1.- Tres empresas (A, B y C) totalmente independientes entre si aunque con BDs de estructuras similares.

2.- La empresa C tienes sólo dos proveedores: las empresas A y B.
3.- Cuado se cree un pedido de cliente en C se debe generar un pedido de proveedor en A o B, según unas determinadas condiciones.


La pregunta se refiere al punto 3. Es decir, ¿es posible ejecutar un procediemto almacenado en C que cree un pedido de proveedor en A o B?.


Espero haberlo explicado bien.
Gracias anticipadas.

Neftali [Germán.Estévez] 27-01-2021 15:40:32

Busca referencias sobre ON EXTERNAL (en el commando Execute).
No lo he usado y no se exactamente las limitaciones. Tampoco si hace lo que necesitas.
Hace tiempo que no trabajo con IB/FB, pero en su memento me sonaba esto.

Casimiro Notevi 27-01-2021 18:55:56

Cita:

Empezado por Gregorio Cíber (Mensaje 539788)
1.- Tres empresas (A, B y C) totalmente independientes entre si aunque con BDs de estructuras similares.

Si son totalmente independientes, se supone que están en lugares distintos, puedes enviar la información por internet, el típico exportar/importar.

cloayza 28-01-2021 20:52:04

Creo que lo puedes hacer, haber si esto te ayuda un poco...
C=>Genera Pedido, cuando se guarde este pedido hay que crear un pedido en A o B...

A, B: Se deberá crear un procedimiento almacenado que reciba los datos de un pedido para almacenar.

Supongamos que es este:
Código SQL [-]
create or alter procedure NuevoPedido(Folio integer, Valor double precision)
as
begin
        insert into Pedidos(folio, valor) Values(:Folio, :Valor);
end

C: Se deberá llamar a procedimiento en A o B.

Supongamos que en C, tenemos el siguiente procedimiento
Código SQL [-]
create or alter procedure Orden_En_A(Folio integer, Valor double precision)
as
declare stProcCall varchar(100) ='execute procedure NuevoPedido(:Folio, :Valor)';
declare stConexion varchar(100)='localhost:/home/database/Base_Data_A.fdb'
begin
       execute statement (stProcCall) (Folio := :Folio, Valor := :Valor)
       on external  DATA SOURCE (stConexion) AS USER CURRENT_USER PASSWORD 'masterkey'
end

create or alter procedure Orden_En_B(Folio integer, Valor double precision)
as
declare stProcCall varchar(100) ='execute procedure NuevoPedido(:Folio, :Valor)';
declare stConexion varchar(100)='localhost:/home/database/Base_Data_B.fdb'
begin
     execute statement (stProcCall) (Folio:= :Folio, Valor:= :Valor)
     on external  DATA SOURCE (stConexion) AS USER CURRENT_USER PASSWORD 'masterkey'
end

Por supuesto se puede mejorar y parametrizar, pero eso luego...Espero te ayuda
Un abrazo

Mas detalles aquí

Gregorio Cíber 30-01-2021 09:35:25

¡Qué buenos y generosos sois!
Gracias a todos por responder. Me pongo ipso facto con el tema.
Saludos.


La franja horaria es GMT +2. Ahora son las 12:48:17.

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