FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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. |
#3
|
||||
|
||||
#4
|
|||
|
|||
gracias, ahora empiezo a probar lo que me comentas, aunque tardaré casi un dia en saber si funciona.
Cita:
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:
¿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?? |
#5
|
|||
|
|||
Cita:
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 |
#6
|
|||
|
|||
Cita:
|
#7
|
|||
|
|||
gracias coso
Cita:
Cita:
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 |
#8
|
||||
|
||||
Cita:
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. |
|
|
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 |
|