Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 07-01-2005
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.

Última edición por kinobi fecha: 07-01-2005 a las 12:03:50.
Responder Con Cita
  #3  
Antiguo 07-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 07-01-2005
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 07-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
Ok kinobi.

Pero de la forma que tu me has comentado, ¿es posible actualizar varios registros y posteriormente commitarlos todos o cancelarlos todos?
Responder Con Cita
  #6  
Antiguo 07-01-2005
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 10-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
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?
Responder Con Cita
  #8  
Antiguo 10-01-2005
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 11-01-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
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.
Responder Con Cita
Respuesta



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 12:47:04.


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
Copyright 1996-2007 Club Delphi