Todo,
Tengo un script que extrae información de varias bases de datos de todo el mundo. Este script está programado y automatizado. Es decir, realiza su función, guarda todas las tablas, cierra JMP y la tarea finaliza.
Sin embargo, de vez en cuando, una o dos bases de datos no responden. El servidor LDAP está caído y no acepta mi contraseña, o se está realizando algún mantenimiento de la base de datos, etc.
En este caso me aparece una ventana emergente como esta:

Aunque esté presente cuando esto sucede y haga clic en "Cancelar", el script finaliza sin completarse.
Tengo la función que extrae los datos de la base de datos encapsulada en un bloque try/catch; parece que no funciona cuando hago clic manualmente en el botón "Cancelar"... Pero, lo que es más importante, ¿cómo puedo ejecutar el script sin supervisión en este caso? ¿Cómo le indico que, si no puede conectarse a una de las bases de datos, continúe, extraiga los datos del resto y procese lo que tenga? No quiero que se bloquee todo el script solo porque una de las bases de datos no responde. ¿Cómo puedo eliminar esa ventana emergente y simplemente considerar que el try falló, pasar al bloque catch y continuar con el script?
Aquí está la parte del script responsable de esto:
DBPaths = [
"Server1" => "ODBC:DSN=...PORT=5432;",
"Server2" => "ODBC:DSN=...PORT=5432;",
"Server3" => "ODBC:DSN=...PORT=5432;",
"Server4" => "ODBC:DSN=...PORT=5432;",
"Server5" => "ODBC:DSN=...PORT=5432;"];
myQuery = Function( {serverDBPath, server},
New SQL Query(
Version( 130 ),
Connection( serverDBPath ),
QueryName( server ),
Select( ... ),
From( ... ),
Where( ... ),
PostQueryScript( ... )
) << Run Foreground()
);
myDTs = {};
For Each( {{server, DBPath}, index}, DBPaths,
Show( server, DBPath, index );
Try( myDTs[index] = myQuery( DBPath, server ), writeToLog( server || " Query error... Using: " || DBPath ||" Error message: "||exception_msg[1] ) );
);
Gracias,
METRO.
Me pregunto si ejecutar las consultas en segundo plano sería útil. Suelo usar un método como el siguiente, con una comprobación de que los datos devueltos sean válidos:
Ejecuta las consultas en segundo plano, espera a que finalicen y haz referencia a ellas en el resto del script JSL.