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 31-01-2006
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Lightbulb Transactions Firebird

Hola a todos, gracias por su ayuda, Estoy desarrollando una aplicacion en Firebird 1.5, y he llegado al punto donde tengo que programar pensando en varias aplicaciones modificando la base de datos al mismo tiempo, bueno tengo el tipico problema ¿ que pasa cuando dos aplicaciones intentan modificar la base de datos al mismo tiempo ?

Tengo entendido que Todas las aplicaciones pueden Ejecutar una lectura al mismo tiempo sin problema, estoy bien ?
el problema es que no todas pueden modificar al mismo tiempo, bueno la consulta es cual seria la forma de lograr esto, existe algun documento electronico en la red o que alguien pudiera mostrarme un codigo de ejemplo sencillo, actual mente estoy trabajando en Builder c++ 6.0, pero el codigo de ejemplo podria estar en Delphi tambien, espero haber sido claro con mi duda y muchas gracias por su ayuda.

Última edición por Abel Garcia fecha: 31-01-2006 a las 17:58:13.
Responder Con Cita
  #2  
Antiguo 31-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por Abel Garcia
Tengo entendido que Todas las aplicaciones pueden Ejecutar una lectura al mismo tiempo sin problema, estoy bien ?
correcto
Cita:
Empezado por Abel Garcia
el problema es que no todas pueden modificar al mismo tiempo
¡Momento! esto tiene sus matices. No mas de una transacción puede modificar el mismo registro al mismo tiempo, pero ningun conflicto ocurre si la transacción a modifica la existencia de las cocacolas mientras la transacción b modifica la de las lechugas...

Cita:
Empezado por Abel Garcia
bueno la consulta es cual seria la forma de lograr esto
No tengo ahora a mano ningún documento que pueda ayudarte... pero en general la regla es sencilla: Transacciones cortas y en la medida de lo posible, realizar actualizaciones en el mismo orden para evitar deadlocks (la transacción a modifica el registro 1, luego intenta modificar el 2 y se ve obligada a esperar porque ese registro fue modificado por la transacción b. Resulta que la transacción b modificó el registro 2 y luego intenta modificar el 1, pero este ya ha sido modificado por a. Resultado: un abrazo de la muerte (), es decir, un deadlock, donde a espera a b, pero b espera a a... Esto se evita logrando que tanto a y b actualicen primero 1 y luego 2.

Cuando una transacción modifica un registro, este queda bloqueado para cualquier otra transacción que intente modificarlo. El bloqueo es liberado cuando la transacción termina (con un commit o un rollback), por lo que conviene tener transacciones cortas en el tiempo. Si un programa inicia una transacción, modifica un registro, el usuario se va a tomar una taza de café y hacer la siesta, para luego regresar a modificar otro y hacer commit, todo se vuelve un caos. Para ello, es mejor mantener todas las modificaciones en memoria y luego enviarlas en un solo paso al servidor de base de datos. Existen varias técnicas para ellos, por ejemplo, podrías activar los cached updates o usar client datasets.

Te dejo hasta aqui, que ni soy bueno redactando, ni quiero perderte en un tema que está bien documentado y del que seguramente encontrarás información de mejor calidad.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 31-01-2006
Abel Garcia Abel Garcia is offline
Miembro
 
Registrado: nov 2004
Posts: 45
Poder: 0
Abel Garcia Va por buen camino
Lightbulb Gracias

Muchas Gracias jachguate por tu respuesta, la verdad me ayudo mucho
y tienes razon no pasa nada cuando dos Transacciones Intentan modificar a un registro diferente, lo cual no es igual cuando intentan modificar al mismo registro. vbmenu_register("postmenu_128516", true);
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
wait transactions con DBE Ivanzinho Firebird e Interbase 3 15-10-2005 16:03:52
InterBase, Delphi 5, BDE y Transactions Gustavo M Conexión con bases de datos 0 16-11-2004 02:07:01
Probelma con Trigger en FireBrid lgluna Firebird e Interbase 3 30-04-2004 01:09:50


La franja horaria es GMT +2. Ahora son las 18:30:06.


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