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)
-   -   un Triggers dos BBDD (https://www.clubdelphi.com/foros/showthread.php?t=96104)

GINMARMENOR 11-02-2023 20:59:39

un Triggers dos BBDD
 
Hola, en este momento estoy trabajando con triggers y me funciona de maravilla con el siguiente código en BEFORE INSERT en IbExpert, Trabajo con una BaseDatosGestion con dos Tablas:

una AlbaranRetirada pertenece a BaseDatosGestion
y la otra Carros pertenece a Base DatosGestion

Hago un Albarán de retirada de un numero de carros y me actualiza el número de carros en almacén como he dicho ambas tablas pertenecen a una BaseDatosGestion.

Código SQL [-]
            BEGIN
             As
             UPDATE CARROS CA
               SET CA.CarrosAlmacen = COALESCE (CA.CarrosAlmacen - NEW.NumeroCarros, 0 )

               Where ca.carro = new.CodigoCarro

Éste Codigo funciona perfecto, pero por motivos quería que la tabla por diversos motivos quería ponerla en una Base de datos distinga llamada BaseDatosMaestro.

Con lo que la TablaAlbaranRetirada, está en la BaseDatosGestion, mientras que la tabla Carros está en la BaseDatosMaestro.

Pero no sé cómo hacer el truco de hacer un Triggers donde hacer en un albarán de la Tabla Albarán que pertenece a BaseDatosGestion y me restara de la TablaCarros que pertenece a BaseDatosMaestro. si esto es posible.

Gracias.

Casimiro Notevi 11-02-2023 21:22:06

Poder, se puede. ¿Pero hay algún motivo que lo hace totalmente necesario?
Es que esa pregunta suena a algo similar a esto: "Tengo 2 coches, quiero que cuando cambie de marcha en uno de ellos, se cambie automáticamente de marcha en el otro".

Pero, bueno, lo que pides sería con "EXECUTE STATEMENT"

GINMARMENOR 11-02-2023 21:47:55

Hola Casimiro, he puesto un ejemplo que da a entender el ejemplo que pones de los dos coches, pero tengo dos bases de datos una BaseDatosMaestro, donde tengo las Tablas Maestro, (TablaClientes, TablaProductos, TablaProveedores...) y otra BaseDatosGestion donde tengo las tablas de Gestion como TablaPedidos,TablaVentas o TablasProducción....

Cuando diseñé el programa lo diseñé pensando en que sería mejor en dos BBDD, para no hacer una muy grande, no sé si acerté o no.
En el ejemplo que he puesto se podría en vez de usar dos coches usar uno, pero en otros ejemplos tendría que usar las dos bases de datos, intentaré buscar como usar "EXECUTE STATEMENT" , pero si pudieras ponerme un ejemplo sencillo o algunos enlaces os lo agracería

Gracias.

Casimiro Notevi 11-02-2023 22:03:21

Cita:

Empezado por GINMARMENOR (Mensaje 550332)
Cuando diseñé el programa lo diseñé pensando en que sería mejor en dos BBDD, para no hacer una muy grande, no sé si acerté o no.

Te vas a complicar la vida enormemente, y sin motivo alguno. Cambia todo para usar una sola base de datos. Como sigas así con las dos BD va a ser una tortura. Cuando antes lo cambies, mejor.
Y no te preocupes por el tamaño de la BD, unos cuantos decenas de gigas no es nada.

Una simple búsqueda de EXECUTE STATEMENT en los foros:
Código SQL [-]
create or alter procedure SP_CUSTOMER
returns (
    CUST_NO integer,
    CUSTOMER varchar(25),
    COUNTRY varchar(15),
    CURRENCY varchar(20))
as
BEGIN
  FOR select
        customer.cust_no,
        customer.customer,
        customer.country
    from customer
    INTO :CUST_NO,
         :CUSTOMER,
         :COUNTRY
  DO
  BEGIN
       FOR EXECUTE STATEMENT 'SELECT CURRENCY FROM COUNTRY WHERE COUNTRY='''||:Country||''''
           ON EXTERNAL DATA SOURCE 'EMPLOYEE.FDB' AS USER CURRENT_USER PASSWORD 'masterkey'
       INTO :CURRENCY
       DO
       BEGIN
            suspend;
       END
  END
END


La franja horaria es GMT +2. Ahora son las 14:00:28.

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