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 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 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
  #2  
Antiguo 12-12-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, te doy algunas pistas a ver si por alla lo solucionas.

- usa refresh despues de las operaciones con la base de datos, o bien TQuery.Autorefresh a true (o equivalente)
- TQuery.UpdateMode a upWhereChanged (o equivalente con tus componentes)

o bien cambia a ADO: con los TQuery usuales me empezaron a salir estos errores por no usar refresh ni updates. Cambie a ADO, y desaparecieron todos . Saludos.
Responder Con Cita
  #3  
Antiguo 12-12-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
No repitas los mensajes
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #4  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
gracias, ahora empiezo a probar lo que me comentas, aunque tardaré casi un dia en saber si funciona.

Cita:
usa refresh despues de las operaciones con la base de datos, o bien TQuery.Autorefresh a true (o equivalente)
Supongo que te refieres a despues de ejecutar una sentencia de INSERCION/ACTUALIZACION, o tambien de un simple SELECT????

Mas informacion sobre como trabajo:
** Para datos que sean actualizables utilizo TDataSet, en muy contadas ocasiones uso TUpdateSQL para actualizar grids con Tquerys
** ForcedRefresh esta a FALSE en Datasets y Querys. Es el valor por defecto, y asi me funcionaba sin problemas.

Cita:
o bien cambia a ADO: con los TQuery usuales me empezaron a salir estos errores por no usar refresh ni updates. Cambie a ADO, y desaparecieron todos .
Hombre, un poco drastico, pero recojo tu sugerencia y la tendré en mente.
¿Alguno más piensa que debo sustituir los MDO???


Es más facil que me equivoque yo al programar, supongo que no es un bug de Firebird, pero, ¿no podria ser un error del archivo de la base de datos?? ¿o un problema de motor mal instalado?? ¿o un conflicto con algo instalado en su windows??
Responder Con Cita
  #5  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
Cita:
No repitas los mensajes
Gracias por el consejo, no lo repeti por gusto, el señor moderador puede borrar el que sobra.

Resulta que despues de enviar el post, el navegador no me devolvio la pagina del foro, sino que me envió para descargar un archivo .php de vuestro servidor

Pensaba que no se habia enviado nada, asi que di para atras y volvi a enviar, esta vez si que me mostró lo esperado.

Cuando me di cuenta de que habia 2 post, intenté borrar uno, pero no tengo permisos.

Te pido disculpas si te ha molestado.

Si tienes alguna sugerencia más que añadir..... a ser posible sobre mi problema..... gracias
Responder Con Cita
  #6  
Antiguo 12-12-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Cita:
...o tambien de un simple SELECT
si, tambien de un simple select. Ya te digo que al final lo cambie todo a ADO porque los problemas de recolocación del cursor saltaban cuando y como querian Debe haber una manera correcta de solucionarlos. Yo la desconozco aunque ya te digo que creo q va por el tema de update. Saludos.
Responder Con Cita
  #7  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 21
Sick boy Va por buen camino
gracias coso

Cita:
si, tambien de un simple select.
uffff, vaya desastre.... alguno más puede confirmar esto????

Cita:
Ya te digo que al final lo cambie todo a ADO porque los problemas de recolocación del cursor saltaban cuando y como querian
ADO es igual de rapido??

Hay que cambiar muchas cosas para pasar de MDO a ADO?? encontraste problemas durante el cambio?? las transacciones se gestionan igual??

¿por que surgen solo en uno de los clientes?? ¿¿ por que a mi no me sale el problema al restaurar la copia de seguridad??

Estoy totalmente perdido
Responder Con Cita
  #8  
Antiguo 12-12-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por Sick boy Ver Mensaje
Gracias por el consejo, no lo repeti por gusto, el señor moderador puede borrar el que sobra.

Resulta que despues de enviar el post, el navegador no me devolvio la pagina del foro, sino que me envió para descargar un archivo .php de vuestro servidor (...)
Ah, bueno, si fue eso pues nada. Lamento la intromisión. Es que hay gente que repite los mensajes cuando se tarda en contestar.

Respecto al tema, poco más que nuestros compañeros puedo decir. En Delphi casi siempre he utilizado el método clásico del TDataTable. Sí utilicé ADO una temporada y lo encontré algo confuso, no sabría decirte. Yo creo que deberías probarlo para que puedas comprobar por ti mismo cuál te es más cómodo y cuál es más adecuado a tu proyecto.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
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
Mensaje de error extraño Sick boy Firebird e Interbase 0 12-12-2008 11:22:26
Error Extraño SysAdminGCS Varios 1 18-08-2007 16:30:49
Error Extraño Esau SQL 4 17-06-2005 22:44:16
error extraño gilberto_1126 Varios 2 05-09-2004 01:01:01
Error Extraño Esau OOP 5 19-11-2003 18:01:32


La franja horaria es GMT +2. Ahora son las 07:04:03.


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