Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2008
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Question Error con las transacciones

Buenos días a todos/as,
estoy teniendo problemas con las transacciones (o eso es lo que parece en un principio) que me genera una serie de errores en el sistema. A continuación explico la situación por si estuviera haciendo alguna cosa mal y me pueden ayudar a solucionarlo (o a alguien le ha pasado lo mismo alguna vez).

Utilizo Delphi 7 y tengo 3 bases de datos en Firebird y a las 3 accedo de la misma forma, con un TIBDatabase y un TIBTransaction. En el TIBTransaction tengo las propiedades "read_committed, rec_version, nowait".
La cuestión es que en algunos procesos inserto registro en 2 o 3 tablas diferentes, haciendo un Transaction.CommitRetaining después de ejecutar la consulta (INSERT o UPDATE). Pues en principio todo funciona correctamente pero al tiempo de utilizar la aplicación da error al hacer cualquier operación y hay que cerrar la aplicación y volver a abrirla y funciona correctamente de nuevo.
He probado a poner un Transaction.CommitRetaining y Transaction.Commit después de hacer todas las operaciones (al volver a la pantalla principal de la aplicación) pero sigo con el mismo problema.

Es decir, que no se si es por las transacciones que se quedan abiertas y cuando voy a hacer otro INSERT o UPDATE me da error o es por otro motivo. Si no me he sabido explicar muy bien pero bueno.

Muchas gracias de antemano y un saludo,
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #2  
Antiguo 11-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
al tiempo de utilizar la aplicación da error
¿Qué error?
Si es Deadlock, puede que sea de transacciones.

Hay más de una conexión a cada base de datos o solo tienes un ejecutable funcionando?

Si haces Commit o CommitRetaining después de cada insert/update/delete, es difícil que tengas errores de transacción. (A menos que haya más de una aplicación accediendo a la base de datos)
Responder Con Cita
  #3  
Antiguo 11-04-2008
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
La aplicación se ejecuta en varios ordenadores a la vez. Y el error que da no se el porque, las consultas las tengo en un try y en el except muestro un formulario que he hecho yo para mostrar mensajes.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #4  
Antiguo 11-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Cita:
Cita:
al tiempo de utilizar la aplicación da error
¿Qué error?
Me refiero al mensaje de error. Al texto del error.
En el bloque try ... except haz lo siguiente para ver el texto del error:
Código Delphi [-]
...
  {ejecutar insert/update/delete}
  with Q do
  begin
     try
        if not Transaction.InTransaction then Transaction.StartTransaction;
        ...
        ExcecQuery;
        Transaction.CommitRetaining;
     except
        on e:exception do : ShowMessage('Error al ejecutar insert/update/delete. '+#13+e.Message);
   end;
...
Responder Con Cita
  #5  
Antiguo 11-04-2008
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
Muchas gracias, voy a probarlo y en cuanto sepa algo ya lo comunico a ver que tal.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #6  
Antiguo 11-04-2008
Avatar de weke
weke weke is offline
Miembro
 
Registrado: may 2004
Ubicación: Valencia
Posts: 170
Poder: 20
weke Va por buen camino
He probado lo que me dijiste pero no he podido ver el error porque es una aplicación que está en fábrica y no estoy todo el día encima para poder verlo, pero me ha dado errores al hacer consultas simples (SELECT * FROM X). No se si tendría que poner algo antes de realizar estas consultas para evitar este error (comprobar que no haya ninguna transacción abierta o algo así).

Seguiré investigando cosas a ver si puedo ver el error exacto que me da en el TRY para ponerlo aquí.
__________________
De lo bueno lo mejor, de lo mejor lo superior.
Responder Con Cita
  #7  
Antiguo 12-04-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Podrías guardar el texto del error en un fichero.
Deberías guardar la fecha y hora, el texto del error y quizás alguna otra información, como el sql que ha generado el error o los parámetros que le has puesto.
Puede ser que le envíes parametros fuera de ranco o que si construyes el where te quede algo mal.

Por ejemplo
Código Delphi [-]
var
   s:string;
begin
   s := 'select campo from tabla where id='+edit1.text;
...

Si edit1.text es vacío, el sql será
Código SQL [-]
select campo from tabla where id=
y dirá que la sentencia SQL está incompleta o algo asi
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
Muchas transacciones al mismo tiempo error muli Firebird e Interbase 9 11-04-2008 02:06:49
transacciones. nazly Varios 4 13-06-2006 20:29:58
error en manejo de transacciones JODELSA Varios 1 11-07-2005 16:50:56


La franja horaria es GMT +2. Ahora son las 11:19:37.


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