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)
-   -   Pregunta sobre actualizar bases de datos (https://www.clubdelphi.com/foros/showthread.php?t=17403)

mar646 07-01-2005 11:52:20

Pregunta sobre actualizar bases de datos
 
Hola a todos. ¿Es posible modificar una campo de una tabla perteneciente a una base de datos desde un trigger de otra base de datos?

Uso Firebird 1.5, delphi7 y dbexpress.

kinobi 07-01-2005 12:01:44

Hola,

Directamente no.

Una posible solución sería llamar a una UDF desde el trigger que, pasando los parámetros adecuados (base de datos a actualizar y, por ejemplo, sentencia UPDATE SQL a aplicar), se conectase a la segunda base de datos y actualizase la misma. Tendrías que utilizar dos transacciones diferentes, una en la que se está ejecutando el trigger, y otra para lanzar la sentencia UPDATE desde la UDF, pero, si la atomicidad de la operación no es vital, podría servir.


Saludos.

mar646 07-01-2005 12:16:21

Hola Kinobi. Supongo que más fácil sería desde la aplicación delphi (con lo que ya no podría actualizar una modficación directa en la base de datos) poder obtener los cambios efectuados en una base de datos y aplicar esas sentencias sql a la otra base de datos.

¿Hay alguna forma de capturar las sentencias generadas por un datasetprovider?

kinobi 07-01-2005 13:11:38

Hola,

Cita:

Empezado por mar646
Supongo que más fácil sería desde la aplicación delphi...

Sí, probablemente. Mi comentario estaba en relación al tuyo primero, donde comentabas que querías el acceso a la segunda base de datos desde un trigger de la primera. Vamos, que entendí que querías una solución exclusivamente en el lado servidor y que no afectara a los clientes.

Cita:

Empezado por mar646
¿Hay alguna forma de capturar las sentencias generadas por un datasetprovider?

Ni idea. Hace siglos que no utilizo Delphi, y tampoco soy un gran conocedor de los Providers

Saludos.

mar646 07-01-2005 14:14:39

Ok kinobi.

Pero de la forma que tu me has comentado, ¿es posible actualizar varios registros y posteriormente commitarlos todos o cancelarlos todos?

kinobi 07-01-2005 22:21:29

Cita:

Empezado por mar646
Pero de la forma que tu me has comentado, ¿es posible actualizar varios registros y posteriormente commitarlos todos o cancelarlos todos?

Pues sí, pero no lo tomes de forma categórica, ya que antes habría que definir qué quieres decir con "posteriormente". ¿Posteriormente se refiere al proceso que se ejecuta dentro de la UDF... o al proceso (trigger) que desencadenó la llamada a la UDF?

Saludos.

mar646 10-01-2005 09:09:38

El problema es que yo en delphi abro una trasacción y dentro de ella hago todo el proceso sobre la base A (la que quiero modificar automáticamente es la B) de tal forma que en un momento dado, por ejemplo si falla el último applyupdates, puedo hacer rollback de todo lo realizado dentro de esa transacción. Sin embargo, si pongo la llamada de la udf en el trigger after insert, el único registro que no entrará será el que de el error, y el resto si quedarían actualizados en la base B; sin embargo en la empresa A todo se desharia.

¿alguna idea para este problema?

kinobi 10-01-2005 20:36:02

Hola,

Cita:

Empezado por mar646
¿alguna idea para este problema?

Pues directamente no. Como te comenté en mi primer mensaje en el hilo, la solución de la UDF sólo es válida si no se precisa atomicidad en las actualizaciones de las dos bases de datos.

En cuanto a la parte cliente, como te dije también en un mensaje anterior, desconozco si desde Delphi es posible hacerlo, supongo que dependerá del mecanismo de acceso que estés utilizando. Lo que sí puedo decirte es que el API InterBase permite que una transacción actúe contra varias bases de datos simultáneamente.

Saludos.

mar646 11-01-2005 10:04:10

Gracias por tus respuestas. La verdad que creo que al final voy a hacerlo todo en la misma base de datos.

Ya sólo por curiosidad, ¿a qué te refieres con eso de que puede controlar una transacción sobre varias bases de datos? ¿algún sitio donde pueda recabar información sobre este tema?

De nuevo. Muchas gracias.


La franja horaria es GMT +2. Ahora son las 15:57:51.

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