Error en Power Builder 10

"An error occured but could not retrieve the error text due to a failure in the error handler".
Lenguaje de Programación: Sybase PowerBuilder Enterprise Versión 10.2.0 Build 8075.
DataBase Mangement System: Microsoft SQL Server 2000.
Sistema Operativo: Windows 2000 basado en tecnología NT
Con Server Pack 4
Conexión vía: OLE DB
Driver de SQL Server utilizado: sql server native client version 2005.90.1399.00
sql server version 2005.85.1117.00
Usando procedimientos almacenados y haciendo connect y disconnect cada vez que se va a ejecutar un procedimiento almacenado desde el código de PowerBuilder o cuando se va a hacer retrieve a un datawindow.
Los procedimientos almacenados pueden ser de SELECT, INSERT, UPDATE o DELETE a la base de datos.
El error aparece sólo en ocasiones.
Es aleatorio y aparece a veces si y otras no en diferentes secciones del código.
Ricardo Ibarra

2 Respuestas

Respuesta
1
¿Cuál es el status?
Crees conveniente que te siga apoyando en esto o por favor CIERRAS LA PREGUNTA con la evaluación que creas conveniente.
Ya encontré la respuesta. Nada más le cambiamos a las PC's el lenguaje a Inglés(estados Unidos) en la Configuración Regional y ya no aparece el "An error occured but could not retrieve the error text due to a failure in the error handler", ahora aparece el error tal cual debe ser.
Saludos.
Entonces, puedes CERRAR LA PREGUNTA pf. Con la evaluación que creas conveniente.
Aquí mismo evalúa y cierra la pregunta pf.
Ricardo, no puedo darte una respuesta tan precisa como tu pregunta, sin embargo, te voy a sugerir lo que yo haría en primera instancia:
Correr el procedimiento almacenado desde la herramienta de interacción con la base de datos (en algunos casos isql, wisql, en el caso de ASE sql advantage), NO desde PB, INTENTANDO REPRODUCIR las condiciones en que has detectado en que se genera el error, en el caso de sql advantage, éste siempre tiene la capacidad de recuperar el texto del error generado por la base de datos, esto te permitirá detectar dicho error y tratar de solucionarlo para que ya no se genere desde la corrida de PB, ya que parece clara la incapacidad del driver o el tipo de conexión para tomar el error, realmente no tengo idea del porque el error no es captado (yo siempre hago los llamados a procedimientos almacenados con la conexión estándar de PB sqlca usando librerías nativas y cualquier error generado es captado por PB), pero parece también claro que el error se está generando desde la base de datos al momento de ejecutar el procedimiento almacenado, ¿por qué? ¿El usuario tiene derechos?, ¿Intento de insertar llaves duplicadas?, ¿Intento de actualizar datos numéricos con operaciones que generan más decimales de los que puede recibir el tipo de dato? etc, etc, etc.
Espero que esto te sirva para resolver tu problema, si te puedo apoyar en algo más escribe de nuevo, me gustaría cerrar la pregunta hasta que soluciones tu problema y saber cual fue la mecánica de solución.
Un Saludo,
Horacio
--- PB v9, ASE v12, ASA ---
Realmente no sucede cuando ejecuto algún store procedure en especial, este error aparece en varios puntos del código de Power Builder y no es siempre, es de vez en cuando y es por eso que no puedo reproducir el error con un debug.
He tenido algunos reportes acerca de la versión 10, desafortunadamente yo uso la 9 y no me he enfrentado a este caso ni puedo reproducir el error, lo único que se me ocurre es buscar algún parche para esta versión.
Si logras obtener una solución me gustaría conocerla, para tal caso voy a dejar abierta la pregunta unos días más, después te pido de favor CERRAR LA PREGUNTA de acuerdo con la valoración que creas conveniente.
¿Tendrán algo que ver el CommandTimeout o el Timeout?
** CommandTimeout database parameter **
Description
Specifies the number of seconds the interface should wait for a command to execute.
When to specify CommandTimeout You must specify a value for CommandTimeout before connecting to the database.
Applies to ADO.NET
Syntax CommandTimeout = value
Parameter Description
value The number of seconds the interface waits for a command to execute.
Default None
Usage The default value for the CommandTimeout parameter is driver-specific.
Examples:
To set the CommandTimeout value to wait 60 seconds for a command to execute:
· Database profile Type 60 in the Command Timeout box on the System tab in the Database Profile Setup dialog box.
· Application Type the following in code:
SQLCA.DBParm = "CommandTimeout=60"
***** Timeout database parameter *****
Description
Specifies the number of seconds the interface should wait for a connection to the data provider to complete.
When to specify TimeOut You must specify a value for TimeOut before connecting to the database.
Applies to
ADO.NET
OLE DB
Syntax TimeOut = value
Parameter Description
value The number of seconds the interface waits for a connection to complete.
Default None
Usage The default value for the TimeOut parameter is driver-specific.
Examples:
To set the TimeOut value to wait 10 seconds for a connection to complete:
· Database profile Type 10 in the Timeout box on the System tab in the Database Profile Setup dialog box.
· Application Type the following in code:
SQLCA.DBParm = "TimeOut=10"
Es bastante probable que si, he visto algunas aplicaciones tronar frecuentemente por esta configuración, es claro que si el procedimiento, select, insert, updete, delete se tarda más de los 10 segundos, lo cual puede suceder con mucha frecuencia debido a diferentes razones, haga que la aplicación termine.
En lo particular manejaría este valor sin tiempo de tal suerte que cualquier sentencia pueda concluir sin ningún obstáculo.
Puedes hacer una prueba desactivando este parámetro por un día o más, para ver cual es el comportamiento.
De hecho ya estamos haciendo la prueba porque no teníamos ese parámetro activado, estaba desactivado en la conexión a la BD y el parámetro que estamos manejando es el
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='"+SQLCA.ServerName+ "', PROVIDERSTRING='DataBase="+SQLCA.Database+"', BLACK=1,CommandTimeout=5"
y generando un log de errores al debuguearlo. Lo estamos haciendo en este momento.
Espero tu respuesta
Ricardo Ibarra
Monterrey, N.L.
8150-0089
Supongo que el CommandTimeout se mide en segundos, aquí veo que lo tienen en 5, lo cual me parece muy poco.
Ahora que si estaba desactivado es seguro que no hubiera ninguna limitante en cuanto al tiempo. ¿Podrías checar esto? o hay algún default si no se activa?, en caso contrario pues configura este parámetro con un valor los suficientemente alto.
Pero si lo configuro con un tiempo alto ¿no crees que se tardará mucho y hará más lento el sistema?
RI
Por supuesto que no lo va a hacer más lento, este parámetro simplemente es el tiempo que le da para terminar el proceso, si no lo termina en ese periodo lo finaliza automáticamente.
Por otro lado podrías correr el proceso (sentencia sql (insert, update, select, delete o procedimiento almacenado)) desde el cliente de la base de datos, es decir fuera de PB para probar si ejecutando independientemente los procesos terminan sin problema.
Respuesta
-2
Lamentablemente no te puedo ayudar porque no he trabajado con power builder 10.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas