Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola a todos,
Tengo una tabla de datos JMP estática que contiene información histórica antigua (datos heredados).
Tengo otra tabla de datos JMP que contiene datos nuevos. Esta tabla se alimenta desde una base de datos a través de una consulta de base de datos JMP. Eso también significa que JMP me proporciona automáticamente un script que me permite actualizar la tabla desde la base de datos cada vez que la ejecuto.
Ahora quiero agregar a la tabla anterior los nuevos datos que se extraen de la base de datos, obviamente sin perder los datos antiguos. Probablemente se necesite JSL para esto, pero no puedo resolverlo por mí mismo.
Cualquier ayuda se agradece con gusto,
Muchas gracias
Chico
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datos¡Perfecto!Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datos¡Sí! ¡Funciona como se esperaba ahora! Gracias Hadley!
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola,
Tengo otra solución que creo que podría funcionar.La función de concatenar volvió a agregar a la primera tabla (dt1), pero ahora crea una columna de origen para realizar un seguimiento de qué filas estaban en dt1 y cuáles se agregaron desde dt2. "Onruncomplete" ahora obtiene el nombre de la tabla dt2 y luego busca la columna ":Tabla fuente", seleccionando y eliminando las filas "dt2".Luego elimina ": tabla fuente".Inténtelo y avíseme si funciona.
query<<RUN></RUN>
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosGracias Hadley.
Simplemente agregué ese comando completo al final de mi script, cambié dt a dt1 (aunque creo que eso ni siquiera debería importar), lo guardé y lo ejecuté. El script aún se ejecuta sin errores ni mensajes de alerta, pero cuando lo ejecuto por segunda vez, se siguen agregando duplicados.
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola de nuevo,
Pensándolo un poco más, siempre puedes agregar un comando para eliminar filas duplicadas de dt1 después de agregar dt2 a dt1.Eso podría resolver el segundo problema que tuviste.Seleccionar y eliminar filas duplicadas con condición
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola,
Agregar una función Close() al script onruncomplete hará que dt2 se abra y cierre tan rápido que el usuario no sabrá lo que sucedió:
query<<RUN></RUN>
Observe que también eliminé la instrucción "Agregar a la primera tabla" de la función de concatenación.Esto creará una tabla separada y dejará dt1 intacto.Eso coincidiría con la solución alternativa sugerida (¡buena idea, por cierto!).Probablemente haya una manera fácil de verificar cada fila de ambas tablas y agregar solo filas que sean exclusivas de dt2, pero no se me ocurre.¿Quizás alguien más tenga una sugerencia?
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosSí, esto funciona, se agrega. Aún quedan dos cuestiones pendientes:
1) Un problema menor es que la tabla dt2 todavía aparece por separado, lo cual no es necesario.
Intenté evitar esto cambiando el script de la siguiente manera, pero el resultado es el mismo:
queryname << Run( onruncomplete( dt1 << Concatenate( dt2 = queryResult, Append to first table ) ) );
en lugar de
queryname << Run(
onruncomplete(
dt2 = queryResult;
dt1 << Concatenate( dt2, Append to first table );
)
);
2) Un problema mayor es que cuando el script se ejecuta por segunda vez, los mismos datos se agregan nuevamente al final de dt1. Necesito algún tipo de regla que solo importe datos nuevos. No estoy seguro de si esto se puede hacer en la parte Concatenar del script.
Si no hay una solución para esto, como plan B también podemos intentar modificar el script de modo que muestre la tabla adjunta (dt1 + dt2) como una tabla separada. De esta manera, el dt1 siempre podrá utilizarse como base para futuras actualizaciones de datos.
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola de nuevo,
Bien, creo que tengo una solución. Como puede ver en el siguiente script, agregué la función Concatenar dentro del mensaje "onruncomplete".Si esto se guarda como un script de tabla en dt1, debería funcionar.Por favor pruébalo y házmelo saber.
dt1=Current Data Table();
query=New SQLQuery (...
);
query<<RUN></RUN>
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola Hadley,
Creo que estamos cerca...
Creo que ejecuté todo como sugirió, pero cuando abro dt1 y ejecuto el script desde allí, aparece este mensaje de alerta JMP:
Nombre sin resolver: dt2 en acceso o evaluación de 'dt2', dt2/*###*/
Poco después, aparece la tabla de datos dt2. Pero no está agregado a dt1.
Curiosamente, cuando cierro este dt2 e intento ejecutar el script desde dt1 nuevamente, ya no recibo el mensaje de alerta JMP, pero ahora aparece la ventana Concatenar y, poco después, vuelve a aparecer dt2. Aún así, dt2 no se agrega a dt1.
Saludos
Chico
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola,
Creo que probablemente podamos simplificar esto de la siguiente manera: llamaremos dt1 a la tabla que se guardó en nuestro escritorio y dt2 a la nueva tabla que queremos actualizar desde nuestra base de datos.Vamos a crear un nuevo script de tabla para la tabla dt1 que crea una consulta para dt2 y luego concatena dt1 y dt2 juntos, agregando los resultados a dt1.
dt1=Current data table();<BR /><BR />queryname=New SQL Query(...<BR />...);<BR /><BR /><SPAN>queryname<<RUN></RUN><BR />dt1<<CONCATENATE><BR /></CONCATENATE></SPAN>
Para responder a su primera pregunta, puede obtener el script Nueva consulta SQL de dt2 ejecutando la consulta y luego haciendo clic derecho en el script fuente, guardando el resultado en el portapapeles y luego pegándolo en una nueva ventana del script.Luego puede usar la ventana para trabajar en el script antes de guardarlo en un script de nueva tabla en dt1.
¿Es esto útil?
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola Hadley,
Aún no entiendo todos los pasos.
1) ejecute la consulta y guarde el script fuente, dándole a la consulta un nuevo nombre: queryname = New SQL Query(...)<
=> con "guardar el script fuente", ¿quieres decir que solo tengo que EDITAR la consulta existente en mi tabla y guardarla allí? ¿O agregarlo como un NUEVO script a mi tabla? ¿O guardar este nuevo script en otro lugar?
4) utilice la referencia a dt con una función "Concatenar" junto con la otra tabla.
=> esto necesita más aclaración, me temo
¡Gracias de antemano Hadley!
Chico
Re: Cómo agregar una tabla de datos heredada con datos nuevos del script de la base de datosHola chico,
Al ejecutar la consulta SQL (Nueva consulta SQL (...)), puede obtener una referencia a la tabla de datos mediante el siguiente método:
1)ejecute la consulta y guarde el script fuente, dándole a la consulta un nuevo nombre: queryname = Nueva consulta SQL(...)<
2) Elimine la parte <
3) Agregue una línea de script debajo: queryname<
4) utilice la referencia a dt con una función "Concatenar" junto con la otra tabla.
Pruebe esto y avíseme si puede hacer que funcione para usted.