Estado de la consulta que se ejecuta en primer plano¿Es posible actualizar al usuario sobre el estado de una consulta que se ejecuta en primer plano utilizando JSL? Tengo una consulta SQL que tarda horas en ejecutarse y el script debe funcionar en la tabla después de abrirse, por lo que no puedo ejecutarlo como consulta en segundo plano.
Actualmente estoy usando Open Database():
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" )
Re: Estado de la consulta que se ejecuta en primer planoGracias eric,
Dividir el script para ejecutarlo desde la consulta será un poco complicado, pero parece que funcionará.
Re: Estado de la consulta que se ejecuta en primer planoOye, yo,
No hay una manera de actualizar el estado desde una consulta en primer plano, porque la consulta bloquea el hilo principal de JMP, por lo que JMP realmente no puede hacer nada mientras se está ejecutando.
La solución alternativa que sugeriría sería utilizar Query Builder para crear su consulta (usando SQL personalizado si ya tiene el SQL que desea ejecutar) y luego guardar la consulta como un archivo. Supongamos que se llama "oneMillionRows.jmpquery" en el disco.
Luego, escribe un guión como este:
query = include("oneMillionRows.jmpquery");
query << Run Background(
On Run Complete(
Write("\!NQuery is complete! Rows in result: ", NRows(queryResult));
)
);
Cualquier JSL que desee ejecutar después de que se complete la consulta puede ir en el En ejecución completa parámetro a Ejecutar en segundo plano() . Por lo tanto, JMP seguirá siendo utilizable mientras se ejecuta la consulta. El usuario podría utilizar Ver > Consultas en ejecución para ver el progreso. Si habrá o no mucho progreso que informar depende de si la consulta pasa la mayor parte del tiempo en la fase de ejecución o en la fase de recuperación de datos. No recibimos ninguna actualización de la base de datos durante la fase de ejecución; simplemente actualizamos el número de filas recuperadas a medida que recuperamos los datos de la base de datos después de que se ejecuta la consulta.
eric
Re: Estado de la consulta que se ejecuta en primer planoSi la consulta en sí tarda mucho en procesarse, no verá una barra de progreso hasta que se lean los datos. Le envío un mensaje al usuario con el comando caption() para al menos hacerle saber que algo está pasando. Para algunas aplicaciones puedo estimar el tiempo que tomará y lo incluiré en el mensaje. ¡El tiempo es 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);
Re: Estado de la consulta que se ejecuta en primer planoDebo mencionar que lo anterior es realmente para consultas en segundo plano, lo siento.Para consultas en primer plano, debe haber una barra de progreso que informe al usuario la cantidad de registros leídos y evite la entrada adicional.
brian
Re: Estado de la consulta que se ejecuta en primer planoNo existe una opción JSL dedicada para esto.Si tiene la interfaz de usuario de JMP visible, siempre puede verificar el estado de una consulta con el elemento de menú Ver->Ejecutar consultas. Dentro de JSL, también puede usar el comando del Menú principal para abrir el cuadro de diálogo, como:
Menú principal("VER:CONSULTAS EN EJECUCIÓN");
Brian Corcoran
Desarrollo JMP