Ver Mensaje Individual
  #10  
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
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