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-05-2003
LBriceno LBriceno is offline
Miembro
 
Registrado: may 2003
Ubicación: Viña del Mar, Chile
Posts: 21
Poder: 0
LBriceno Va por buen camino
IB6 y ADO (transacciones)

Hola nuevo foro:

Quisiera retomar un tema que quedó pendiente en los foros anteriores...

Les cuento nuevamente. tengo una aplicación en Delphi5, con ADO y me conecto a una BD MSSQL7. Convertí mi BD a IB6 y con la misma app. (mediante ADO) me conecto usando un provider Oledb, hasta aqui todo bien....

El problema surge con las transacciones que abre IB, transacciones implícitas, ya que no se como cerrarlas (aceptarlas o anularlas). No es que desde la app. abra una transacción, sino que es la manera de trabajar de IB, que para cada consulta (lectura, borrado o actualización) comienza implicitamente una transacción....

Estas transacciones producen el bloqueo de los registros cuando acceden varios usuarios a la BD, por lo que es imposible seguir trabajando....

Tengo la duda si para solucionar este problema (si es que se puede solucionar) se deba hacer algo en la app. o configurar la BD. En la BD tengo la opción AutoCommit (o algo asi), pero no estoy sefuro por donde vaya el problema, en realidad recién estoy comenzando en IB.

Cualquier ayuda, guia, luz, etc. se agradece enormemente...

SAludos
LBP
Responder Con Cita
  #2  
Antiguo 05-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Re: IB6 y ADO (transacciones)

Hola,

Cita:
Posteado originalmente por LBriceno
El problema surge con las transacciones que abre IB, transacciones implícitas, ya que no se como cerrarlas (aceptarlas o anularlas). No es que desde la app. abra una transacción, sino que es la manera de trabajar de IB, que para cada consulta (lectura, borrado o actualización) comienza implicitamente una transacción....
Es cierto que el servidor InterBase necesita estar dentro del contexto de una transacción para cualquier tipo de operación, incluidas las lecturas. Debe ser así para poder soportar la multiversión de registro, la llamada por Borland Aquitectura Multi-Generacional. Pero no es el servidor el que abre la transacción "implícita", es el propio cliente el que debe hacerlo. En tu caso serán los componentes ADO.

Cita:
Posteado originalmente por LBriceno
Estas transacciones producen el bloqueo de los registros cuando acceden varios usuarios a la BD, por lo que es imposible seguir trabajando....
¿producen un bloqueo, o producen un error de actualización de los datos?. Aunque no imposible, no es habitual ver un interbloqueo entre transacciones.

No utilizo ADO, pero me da la impresión que es un problema de cómo estás configurando los componentes ADO para acceder al servidor.

Saludos.
Responder Con Cita
  #3  
Antiguo 05-05-2003
LBriceno LBriceno is offline
Miembro
 
Registrado: may 2003
Ubicación: Viña del Mar, Chile
Posts: 21
Poder: 0
LBriceno Va por buen camino
Hola a todos:

Gracias Kinobi por contestar, siempre al rescate...

En realidad el problema que se presenta es un problema de actualización "deadlock-update conflicts with concurrent update", y este se produce cuando un usuario intenta modificar un registro
que fué modificado por otra aplicación, sin haber abierto desde la app. ninguna transacción, es decir, las transacciones que genera el servidor (arq. multigeneracional) no se cierran una vez realizados los cambios, o bien, cada conexión genera una transacción antes de siquiera leer algun registro.

Pregunta: ¿es necesario que las aplicaciones se conecten a la BD con distinto nombre de usuario?

Bueno a seguir machacando, o ¿son muy incompatibles ADO e IB?

Saludos y Gracias nuevamente...
Luis Briceño
Responder Con Cita
  #4  
Antiguo 05-05-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por LBriceno
En realidad el problema que se presenta es un problema de actualización "deadlock-update conflicts with concurrent update", y este se produce cuando un usuario intenta modificar un registro
que fué modificado por otra aplicación,
Bien, hasta ahora es el comportamiento normal que debe tener el servidor.

Cita:
Posteado originalmente por LBriceno
sin haber abierto desde la app. ninguna transacción,
¡Oh!, sí que la abre, sí; créeme.

Cita:
Posteado originalmente por LBriceno
es decir, las transacciones que genera el servidor (arq. multigeneracional)
Bueno, como te comenté antes, es el cliente el que arranca la transacción (a través de una llamada a la función del API: isc_start_transaction o isc_start_multiple), no el servidor. Cuando hablamos de transacciones implícitas, nos referimos a transacciones que arranca el cliente automáticamente. En tu caso a través de los componentes ADO.

Cita:
Posteado originalmente por LBriceno
no se cierran una vez realizados los cambios, o bien, cada conexión genera una transacción antes de siquiera leer algun registro.
Consejo: acostúmbrate a controlar tú explícitamente la apartura y cierre (commit o rollback) de las transacciones. En el caso concreto de ADO no sé cómo será, ya que no lo utilizo, pero con seguridad habrá algún método Start o StartTransaction y Commit y Rollback.

Cita:
Posteado originalmente por LBriceno
Pregunta: ¿es necesario que las aplicaciones se conecten a la BD con distinto nombre de usuario?
No, incluso desde una misma aplicación pueden abrirse varias conexiones contra el servidor utilizando el mismo user/password.

Saludos.
Responder Con Cita
  #5  
Antiguo 05-05-2003
Kafu Kafu is offline
Miembro
 
Registrado: may 2003
Ubicación: Bilbao
Posts: 117
Poder: 22
Kafu Va por buen camino
No he usado Ado contra Interbase, pero existe el método BeginTrans para el componente AdoConnection. Solía encerrar procesos que pudieran crear conflictos en bucles de reintentos con mensajes (esto a gusto del consumidor). Se intenta hacer un committrans y si no se puede, se hace un rollback y de nuevo a empezar. Siento lo poco preciso de mi comentario pero ya hace un tiempo que no lo hago y además fue con SQL-server, que es de Microsoft y supongo más compatible con Ado. No sé como se entenderán Interbase y ADO. Un saludo,
Responder Con Cita
  #6  
Antiguo 05-05-2003
LBriceno LBriceno is offline
Miembro
 
Registrado: may 2003
Ubicación: Viña del Mar, Chile
Posts: 21
Poder: 0
LBriceno Va por buen camino
Hola nuevamente:

Gracias por sus comentarios.

Con respecto a las transacciones que arranca el cliente mediante un llamado a la API de IB, ¿como las puedo manejar?, ya que no se registran en el ADoConnection, al verificarlo con la propiedad InTransaction, me indica que no he comenzado ninguna trans. (como cuando se utiliza el método BeginTrans).

He probado efectuar cualquier lectura (borrado o actualización) de algún registro dentro de una Trans. explícita (es decir usando beginTrans,CommitTrans, RollBackTrans), pero me arroja los mismos resultados...

he intentado enviarle el comando Commit a través de un ADOCommand, pero me arroja un error desconocido....

¿Puede ser un problema del Provider (configuración) que utilizo (IBOleDb de Oledb.net)?, quizás me falta algún parámetro o algo?????

Bueno, hay que seguir hincándole el diente
Gracias nuevamente
Luis Briceño
Responder Con Cita
  #7  
Antiguo 06-05-2003
LBriceno LBriceno is offline
Miembro
 
Registrado: may 2003
Ubicación: Viña del Mar, Chile
Posts: 21
Poder: 0
LBriceno Va por buen camino
Hola a todos:

Bueno, era lo que me esperaba..... He encontrado otros providers por la red y de momento hay un par que me soluciona este problema y hasta ahora funcionan bastante bien. Quizás debiera haber empezado por ahi.... ...

sin duda, valió la pena para aprender sobre el manejo de las transacciones y otras características de IB, que en realidad no sabia nada.... (gracias a unos documentos de mr. Kinobi)

Gracias nuevamente y estamos en contacto

Salud...os
Luis Briceño
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
Delphi 6 - ADO y Transacciones Anidadas unoccio Conexión con bases de datos 3 28-08-2007 05:23:34
DBGrid y Transacciones ADO Johnny Q Conexión con bases de datos 8 07-10-2005 22:53:10
ADO con Transacciones y BatchUpdate hgiacobone Tablas planas 0 09-05-2005 22:50:31
Ado y transacciones LucianoRey Conexión con bases de datos 6 15-04-2005 23:21:30
es bueno Ado para transaccion distribuida ? redlyon13 Conexión con bases de datos 1 22-05-2004 04:09:23


La franja horaria es GMT +2. Ahora son las 01:26:55.


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