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 16-08-2011
Jack Jack is offline
Miembro
 
Registrado: may 2003
Posts: 57
Poder: 22
Jack Va por buen camino
Firebird con Threads

Hola a todos. Estoy últimando una aplicación multihilo tipo servidor de ficheros.
Todo marcha bien al arrancar cada hilo de ejecución. La secuencia es la siguiente: crea basedatos, crea tabla, crea transacion, ejecuta selectsql y devuelve el resultado.
Cuando arranca un segundo hilo y el primer hilo no ha acabado, este segundo hilo se congela, justo en una de estas sentencias database.connected := true, transaction.starttransaction, tabla.active := true indistintamente. Es decir que cuando hago algún movimiento efectivo sobre firebird 1.5 el segundo hilo se cuelga, bueno la verdad es que se cuelgan todos los hilos.
He probado de todo, con variables de tipo FList, cambiando los componentes de los ibx a los UIB( decían en internet que estos eran los únicos thread-safe que existen ), cambiando el firebird 1.5 de superserver a classic y nunca he conseguido ningún resultado, siempre la congelación.
He leído algunos hilos del foro hablando del tema pero sin dar ninguna solución viable.
Si alguien puede dar alguna pista se agradecería.
Un saludo
Responder Con Cita
  #2  
Antiguo 17-08-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Pregunto:
No sera que firebird necesita hacer un Commit o un Commitretained para que se cierre la tabla ?.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 17-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Hola compañero Jack!

Primero, supongo que estás utilizando un componente de conexión, llamese TDatabase, distinto para cada hilo y en mejor manera, una copia para cada hilo de cada componente utilizado en la conexión. Si es así, entonces el problema está en la biblioteca cliente de Firebird (fbclient.dll). Tengo entendido que esta biblioteca no soporta multi hilos hasta la versión 2.5 de Firebird.

Si es posible, intenta hacer tus pruebas con una versión más reciente de la biblioteca cliente o en última instancia, con una versión más reciente del servidor Firebird.

Saludos,
Chirs
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 17-08-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Yo trabajo con múltiples Thread's en FB 2.1 sin problemas.

Tienes que asegurarte 100% de que tanto el TIBDatabase, como TIBTransaction y los TIBDataSet que utilices sean UNICOS e independientes para cada Thread. Se deben de crear en cada Thread que vayas a utilizar y se deben de liberar igualmente en cada Thread.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #5  
Antiguo 17-08-2011
Jack Jack is offline
Miembro
 
Registrado: may 2003
Posts: 57
Poder: 22
Jack Va por buen camino
Gracias a todos por responder.
Cambie la base de datos a la versión 2.5 y comprobé con varios tipos de modos de transacción. Obtuve los mismos resultados.
Para gluglu: he hecho exactamente lo que tu dices y lo único que he logrado es que se cuelgue la primer hilo y que arranque el segundo pero nunca los dos a la vez. Te agradecería un poco mas de información de como lo has podido resolver. Gracias de antemano. Un saludo. Jack
Responder Con Cita
  #6  
Antiguo 17-08-2011
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Por lo que indicas, no haga nada diferente a lo que tu haces, al menos en referencia a crear y eliminar, tanto la BBDD como la transacción como las tablas a utilizar dentro del Thread.

También debes de considerar otro tema muy importante : No puedes hacer ninguna operación con estos componentes que afecten a algo externo al Thread, m explico, no puedes intentar actualizar algo en pantalla o utilizar un dato obtenido en el thread con estos componentes, si no es a través del método Syncronize.

Indícame por favor cómo devuelves los datos que has obtenido dentro del Thread a tu aplicación principal, y a ver si podemos aclarar algo más.
__________________
Piensa siempre en positivo !
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
threads en dbExpress pborges36 Conexión con bases de datos 5 21-12-2010 16:18:47
Firebird AND Threads Abel Garcia Firebird e Interbase 21 19-03-2008 05:07:21
uso de threads JULIPO API de Windows 2 25-07-2007 16:09:06
Bloqueo Ibx Firebird AND threads Abel Garcia Firebird e Interbase 3 26-02-2007 14:02:27


La franja horaria es GMT +2. Ahora son las 09:06:01.


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