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 26-10-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Transaciones en IB y Componentes Conecatdos a Datos

Hola Amigos...

Hasta donde tengo entendido cada vez que se tiene acceso a los Datos de una
Base IB, se inicia una transacion en forma implicita, que termina cuando el ultimo comnado de acceso a los datos a sido ejecutado. Como es de imaginar estas transaciones iniciadas en forma implicita, consumen muchos mas recursos, que si se iniciaran en forma emplicita, es decir por nosotros mismos. Ya aclarado lo anterior mi pregunta es la siguiente: cuando enlaso un componente de acceso a datos (Tabla,Query) a un control que muestra dichos datos (DBcombo, BDGrid, etc), como se manejan las transaciones, es el propio componente visual el que maneja las transaciones, o sigue siendo IB el que las lansa...si es lo ultimo, como puedo manejarlas yo.....
Responder Con Cita
  #2  
Antiguo 26-10-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Transaciones en IB

Hola Amigos

Cuando se trabaja con transaciones, que es mas recomendable, tener solo un componente Transaccion a nivel de modulo de datos, conectado a la base de datos y que este sirva para cualquier componente de acceso a datos o que por cada componente de acceso a datos creado en un formulario, exista tambien un componente transacion diferente enlasado a el...

Gracias por cualquier ayuda
Saludos....
Responder Con Cita
  #3  
Antiguo 26-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Has abierto dos hilos similares en el foro de varios donde no corresponde por esto han sido refundidos y trasladados al Foro de Interbase & Firebird, que es donde hubiese correspondido hacer una sola pregunta al respecto.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 27-10-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Tienes razon marcoszorrilla, en lo del lugar en donde fueron publicadas mis preguntas, debio haber sido en el Foro de Interbase & Firebird y en el el foro de Varios, pero respecto a que las dos preguntas debieron haber sido efectuadas en una sola, creo que te equivocas, si bien las dos tocan el tema de las transacciones, son preguntas difentes y ademas solo sigo lo que indica la guia de estilos "solo una pregunta por hilo".....
Respecto a mis dudas que puedes aportar con algo....

Saludos
Responder Con Cita
  #5  
Antiguo 27-10-2004
Avatar de kalimero
kalimero kalimero is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 288
Poder: 22
kalimero Va por buen camino
Hola.

Esos depende del enfoque que le quieras dar a tu aplicación. Puedes utilizar un solo componente transaction o muchos(tantos como necesites).

Saludos
Responder Con Cita
  #6  
Antiguo 27-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Cita:
Tienes razon marcoszorrilla, en lo del lugar en donde fueron publicadas mis preguntas, debio haber sido en el Foro de Interbase & Firebird y en el el foro de Varios, pero respecto a que las dos preguntas debieron haber sido efectuadas en una sola, creo que te equivocas, si bien las dos tocan el tema de las transacciones, son preguntas difentes y ademas solo sigo lo que indica la guia de estilos "solo una pregunta por hilo".....
A la vista de las preguntas es opinable si deben de ir en un hilo o abrirse dos, en cualquier caso te concedo la razón, no tengo ningún problema.

No tengo tiempo para más.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #7  
Antiguo 27-10-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Poder: 20
athlontado Va por buen camino
Usa los componentes IBX ó similares y olvídate del BDE para este caso (IB/FB), de ésta forma tendrás tú el control sobre las transacciones.

Lo de usar una transacción para cada componente de acceso a datos, depende mucho de qué es lo que vayas a hacer con los datos, por ejemplo.

Yo usaría una transacción por componente de datos si fuera a realizar muchas inserciones/actualizaciones simultáneas con el mismo componente. Para acceder a tablas relacionadas, es preferible usar la misma transacción en los componentes de acceso a datos.

Ten en cuenta que las transacciones, cuanto menos tiempo permanezcan abiertas, mejor, ya que se consumen menos recursos y éstos se reparten más eficientemente.

Un ejemplo:
Si tienes que dejar una transacción abierta todo el tiempo, porque es de donde se obtienen los datos mostrados en una rejilla, entonces, es preferible que uses una transacción de sólo lectura (read) para el componente enlazado a la rejilla y uses otro juego componente-transacción de escritura (write) para actualizar los datos. Recuerda hacer un Commit en la transacción de sólo lectura y reabrir el componente enlazado a la rejilla, para que se muestren los nuevos datos.

Bueeenoooo, eso de las transacciones es todo un mundo. Según lo que necesites hacer, puedes jugar con las transacciones de muchas maneras.

Esperando no haber liado más el "pulpo", me despido con un saludete.

__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
Responder Con Cita
  #8  
Antiguo 28-10-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Hola athlontado, mi caso es el siguiente, estoy desarrollando una aplicacion cliente/servidor (con IBX), en la cual tengo un DataModule con un componente base de datos y otro transaccion. Cada vez que habro un formulario creo un nuevo componente query del cual saco los datos que voy a mostrar en una rejilla de datos (grid), a la vez tambien creo en tiempo de ejecucion otros querys para rescatar datos relacionados con los que maneja el formulario en forma principal, algo asi como un master detail. Mis dudas surgen al momento de manejar las transaciones asociadas a los accesos a datos efectuadas por los componentes. No se si asignar el mismo componente transacion de del datamodule a todos los componentes de acceso a datos y si solo utilizar este en ciertas ocaciones. Por ejemplo he pensado que cuando se realizan accesos de solo lectura por parte de algunos componentes asignarles su propio componente transacion a cada uno con las propiedades de solo lectura en la transaccion. si es este el caso, donde debo iniciar la transaccion, al momento de abrir el formulario, ya que la regilla se carga en forma automatica. Y cerrar la transaccion cuando se cierra el formulario.....????

Agradeceria mucho me pudieras aportar con ideas y conocimiento...

Saludos...
Responder Con Cita
  #9  
Antiguo 29-10-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Poder: 20
athlontado Va por buen camino
Thumbs up

En este caso concreto, creo que sería lógico que usaras dos componentes IBTransaction en el mismo DataModule, uno de sólo lectura, que permanecería abierto todo el tiempo hasta el momento que quisieras mostrar los datos actualizados en otras transacciones, y el otro en modo escritura, que sólo activarías en la fracción de segundo que necesite para ejecutarse tu código de actualización de datos.

Por ejemplo:

Vamos a llamar al componente de transacción de sólo lectura TranLee y al de escritura TranEscribe. Los querys que sólo realicen consultas, los enlazamos, todos ellos, con TranLee. Cuando queramos traernos los últimos datos que se hayan introducido/actualizado en la BBDD desde que iniciamos la transacción con TranLee, cerramos y volvemos a abrir TranLee (lo cual crea una nueva transacción) y volvemos a abrir los querys que estuviesen abiertos. Yo crearía todos los querys en el DataModule y, mediante un procedimiento, recorrería todos los querys que tengan la propiedad "Tag" en 1, volvería a abrir esos querys en el momento que reabriese TranLee para actualizar los datos mostrados. Evidentemente, para que este truco funcione como debiera, hay que poner el valor 1, cuando abramos un query de lectura y 0, cuando lo cerremos, a la propedad "Tag" del susodicho query.

TranEscribe lo usaría con el resto de los querys de actualización de datos, como es obvio. Lo ideal sería iniciar la transacción justamente antes de la sentencia que ejecuta el query y finalizarla inmediatamente después, a no ser que quieras ejecutar varios querys de actualización seguidos, que los podemos meter todos dentro del mismo bloque de la transacción.

Código Delphi [-]
 query1.SQL.Text := 'INSERT INTO CLIENTES (X, Y, Z) VALUES (1, 2, 3)';
 TranEscribe.StartTransaction;
 try
   query1.ExecSQL;
   TranEscribe.Commit;
 except
   TranEscribe.RollBack;
 end;

Venga, espero haberte ayudado en algo.

Un saludo
__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
Responder Con Cita
  #10  
Antiguo 29-10-2004
senpiterno senpiterno is offline
Miembro
 
Registrado: abr 2004
Posts: 112
Poder: 21
senpiterno Va por buen camino
Gracias por tu respuesta athlontado me ha servido de mucho, pero me queda una ultima duda, una transaccion de tipo solo lectura es una transaccion "SNAPSHOT"....

Saludos....



Responder Con Cita
  #11  
Antiguo 29-10-2004
athlontado athlontado is offline
Miembro
 
Registrado: sep 2004
Ubicación: Almázcara - León (España)
Posts: 63
Poder: 20
athlontado Va por buen camino
No necesariamente. Si tienes la transacción como read commited ó repeatable read, no.

El problema viene más del lado de los componentes que acceden a esos datos, que manejan una caché con los últimos registros traídos y que no se actualizan hasta que no sales del rango de registros almacenados en esa caché.

Para que te aclares un poco más, lee éste hilo.

Saludos.
__________________
Óscar Salvador Páez
Aprendiendo a aprehender de quienes aprehenden, sin cerciorarse de sus edades, culturas, sexos, razas, creencias u orígenes, es la forma más sabia de aprehender.
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 10:11:50.


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