Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Es posible dos transacciones simultanes? (https://www.clubdelphi.com/foros/showthread.php?t=28107)

Patricio 09-12-2005 13:32:33

Es posible dos transacciones simultanes?
 
Hola foro tengo una pequeña consulta. trabajo con Delphi5 e IB6 server. Si tengo dos tabla A y B, que no tienen entre si, relacion alguna.

si de pronto un usuario quiere agregar registros a la tabla A, se comienza una Transaccion para ello, ahora si en ese momento otro usuario quiere agregar un registro en la tabla B, va a tener que esperar hasta que el A termine o se puede hacer algo para tener transacciones simultaneas.

Espero me haya podido explicar saludos para todos

__hector 09-12-2005 15:25:42

Interbase tiene una estructura muy particular, transacciones multigeneracionales, que no te impiden el hacer lo que deseas, pues los bloqueos de pagina nunca se producen (hasta donde recuerdo).

jachguate 09-12-2005 15:34:04

Eso es perfectamente posible. De hecho, si usas un conjunto de componentes que lo soporte (IBX, IBO, MDO, etc) podrías tener mas de una transacción dentro de una sola conexión...

Y si, hector, en interbase (desde que yo lo conozco, 5.x) los bloqueos son a nivel de registro y no de página, además que gracias a la arquitectura multigeneracional, las transacciones de escritura nunca bloquean a las transacciones de lectura.

Hasta luego.

;)

Patricio 09-12-2005 15:50:03

que me recomiendan- codigo o los componentes
 
y para lograrlo que es mejor usar, los componentes de la solapa de interbase o a traves de codigo tambien se puede hacer?
Saludos

jachguate 10-12-2005 03:14:05

Podes hacerlo con los componentes de tu preferencia: IBX, IBO, FIB, BDE, ADO, etc.

Saludos.

Patricio 12-12-2005 12:48:19

Gracias Jachguate por tu respuesta

Ahora, de los componentes que me nombras yo tengo solamente una solapa que dice INTERBASE, esa me sirve? o me tengo que descargar los componentes que me decis.
Disculpa que te siga preguntando pero segun tu experiencia cual me recomendas, yo tengo delphi 5 e Interbase 6.

Y cual de ellos si cambio de version funciona normalmente?

Saludos y gracias

Fita 12-12-2005 17:10:25

Hola Patricio...

Como se cita más arriba, Interbase puede manejar varias transacciones al mismo tiempo. Lo que debes hacer es asignar una transaccion a cada tabla, lo demás lo maneja Interbase, además al tener varias transacciones es más rápido. Yo uso los componentes de la paleta Interbase que vienen con Delphi

Espero te sirva de algo..

Saludos

jachguate 12-12-2005 19:15:22

Cita:

Empezado por Patricio
Gracias Jachguate por tu respuesta

Ahora, de los componentes que me nombras yo tengo solamente una solapa que dice INTERBASE, esa me sirve? o me tengo que descargar los componentes que me decis.
Disculpa que te siga preguntando pero segun tu experiencia cual me recomendas, yo tengo delphi 5 e Interbase 6.

Una recomendación depende de si queres gastar alguna plata en comprar componentes (en cuyo caso IBO me parece la mejor opción) o si queres usar componentes gratuitos: (MDO tiene buena cara, si no, pues están IBX que ya has pagado con delphi) o como última opción el BDE, que aún cuando está sin actualizaciones desde hace mucho tiempo (y así permanecerá) también es cierto que saca el trabajo de una manera mas o menos decente.

En algunos (como IBX y MDO) el manejo de las transacciones es explícito, mediante un componente TxxTransaction (TIBTransaction, TMdoTransaction) y en otros (como el BDE o IBO) el manejo es mas automático.

Hasta luego.

;)

Patricio 13-12-2005 13:36:15

Un poco perdido
 
bueno me decidi por usar los componentes de la solapa de Interbase, ahora donde puedo encontrar ejemplos de como usar estos componentes?

lo que si estoy medio perdido para arrancar usando estos componentes

yo antes tengo un ModuloDatos, en donde tengo las tablas y la base de datos en si y cuando quiero agregar o modificar hago lo siguiente:

FModuloDatos.Basededatos.StartTransaction;
Modificotodo;
FModuloDatos.Basededatos.Commit;

como seria esto mismo con los componentes de la solapa de Interbase?
Saludos espero poder explicarme pero estoy cazando la idea de los componentes

Patricio 13-12-2005 14:57:02

He mirado un poco y lo que yo necesitaria tener puede ser esto:

Un IBDataBase relacionado con mi base de datos que es el que van a hacer referencia los IBTransaction

y un IBTransaction por cada una de las tablas que tengo

cuando voy a insertar a las tablas directamente trabajo con la transaccion relacionada a dicha tabla. Esto es asi?

jachguate 14-12-2005 01:45:19

Cita:

Empezado por Patricio
He mirado un poco y lo que yo necesitaria tener puede ser esto:

Un IBDataBase relacionado con mi base de datos que es el que van a hacer referencia los IBTransaction

y un IBTransaction por cada una de las tablas que tengo

cuando voy a insertar a las tablas directamente trabajo con la transaccion relacionada a dicha tabla. Esto es asi?

No veo necesidad para tener tantos IBTransaction. De hecho, no tendría sentido si queres tener actualizaciones que involucren varias tablas dentro de una sola transacción, que es lo típico.

Podrías tener una sola transacción en toda la aplicación, o dividirla en secciones "funcionales" de acuerdo al manejo de los querys, dado que con IBX los datasets se cerrarán al realizar un commit o rollback en la transacción.

Hasta luego.

;)

Patricio 14-12-2005 12:51:31

Sigo en Problemas
 
lo que pasa es que yo tengo que agregar los datos de una empresa y a la misma agregarle en otra tabla todas las direcciones y en otra tabla todos los telefonos.

Entonces como no quiero usar tablas auxialiares mi idea era que cuando se agregar las direcciones tener una transaccion para eso, cuando se agregan los telefonos tener otra transaccion y cuando los datos de la empresa otra transaccion, porque si el usuario cancela el ingreso de la empresa, tengo que volver a atras lo que se ingreso en la tabla de Telefonos y Direcciones. No se si me explico bien.

Hice algo asi pero no me dio resultado

cuando se fue a agregar una direccion hice
IBTransactionDireccion.StartTransaction
....

y cuando me dio el ok con los datos de la empresa hice
IBTransactionEmpresa.StartTransaction
....
IBTransactionEmpresa.Commit
IBTransactionDireccion.Commit //ahi confirmo luego que se dio el ok en la empresa

pero obviamente me dio error, cual seria la mejor manera de hacer lo que quiero?

Saludos

jachguate 14-12-2005 18:41:48

El modelo de transacciones que uses tiene mucho que ver con el diseño "funcional" de tu aplicación.

Lo que no te recomiendo es que uses transacciones separadas, por ejemplo, para insertar un encabezado de factura y sus detalles, pues si ocurre un error al insertar un detalle y has dado commit a la transacción del encabezado, ocurrirá que se quede un encabezado sin detalle, y estarías como volviendo a la edad de piedra, perdiendo la acidez de las transacciones.

Saludos.


La franja horaria es GMT +2. Ahora son las 21:48:53.

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