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: 22
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
  #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
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
  #3  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
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
  #4  
Antiguo 12-12-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

A raíz de este mensaje me entero que existe, al menos en Firebird e InterBase, una sentencia SQL llamada Declare Cursor (me pregunto si tendrá que ver con las recientemente mencionadas tablas temporales).

Según se desprende del mensaje de error, es como si se estuviera ejecutando dos veces un mismo Declare Cursor sin un Close entre uno y otro:

Código SQL [-]
Declare MiCursor Cursor For Select...
...
Close MiCursor  -- (como si esta sentencia SQL no fuese ejecutada)
...
Declare MiCursor Cursor For Select...

Algo que puedes hacer es buscar ese tipo de sentencias SQL en los fuentes de MDO, y seguirles la pista con el depurador. A ver cuándo se lanza el Declare y cuando se lanza el Close. No conozco los MDO, pero, considerando que son relativamente populares, quizá hagas algo mal desde tu programa, omitiéndose alguno de esos cierres de cursor.

Claro, esto mismo puede estar ocurriendo dentro de los disparadores y procedimientos almacenados, si es que dentro de ellos hay sentencias para creación, manejo y cierre de cursores.

En conclusión, es probable que se esté omitiendo uno de esos Close por algún descuido en el código de tu programa o en el código de los disparadores y SPs. La razón por la que esto ocurre tan azarosamente puede residir en alguna condición que, por no cumplirse, impida entrar al bloque de código o llamar a la rutina donde se ejecuta el cierre, o por algún error (excepción) previo no bien manejado que interrumpa la ejecución normal del programa.

Espero logres solucionarlo, apóyate en el depurador de oro de Delphi y échale un vistazo a las rutinas internas de la base de datos.

No dejes de comentarnos.

Al González.

Última edición por Al González fecha: 12-12-2008 a las 18:55:18.
Responder Con Cita
  #5  
Antiguo 12-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Hola AI, gracias por tu aporte.

Cita:
Algo que puedes hacer es buscar ese tipo de sentencias SQL en los fuentes de MDO, y seguirles la pista con el depurador. A ver cuándo se lanza el Declare y cuando se lanza el Close. No conozco los MDO, pero, considerando que son relativamente populares, quizá hagas algo mal desde tu programa, omitiéndose alguno de esos cierres de cursor.
Tengo localizados todos los puntos por donde pasa el programa cuando se produce el error.
Es totalmente aleatorio, pero si repaso, veo que las funciones que más se usan son las que más errores provocan.

Pongo el trazado por si veis mas que yo
El numero (1463 TMDOTransaction.Call) indica la linea donde se produce el error. Ahora mismo no tengo a mano el contenido de esa linea, pero lo pondré mañana.
Código SQL [-]
exception class   : EMDOFirebirdError

exception message : Dynamic SQL ErrorSQL error code = -502Invalid cursor declaration
Statement already has a cursor 11249867 assigned.



main thread ($724):

005048cb programa.exe MDO               390 MDODataBaseError

00511d5f programa.exe MDODatabase      1463 TMDOTransaction.Call

0050bb4e programa.exe MDOSQL           1932 TMDOSQL.Call

0050bdcc programa.exe MDOSQL           2014 TMDOSQL.ExecQuery

00518061 programa.exe MDOCustomDataSet 2335 Add_Node

00518161 programa.exe MDOCustomDataSet 2359 Has_COMPUTED_BLR

005186f2 programa.exe MDOCustomDataSet 2531 TMDOCustomDataSet.InternalInitFieldDefs

005195c0 programa.exe MDOCustomDataSet 2890 TMDOCustomDataSet.InternalPrepare

0051c741 programa.exe MDOQuery          261 TMDOQuery.PrepareSQL

0051cef2 programa.exe MDOQuery          452 TMDOQuery.SetPrepared

0051c6f0 programa.exe MDOQuery          241 TMDOQuery.InternalOpen

00500021 programa.exe DB                    TDataSet.DoInternalOpen

005000da programa.exe DB                    TDataSet.OpenCursor

004fff95 programa.exe DB                    TDataSet.SetActive

004ffde0 programa.exe DB                    TDataSet.Open

008c2b63 programa.exe Unit3             860 TForm3.select_clientes

008c2960 programa.exe Unit3             816 TForm3.Timer1Timer



********************************************************************************



exception class   : EMDOFirebirdError

exception message : Dynamic SQL ErrorSQL error code = -502Invalid cursor declaration
Statement already has a cursor 19377446 assigned.



main thread ($724):

005048cb programa.exe MDO               390 MDODataBaseError

00511d5f programa.exe MDODatabase      1463 TMDOTransaction.Call

0050bb4e programa.exe MDOSQL           1932 TMDOSQL.Call

0050bdcc programa.exe MDOSQL           2014 TMDOSQL.ExecQuery

00518061 programa.exe MDOCustomDataSet 2335 Add_Node

00518161 programa.exe MDOCustomDataSet 2359 Has_COMPUTED_BLR

005186f2 programa.exe MDOCustomDataSet 2531 TMDOCustomDataSet.InternalInitFieldDefs

005195c0 programa.exe MDOCustomDataSet 2890 TMDOCustomDataSet.InternalPrepare

0051c741 programa.exe MDOQuery          261 TMDOQuery.PrepareSQL

0051cef2 programa.exe MDOQuery          452 TMDOQuery.SetPrepared

0051c6f0 programa.exe MDOQuery          241 TMDOQuery.InternalOpen

00500021 programa.exe DB                    TDataSet.DoInternalOpen

005000da programa.exe DB                    TDataSet.OpenCursor

004fff95 programa.exe DB                    TDataSet.SetActive

004ffde0 programa.exe DB                    TDataSet.Open

008f1386 programa.exe Unit2            7984 TForm2.buscar_cliente



********************************************************************************



exception class   : EMDOFirebirdError

exception message : Dynamic SQL ErrorSQL error code = -502Invalid cursor declaration
Statement already has a cursor 19377446 assigned.



main thread ($724):

005048cb programa.exe MDO               390 MDODataBaseError

00511d5f programa.exe MDODatabase      1463 TMDOTransaction.Call

0050bb4e programa.exe MDOSQL           1932 TMDOSQL.Call

0050bdcc programa.exe MDOSQL           2014 TMDOSQL.ExecQuery

00518e37 programa.exe MDOCustomDataSet 2684 TMDOCustomDataSet.InternalOpen

0051c713 programa.exe MDOQuery          245 TMDOQuery.InternalOpen

00500021 programa.exe DB                    TDataSet.DoInternalOpen

005000da programa.exe DB                    TDataSet.OpenCursor

004fff95 programa.exe DB                    TDataSet.SetActive

004ffde0 programa.exe DB                    TDataSet.Open

008e28d8 programa.exe Unit2            4950 TForm2.familias





********************************************************************************



exception class   : EMDOFirebirdError

exception message : Dynamic SQL ErrorSQL error code = -502Invalid cursor declaration
Statement already has a cursor 17264469 assigned.



main thread ($ffc):

005048cb programa.exe MDO               390 MDODataBaseError

00511d5f programa.exe MDODatabase      1463 TMDOTransaction.Call

0050bb4e programa.exe MDOSQL           1932 TMDOSQL.Call

0050bdcc programa.exe MDOSQL           2014 TMDOSQL.ExecQuery

00518e37 programa.exe MDOCustomDataSet 2684 TMDOCustomDataSet.InternalOpen

0051c713 programa.exe MDOQuery          245 TMDOQuery.InternalOpen

00500021 programa.exe DB                    TDataSet.DoInternalOpen

005000da programa.exe DB                    TDataSet.OpenCursor

004fff95 programa.exe DB                    TDataSet.SetActive

004ffde0 programa.exe DB                    TDataSet.Open

007c7fa4 programa.exe Unit14            199 TForm14.FormShow



********************************************************************************



exception class   : EMDOFirebirdError

exception message : Dynamic SQL ErrorSQL error code = -502Invalid cursor declaration
Statement already has a cursor 18422997 assigned.



main thread ($ffc):

005048cb programa.exe MDO               390 MDODataBaseError

00511d5f programa.exe MDODatabase      1463 TMDOTransaction.Call

0050bb4e programa.exe MDOSQL           1932 TMDOSQL.Call

0050bdcc programa.exe MDOSQL           2014 TMDOSQL.ExecQuery

00518061 programa.exe MDOCustomDataSet 2335 Add_Node

00518161 programa.exe MDOCustomDataSet 2359 Has_COMPUTED_BLR

005186f2 programa.exe MDOCustomDataSet 2531 TMDOCustomDataSet.InternalInitFieldDefs

005195c0 programa.exe MDOCustomDataSet 2890 TMDOCustomDataSet.InternalPrepare

0051c741 programa.exe MDOQuery          261 TMDOQuery.PrepareSQL

0051cef2 programa.exe MDOQuery          452 TMDOQuery.SetPrepared

0051c6f0 programa.exe MDOQuery          241 TMDOQuery.InternalOpen

00500021 programa.exe DB                    TDataSet.DoInternalOpen

005000da programa.exe DB                    TDataSet.OpenCursor

004fff95 programa.exe DB                    TDataSet.SetActive

004ffde0 programa.exe DB                    TDataSet.Open

008c210d programa.exe Unit3             689 TForm3.Edit16Change



*************************************************************************************

Tengo el codigo fuente de los MDO, con la linea a la que hace referencia. Si puede servir para algo lo posteo.

El problema al tratar de depurar, es que esos mismos procedimientos funcionan bien en otros equipos, incluso en el equipo ahora afectado llevaba 6 meses funcionando sin ningun problema.

Incluso con la base de datos que da este error, estos procedimientos funcionan bien la mayoria de las veces, pero en ocasiones (cada hora de trabajo o más) empieza a dar fallos.

Algunos de los forms del informe nunca se destruyen, otros se crean en ejecucion. Algunas de las querys que han dado error funcionan sin problemas desde hace años.

No es que no pueda haber un error en mi codigo, solo que es muy raro, y parece haberse propagado por todas partes.

Los MDO llevo 2 años usandolos sin problemas hasta ahora.

Última edición por Sick boy fecha: 12-12-2008 a las 22:09:56.
Responder Con Cita
  #6  
Antiguo 13-12-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Ojalá me equivoque pero... que yo sepa MDO lleva más de 1 año o 2 sin actualizarse, así que podría tratarse de no ser compatible con Firebird 2.

En un programa de prueba, con Firebird 1.5 funcionaba de lujo, con Firebird 2, me empezaba a dar errores de la API del motor .

Yo elegí MDO porque estaban más avanzados que ZEOS en aquel momento, pero ahora ZEOS sigue actualizándose mientras que MDO se quedó estancado.

Lamento dar este punto de vista pesimista... pero en fin, es mi opinión.

Saludos y suerte
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 13-12-2008
Sick boy Sick boy is offline
Miembro
 
Registrado: may 2003
Ubicación: Cantabria
Posts: 245
Poder: 22
Sick boy Va por buen camino
Hola Lepe,

Si, es cierto que MDO lleva tiempo parado, bastante tiempo, y no parece que vaya a arrancar de nuevo.
Acabo de revisar su web, parece que yo empece a trabajar con ellos justo cuando dejaron de actualizarlos

Hasta ahora, me ha funcionado desde la 1.5 hasta la 2.1 sin ningun problema (bueno, salvo esto).

Tras documentarme un poco más sobre ADO (solo habia hecho algo hace años para acces) no creo que sea la opcion que escoja si cambio de componentes.

ZEOS son muy usados, y como dices, siguen actualizandose.
Si cambiase los MDO probablemente fuera por los ZEOS.

Una cosa de los ZEOS, por lo que he visto, no tienen componente para las transacciones, ni un dataset como el de MDO (aunque se puede suplir con un query y un updatequery).
Las transacciones las gestiona automatico??
Cambia mucho la forma de trabajo con ZEOS??

Voy a repasar mi codigo y estudiar un poco del codigo de los MDO y pongo lo que encuentre.

gracias por vuestra ayuda.

Última edición por Sick boy fecha: 13-12-2008 a las 11:44:42.
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 04:55:23.


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