Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 22-12-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 24
Mick Va por buen camino
Cada transaccion define un conjunto de modificaciones sobre la base de datos que deben hacerse de forma atomica, eso significa que o se hacen todas o no se hace ninguna.
Esto permite mantener la coherencia en la base de datos aunque se produzca algun error en el medio de las transacciones, o algun conflicto con otro cliente/usuario.
Asi que la cuestion no es ni tener una unica transaccion para todo ni una transaccion por cada query, sino que cada proceso hay que estudiarlo y definir una o mas transacciones segun sea necesario:
Por ejemplo si tenemos un proceso de salida de articulos en el que realizamos lo siguiente:
1. Creamos un albaran de salida de articulos, guardando en una tabla de detalles la lista de articulos y cantidades que salen del almacen.
2. Actualizamos la tabla de stocks o de articulos restando las cantidades de cada articulo que han salido.

En este proceso de ejemplo vemos que si por algun problema, se realiza el punto 1 del proceso, pero el punto 2 da error (supongamos que se perdio la conexion de red entre medias) la base de datos quedara con informacion incoherente, tendremos un albaran que nos indica que ha salido determinado material pero si miramos el stock, en este nos constara que tenemos articulos de mas (porque no se ha podido restar las cantidades por el error anterior).

Luego para este proceso:
-Iniciamos una transaccion (Start)
-Realizamos el punto 1
-Realizamos el punto 2
-Si todo ha ido bien, confirmamos la transaccion (Commit).
-Si se produce algun error en alguno de los puntos: cancelamos (RollBack)

Al realizarse los dos procesos dentro de una misma transaccion si el punto 2 da error y no puede realizarse, hariamos un rollback de modo que la transaccion se anularia, lo que implica que todos los procesos realizados anteriormente desde que se inicio la transaccion son cancelados, es como si nunca se hubiese realizado el punto 1, de modo que nunca tendremos incoherencias entre informacion relacionada que se encuentre guardada en distintas tablas de la base de datos.

En este ejemplo vemos que tendriamos una unica transaccion para el proceso,
pero ejecutariamos varias queries de actualizacion sobre la base de datos, todas estas queries tienen que utilizar esa misma transaccion.

Lo que si se puede hacer para ahorrar en el uso de componentes TIbTransaction es utilizar un unico componente TIbTransaction con un nivel de aislamiento: ReadCommited, para todos los procesos y queries de consulta del programa. Es decir operaciones que no impliquen modificaciones en la base de datos: listados, consultas , etc, todas podrian utilizar el mismo componente.

Saludos
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 06:45:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi