Tous,
J'ai un script qui interroge diverses bases de données à travers le monde. Ce script est planifié et automatisé. Autrement dit, il exécute ses opérations, enregistre toutes les tables, ferme JMP et la tâche est alors terminée.
Cependant, il arrive parfois qu'une ou deux bases de données soient indisponibles. Le serveur LDAP est hors service et refuse mon mot de passe, ou bien une opération de maintenance est en cours, etc.
Dans ce cas, j'obtiens une fenêtre contextuelle comme celle-ci :

Même si je suis présent lorsque cela se produit et que je clique sur « Annuler », le script se ferme sans se terminer.
J'ai une fonction qui extrait les données de la base de données, encapsulée dans un bloc try/catch. Cliquer manuellement sur le bouton « Annuler » ne semble pas résoudre le problème. Mais surtout, comment exécuter le script sans supervision dans ce cas ? Comment lui indiquer que s'il ne peut pas se connecter à une base de données, il doit continuer, extraire les données des autres et les traiter ? Comment éviter que le script ne s'interrompe simplement parce qu'une base de données ne répond pas ? Comment faire disparaître la fenêtre contextuelle et considérer l'erreur comme un échec, passer au bloc catch et poursuivre l'exécution du script ?
Voici la partie du script qui est responsable de cela :
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] ) );
);
Merci,
M.
Je me demande si l'exécution des requêtes en arrière-plan serait utile ? J'utilise souvent une méthode comme celle ci-dessous, avec une vérification de la validité des données renvoyées :
Exécutez les requêtes en arrière-plan, attendez leur achèvement, puis faites-y référence dans le reste du script JSL.