Ver Mensaje Individual
  #3  
Antiguo 22-12-2004
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Reputación: 21
StartKill Va por buen camino
Cool

Wnas foro

Esta pregunta me la plantee hace un buen tiempo: "que es recommendable?", una transaccion por ibquery o una transaaccion por todas... ibquery, ibsql...

La poca expereciencia en el mundo de la programacion de delphi con interbase y debo suponer con otros lenguajes y motores de base de datos cliente servidor me ha enseñado:Que el uso de las transacciones es a buen criterio del programador (segun la necesidad), te doy un ejemplo y saca una conclusion de ello.

Debo suponer que conoces ya el uso de los componentes ibx y al menos algunos conceptos en la programacion de ellos...

Supongamos que tenemos dos tablas: una es la Clientes y la otra la de Abonos, lo justo y normal es que exista un registro en Clientes y cero, uno o varios registros en la tabla abonos por cada cliente.

Código PHP:
tabla Clientes
   codclie     Cargo     Abono
   
====================
   
00001     100.23    33.00
   00002     123.63    10.00
   00003       78.68    32.00
   00004       74.00    22.00

tabla Abonos
   codcli    recibo        Abono   fecha
   
===============================
   
00001     FG001252   10.00   12/12/2004
   00001     FG001253   11.00   13
/12/2004
   00001     FG001254   12.00   15
/12/2004

   00002     FG001255   10.00   12
/12/2004

   00003     FG001256   11.00   12
/12/2004
   00003     FG001257   10.00   14
/12/2004
   00003     FG001258   11.00   16
/12/2004

   00004     FG001259   12.00   18
/12/2004
   00004     FG001260   10.00   19
/12/2004 
Si observas en la tabla cliente: la columna abono es la suma de la columna abono de la tabla Abonos ;-)

Imaginemos la actualizacion de estas tablas....

Código PHP:
1.dos ibquery.
2.una transaccion  que sera compartida para los dos ibquerys.
3.inicializo la transaccion.
4.inserto un registro con nuevos datos en abonos.
5.actualizo el campo abono de la tabla clientes sumando el monto 
     existente mas el nuevo abono de la tabla abonos
.
6.aplico la transaccion
Con este metodo de una sola transaccion me aseguro que se confirme los datos tanto para la tabla clientes y la tabla abonos.... si sale algo mal en la actualizacion de la tablas la transaccion se deshace ;-) y las dos tablas quedan como estaban.

Si hubiera sido dos transsaciones una para cada tabla????
Imaginate que la primera transsacion se confirme osea la de clientes y por alguna razon del destino en la segunda tabla de abonos ocurre algun error: (error de unique, clave foranea...cualquier error)...ah??, como quedan las tablas??... respuesta: solo la tabla clientes confirmada la transaccion y la segunda "rollback", transaccion deshecha. y tus tablas no quedarian consistentes (la suma de abono en la tabla abonos no reflejaria lo que indica en abono de la tabla clientes).

Entoces en este caso se sugiere usar una sola transaccion... ahora otro dira pero mejor usa un procedure para tu actualizacion con su respectiva transacion----tienes razon, pero esto es un ejemplo que se me ocurrio para explicar el uso de las trasacciones

Bueno, no soy profesor, espero haberme hecho entender: eso depende de tu necesidad, una de las ideas del uso de las transaciones es la consistencia extra de tus datos...(o todo o nada)

Your friend,

StartKill
Lima-Perú
Responder Con Cita