Stato della query in esecuzione in primo pianoÈ possibile aggiornare l'utente sullo stato di una query in esecuzione in primo piano utilizzando JSL? Ho una query SQL che richiede ore per essere eseguita e lo script deve funzionare sulla tabella dopo l'apertura, quindi non posso eseguirlo come query in background.
Attualmente sto utilizzando Open Database():
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" )
Ri: Stato della query in esecuzione in primo pianoGrazie Eric,
Dividere lo script per eseguirlo dalla query sarà un po' di lavoro, ma sembra che porterà a termine il lavoro.
Ri: Stato della query in esecuzione in primo pianoEhi, ehi,
Non esiste un modo per aggiornare lo stato da una query in primo piano, perché la query occupa il thread principale di JMP, quindi JMP non può fare nulla mentre è in esecuzione.
La soluzione alternativa che suggerirei sarebbe quella di utilizzare Query Builder per creare la query (utilizzando SQL personalizzato se si dispone già dell'SQL che si desidera eseguire) e quindi salvare la query come file. Supponiamo che sul disco sia stato denominato "oneMillionRows.jmpquery".
Quindi, scrivi uno script come questo:
query = include("oneMillionRows.jmpquery");
query << Run Background(
On Run Complete(
Write("\!NQuery is complete! Rows in result: ", NRows(queryResult));
)
);
Qualunque JSL che desideri eseguire dopo il completamento della query può essere inserito nel file In esecuzione completata parametro a Esegui sfondo() . Pertanto JMP sarà ancora utilizzabile mentre la query è in esecuzione. L'utente potrebbe utilizzare Visualizza > Esecuzione di query per vedere i progressi. Se ci saranno o meno molti progressi da segnalare dipende dal fatto che la query trascorra la maggior parte del tempo nella fase di esecuzione o nella fase di recupero dei dati. Non riceviamo alcun aggiornamento dal database durante la fase di esecuzione; aggiorniamo semplicemente il numero di righe recuperate mentre recuperiamo i dati dal database dopo l'esecuzione della query.
Eric
Ri: Stato della query in esecuzione in primo pianoSe l'elaborazione della query stessa richiede molto tempo, non vedrai una barra di avanzamento finché i dati non vengono effettivamente letti. Invio un messaggio all'utente con il comando caption() per fargli sapere almeno che sta succedendo qualcosa. Per alcune applicazioni posso stimare il tempo necessario e lo includerò nel messaggio. Il tempo è relativo!
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);
Ri: Stato della query in esecuzione in primo pianoDovrei menzionare quanto sopra è in realtà per domande di fondo, mi spiace.Per le query in primo piano, dovrebbe essere presente una barra di avanzamento che informa l'utente del numero di record letti e impedisce ulteriori input.
Brian
Ri: Stato della query in esecuzione in primo pianoNon esiste un'opzione JSL dedicata per questo.Se l'interfaccia utente di JMP è visibile, puoi sempre verificare lo stato di una query con la voce di menu Visualizza->Query in esecuzione. All'interno di JSL, puoi anche utilizzare il comando del menu principale per visualizzare la finestra di dialogo, come:
Menu principale("VISUALIZZA:QUERY IN ESECUZIONE");
Brian Corcoran
Sviluppo JMP