Statut de la requête exécutée au premier planEst-il possible d'informer l'utilisateur de l'état d'une requête exécutée au premier plan à l'aide de JSL ? J'ai une requête SQL qui prend des heures à s'exécuter et le script doit fonctionner sur la table après son ouverture, je ne peux donc pas l'exécuter en arrière-plan.
Actuellement, j'utilise Open Database() :
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" )
Re : Statut de la requête exécutée au premier planMerci Éric,
Diviser le script pour l'exécuter à partir de la requête demandera un peu de travail, mais il semble que cela fera le travail.
Re : Statut de la requête exécutée au premier planHé, eh bien,
Il n'existe aucun moyen de mettre à jour l'état d'une requête de premier plan, car la requête bloque le thread principal de JMP, ce qui fait que JMP ne peut vraiment rien faire pendant son exécution.
La solution de contournement que je suggérerais serait d'utiliser Query Builder pour créer votre requête (en utilisant Custom SQL si vous disposez déjà du SQL que vous souhaitez exécuter), puis d'enregistrer la requête sous forme de fichier. Supposons qu'il soit nommé "oneMillionRows.jmpquery" sur le disque.
Ensuite, écrivez un script comme celui-ci :
query = include("oneMillionRows.jmpquery");
query << Run Background(
On Run Complete(
Write("\!NQuery is complete! Rows in result: ", NRows(queryResult));
)
);
Quel que soit le JSL que vous souhaitez exécuter une fois la requête terminée, vous pouvez le placer dans le En cours d'exécution terminé paramètre à Exécuter l'arrière-plan() . JMP sera donc toujours utilisable pendant l'exécution de la requête. L'utilisateur pourrait utiliser Affichage > Exécution de requêtes pour voir les progrès. Le fait qu'il y ait ou non beaucoup de progrès à signaler dépend du fait que la requête passe la plupart de son temps dans la phase d'exécution ou dans la phase de récupération des données. Nous ne recevons aucune mise à jour de la base de données pendant la phase d'exécution ; nous mettons simplement à jour le nombre de lignes récupérées au fur et à mesure que nous récupérons les données de la base de données après l'exécution de la requête.
Éric
Re : Statut de la requête exécutée au premier planSi le traitement de la requête elle-même prend beaucoup de temps, vous ne verrez pas de barre de progression tant que les données ne seront pas réellement lues. J'envoie un message à l'utilisateur avec la commande caption() pour au moins lui faire savoir que quelque chose se passe. Pour certaines applications, je peux estimer le temps que cela prendra et je l'inclurai dans le message. Le temps est relatif !
caption("Reading data, please be patient...");
wait(0);
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" );
caption(remove);
wait(0);
Re : Statut de la requête exécutée au premier planJe dois mentionner que ce qui précède concerne vraiment les requêtes en arrière-plan, désolé.Pour les requêtes au premier plan, il doit y avoir une barre de progression qui informe l'utilisateur du nombre d'enregistrements lus et empêche toute saisie ultérieure.
Brian
Re : Statut de la requête exécutée au premier planIl n'existe pas d'option JSL dédiée pour cela.Si l'interface utilisateur JMP est visible, vous pouvez toujours vérifier l'état d'une requête avec l'élément de menu Affichage->Exécution de requêtes. Dans JSL, vous pouvez également utiliser la commande du menu principal pour afficher la boîte de dialogue, comme :
Menu principal ("VUE : REQUÊTES EN EXÉCUTION");
Brian Corcoran
Développement JMP