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 05-07-2006
Avatar de Hagen
Hagen Hagen is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
Hagen Va por buen camino
Question Dudas con transacciones

Hola.

Uso Delphi 7, Firebird 1.5.3 e IBX 7.08

Ya lei todos los hilos relacionados con transacciones del foro; pero
todavia me quedan algunas dudas:

- Cuando se dice que las transacciones no deben quedar abiertas mucho
tiempo. Esto se refiere a que una vez ejecutado starttransaction se
debe ejecutar inmediatamente un commit o commitretaining???

- Supongamos que tenemos un formulario en donde el usuario debe
introducir una gran cantidad de informacion. Durante ese tiempo
la transaccion debe quedar abierta hasta que el usuario termine
de introducir los datos???

- Cual es momento mas adecuado para iniciar la transaccion.
Al crearse el formulario en donde se llenara informacion???
Al momento de hacer click en algun boton de "insertar" o
"modificar"???

- Cuando se trabajan con transacciones es adecuado utilizar
los controles DataAware (DBEdits, DBComboBox,etc.)???

Muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 05-07-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Solo espero que lo que voy a poner sea lo correcto. Al menos es como yo lo hago.

Cita:
Cuando se dice que las transacciones no deben quedar abiertas mucho
tiempo. Esto se refiere a que una vez ejecutado starttransaction se
debe ejecutar inmediatamente un commit o commitretaining???
Piensa en que los usuarios son muy ingeniosos, y que se le pueden ocurrir hacer cosas que tu ni te imaginas. Imagina que un usuario inicia una transacción (editando un registro), le llaman por telefono y se le olvida terminar.
También puede pasar que un registro sea modificado desde varios terminales (casi) al mismo tiempo, por ejemplo, el clasico del stock en los supermercados.

La filosofia no es hacer un commit justo al abrir la transacción, sino en no abrir la transacción hasta que no vayas a hacer un commit.

Es decir, que recojes los datos, y cuando ya los tienes todos y el usuario esta seguro y quiere aceptar, inicias la transacción, grabas los datos y la terminas.

Conseguir esto a veces te obliga a escribir más código, y a utilizar controles no dbaware.

Recomiendo la "cara oculta de delphi 6", aunque creo que la versión de delphi 4 tambien es muy buena.

Cita:
- Supongamos que tenemos un formulario en donde el usuario debe
introducir una gran cantidad de informacion. Durante ese tiempo
la transaccion debe quedar abierta hasta que el usuario termine
de introducir los datos???
Justo a esto es a lo que me refería. Depende de los datos que manejes, pero en general, si va a estar en red, yo intentaría evitarlo.

Cita:
- Cuando se trabajan con transacciones es adecuado utilizar
los controles DataAware (DBEdits, DBComboBox,etc.)???
Depende, yo solo los uso cuando tengo claro que no interferirán en el funcionamiento de la aplicación.

También hay que tener en cuenta los diferentes tipos de transacciones, y buscar el que mejor se ajuste a lo que necesitas. En mi caso, casi todas son "read committed"

Espero que te solucione algo.
Responder Con Cita
  #3  
Antiguo 05-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Podrías informarte sobre los ClientsDataset con cacheUpdates. Usas controles DBEdits asociados a ese CDS. Puedes Editar, insertar, eliminar registros, etc, pero realmente los datos no se graban a las tablas, sino que se hace en memoria.

Cuando el usuario Pulsa en Grabar, por código llamas a ApplyUpdates del CDS y en ese momento es cuando inicias la transacción, grabas los datos y despues terminas la transacción.

PD: Si me equivoco, por favor corríjanme.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 05-07-2006
Avatar de Hagen
Hagen Hagen is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Poder: 21
Hagen Va por buen camino
Question

Sick boy y Lepe:

Muchas gracias por responder tan rapido.

Me quedan otras dudas.

para Sick boy:
Cita:
Empezado por Sick boy
La filosofia no es hacer un commit justo al abrir la transacción, sino en no abrir la transacción hasta que no vayas a hacer un commit.

Es decir, que recojes los datos, y cuando ya los tienes todos y el usuario esta seguro y quiere aceptar, inicias la transacción, grabas los datos y la terminas.
Te refieres a que cuando se haga click en algun button "Guardar" ó "Grabar" debo
hacer que se llame a STARTTRANSACTION y seguidamente a COMMIT?

Cita:
Empezado por Sick boy
Depende, yo solo los uso cuando tengo claro que no interferirán en el funcionamiento de la aplicación.
Podrias darme algunos ejemplos


Para Lepe
Cita:
Empezado por Lepe
Podrías informarte sobre los ClientsDataset con cacheUpdates. Usas controles DBEdits asociados a ese CDS. Puedes Editar, insertar, eliminar registros, etc, pero realmente los
datos no se graban a las tablas, sino que se hace en memoria.
En este caso no habria problemas cuando se quiere obtener valores(generadores) desde el servidor?

Última edición por Hagen fecha: 05-07-2006 a las 15:16:02.
Responder Con Cita
  #5  
Antiguo 05-07-2006
[pepon386] pepon386 is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Valencia
Posts: 68
Poder: 20
pepon386 Va por buen camino
Yo personalmente te recomiendo que utilices lo siguiente:
ConsultaIB -> TDataSetProvider -> TClientDataSet

En "ConsultaIB" utiliza los componentes de acceso a Interbase que prefieras (siempre que deriben de TDataset).

Al usar esta "técnica" lo que consigues es que las actualizaciones se realizan en local, y cuando llamas al método "ApplyUpdates" del TClientDataset, que se encarga de iniciar la transacción, realizar todas las actualizaciones a la base de datos que sean necesarias y a continuación el commit.

Sinceramente, tienes que cambiar un poco la mentalidad de cómo se realizan las actualizaciones, además de que cuando quieres realizar cambios en varias tablas a la vez en una sola transacción debes controlarlo manualmente, pero por lo demás es muy sencillo y eficaz. Documéntate sobre ello. Si mal no recuerdo hay varios ejemplos en bdn.borland.com. Y si tienes algo de dinero para invertir, cómprale a Ian Marteens uno de sus cursos a distancia (son de lo mejor para iniciarse en esto) en http://www.marteens.com
Responder Con Cita
  #6  
Antiguo 06-07-2006
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
La solución PROVIDER + CLIENTDATASET parece muy buena, aunque yo aun no la he probado, por eso no puedo opinar.

Como en todo, la solución del PROVIDER tendrá sus ventajas y sus inconvenientes.

Cita:
Te refieres a que cuando se haga click en algun button "Guardar" ó "Grabar" debo
hacer que se llame a STARTTRANSACTION y seguidamente a COMMIT?
Bueno, cuando te contesté estaba pensando en insertar datos sin controles DBAware, asi que no es solo iniciar y terminar la transacción, sino que tienes que poner el SQL en medio.

Por ejemplo, al crear una factura, recoges el codigo del producto y la cantidad mediante un par de edits, y luego al pulsar el boton construyes el SQL que hace la inserción.

Cita:
Podrias darme algunos ejemplos
A mi me gusta que al crear las facturas, el usuario pueda modificar lo minimo posible. Además, al insertar hago más operaciones con los registros (que ya se que se pueden y deben hacer con triggers),asi que me gusta saber en cada momento lo que inserto.

Esto es una opinión, seguro que hay otras formas de hacerlo, y posiblemente más eficientes, pero estaba migrando un programa de PARADOX a FB, y esto es lo que me resultó más facil.

Añadir que yo no utilizo IBX, uso los MDO (Mercury Database Objects), muy buenos, y libres.

Y recomendarte de nuevo la Cara Oculta de Delphi 4, libro gratuito y facil de encontrar. Hay mucha información sobre las transacciones en general.

Y en la cara oculta de delphi 6 hay todo un apartado sobre proveedores y modulos remotos y servidores de capa intermedia.
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
Las transacciones y yo gario Conexión con bases de datos 5 16-03-2009 17:23:13
Transacciones JulioGO Firebird e Interbase 1 07-05-2006 00:46:28
dudas sobre transacciones..... inexperto Conexión con bases de datos 2 18-11-2004 20:24:31
Dudas con Transacciones y Actualizaciones en Caché cybergerman Conexión con bases de datos 3 29-09-2004 21:13:03


La franja horaria es GMT +2. Ahora son las 14:41:46.


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