Ver Mensaje Individual
  #1  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Reputación: 21
Sick boy Va por buen camino
Mensaje de error extraño

Hola,

Hace 3 semanas que me estoy volviendo loco con un error en una base de datos Firebird 2.1. Uso Delphy 7 y MDO (Mercury Database Objects)

El error es:
Dynamic SQL ErrorSQL error code= -502 Invalid cursor declaration. Statement alreaady has a cursor XXXXXXX

Entiendo lo que dice el error, los componentes MDO me indican que se esta intentando redeclarar un cursor.

El cursor XXXXXXX esta creado hasta que cierras el programa, de modo que una vez que comienza el error, el numero XXXXXXX aparece varias veces en el error, aunque segun lo que hagas, pueden salir numeros diferentes. Lo que es seguro es que una vez da el error en un cursor, este no se libera, y continua dando errores.

Lo raro es que es:
1.- ALEATORIO. El error comienza a salir aproximadamente 45 minutos despues de comenzar a trabajar con la BBDD. No hay una sentencia en concreto que falla, puede fallar en cualquier sitio.
2.- Solo pasa en 1 base de datos, otras bases de datos iguales funcionan sin problemas.
3.- El programa que accede a la base de datos es el mismo, y llevaba 6 meses funcionando sin problemas.
4.- Si restauro la copia de seguridad en otro equipo, no consigo que aparezca el dichoso error.

El problema surgió del siguiente modo:
1.- Realicé un BackUp de la BBDD, version 2.0
2.- Desinstale Firebird 2.0 e instale 2.1 SuperServer
3.- Restauré la copia de seguridad.
4.- Arranque el programa e inicialmente estaba todo bien, ningun error en todo el proceso.
5.- Me conecté con el servidor via TCP para comprobar la conexion, y todo correcto.

Al dia siguiente, comenzó a salir este error.

He buscado y rebuscado, o no hay nada sobre el error, o son post muy antiguos.

¿Ha nadie le ha pasado????

He probado de todo (uno a uno y en este orden):
** backup y restore (ningun mensaje de error)
** Modifique el firebird.config, aumentando cached database pages a 8192
** gfix (todas las opciones que se ocurrieron, ningun error)
** Volcado de datos manual a una BBDD vacia y nueva (hice una aplicacion que lee los datos y los inserta mediante un query uno a uno, haciendo un commit cada X registros, luego ajusta los generadores y deja la BBDD clonada)

Como veis, no tengo ni idea de por donde atacar el problema

AYUDAAAAAAAAAAAAA, por favorrrrrrrrrrrrr

Quizas este equivocado, pero creo que el problema no esta en mi codigo, entiendo que de ser asi tendría problemas con todas las bases de datos, no solo con esta en concreto.

No se si via codigo hay alguna forma de "bordear" la excepcion, intentando que cuando salte el problema, los MDO utilicen el cursor existente, en lugar de intentar crearlo de nuevo.

Por otro lado, la numeracion de los cursores no es aleatoria????
Si es aleatoria, que mala suerte que mi programa intente declarar aleatoriamente siempre el mismo cursor, no se, es muy raro.

En algun sitio leí que era mejor cambiar los Tquery por TSQL, supongo que no hay mucha diferencia. Que pensais???

Por favor, ayuda, estoy desesperado.
Responder Con Cita