Problemas con el nombre de ruta del generador de consultas JMP al seleccionar tablas a través de un cuadro de diálogoEstoy usando un cuadro de diálogo para seleccionar las tablas primarias y secundarias, pero cuando se ejecuta el generador de consultas JMP, no puede sustituir correctamente los nombres de las rutas de archivo, incluso si resuelvo esto manualmente, la próxima vez que el script necesita hacer referencia a las tablas, se bloquea.
Error: Nombre sin resolver: PRIMARYNAME en el acceso o evaluación de 'PRIMARYNAME', PRIMARYNAME/*###*/
// Step 1: Get names of all open data tables
dtNames = {};
For(t = 1, t <= N Table(), t++,
Insert Into(dtNames, Data Table(t) << Get Name)
);
// Step 2: Dialog to select two tables
nw2 = New Window("Data Table Selector - Note both data tables must be open in this JMP session",
<
<MODAL>
"PRIMARYPATH", "SECONDARYNAME" => "SECONDARYPATH"]), QueryName(PRIMARYNAME || " join " || SECONDARYNAME), Select(__SELECTALLCOLUMNS__), From( Table(PRIMARYNAME, Alias("t1")), Table( SECONDARYNAME, Alias("t2"), Join( Type(Left Outer), LE(Column("TS", "t1"), Column("END TIME", "t2")) & GE(Column("TS", "t1"), Column("START TIME", "t2")) ) ) ) ) << Modify ); // Step 7: Substitute table names, paths, and all columns sqlExpr = Substitute(sqlExpr, "PRIMARYNAME", primaryTableName[1], "PRIMARYPATH", primaryPath, "SECONDARYNAME", secondaryTableName[1], "SECONDARYPATH", secondaryPath, Expr(__SELECTALLCOLUMNS__), Expr(selectExprList) ); // Debug: Show the final SQL Query code (optional, for troubleshooting) Write(Expr(sqlExpr)); // Step 8: Run the query Eval(sqlExpr);
</MODAL>
Editar (jthi): se agregó formato JSL
Automatización y scriptingRe: Problemas con el nombre de ruta del generador de consultas JMP al seleccionar tablas a través de un cuadro de diálogoConstruiría la matriz asociativa de nombre de tabla + enlace fuera de la nueva consulta SQL y la evaluaría.
Names Default To Here(1);
t1name = "Big Class";
t1path = "$SAMPLE_DATA/Big Class.jmp";
t2path = "$SAMPLE_DATA/Big Class Families.jmp";
t2name = "Big Class Families";
aa = Associative Array();
aa[t1name] = t1path;
aa[t2name] = t2path;
sqlExpr = Expr(
New SQL Query(
Version(130),
Connection("JMP"),
JMP Tables(_aa_),
QueryName(_t1name_ || " join " || _t2name_),
Select,
From(
Table(_t1name_, Alias("t1")),
Table(
_t2name_,
Alias("t2"),
Join(Type(Left Outer), EQ(Column("name", "t1"), Column("name", "t2")))
)
)
) << Modify
);
q = Substitute(Name Expr(sqlExpr),
Expr(_aa_), aa,
Expr(_t1name_), t1name,
Expr(_t2name_), t2name,
Expr(_t1path_), t1path,
Expr(_t2path_), t2path,
);
Eval(q);
Re: Problemas con el nombre de ruta del generador de consultas JMP al seleccionar tablas a través de un cuadro de diálogoGracias, utilicé ese concepto y resolví el problema.
Código final a continuación en caso de que alguien más lo use.
<
// Paso 1: Obtener los nombres de todas las tablas de datos abiertas
dtNombres = {};
Para (t = 1, t <= N Tabla(), t++,
Insertar en(dtNames, Tabla de datos(t) << Obtener nombre)
);
// Paso 2: Diálogo para seleccionar dos tablas
t1nombre = "";
t2nombre = "";
nw2 = Nueva ventana("Selector de tabla de datos: tenga en cuenta que ambas tablas de datos deben estar abiertas en esta sesión JMP",
< V Cuadro de lista(
Cuadro de texto("Seleccionar tabla principal (tabla de extracción MES con columna TS):")
lb1 = Cuadro de lista(dtNames, ancho(600), nlines(8), MaxItems(1)),
Caja espaciadora (tamaño (10, 10)),
Cuadro de texto("Seleccionar tabla secundaria (tabla de datos con HORA DE INICIO/FIN en columnas):" ),
lb2 = Cuadro de lista(dtNames, ancho(600), nlines(8), MaxItems(1)),
Caja espaciadora (tamaño (10, 10)),
Cuadro de lista H(
Cuadro de botones ("Aceptar",
t1sel = lb1 << Obtener seleccionado;
t2sel = lb2 << Obtener seleccionado;
Si ( N elementos ( t1sel ) == 0 | N elementos ( t2sel ) == 0,
Nueva ventana("Error", < Detener();
);
t1nombre = t1sel[1];
t2nombre = t2sel[1];
Si( t1nombre == t2nombre,
Nueva ventana("Error", < Detener();
);
),
Cuadro de botones ("Cancelar", nw2 << Cerrar ventana)
)
)
);
// Ahora t1name y t2name son cadenas con los nombres de las tablas seleccionadas
// Ejemplo: Uso en consulta SQL (asumiendo que ambas tablas están abiertas)
dtJoin = Nueva consulta SQL(
Versión(130),
Conexión("JMP"),
Tablas JMP (Matriz asociativa ({t1name, Tabla de datos (t1name), t2name, Tabla de datos (t2name)} ) ),
QueryName(nombret1 || "unirse" || nombret2),
< De(
Tabla(t1nombre, Alias("t1")),
Mesa(
t2nombre,
Alias("t2"),
Unirse(
Tipo (Exterior izquierdo),
LE(Columna("TS", "t1"), Columna("HORA DE FINALIZACIÓN", "t2")) y
GE( Columna( "TS", "t1" ), Columna( "HORA DE INICIO", "t2" ) )
)
)
)
) << Ejecutar;>