Problèmes de nom de chemin du générateur de requêtes JMP lors de la sélection de tables via une boîte de dialogueJ'utilise une boîte de dialogue pour sélectionner les tables principales et secondaires, mais lorsque le générateur de requêtes JMP s'exécute, il ne parvient pas à remplacer correctement les noms de chemin de fichier, même si je résous manuellement ce problème la prochaine fois que le script doit référencer les tables, il échoue.
Erreur : Nom non résolu : PRIMARYNAME dans l'accès ou l'évaluation 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>
Modifier (jthi) : ajout du formatage JSL
Automatisation et scriptsRe : Problèmes de nom de chemin du générateur de requêtes JMP lors de la sélection de tables via une boîte de dialogueJe construirais le nom de la table + le tableau associatif de liens en dehors de la nouvelle requête SQL et l'évaluerais
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 : Problèmes de nom de chemin du générateur de requêtes JMP lors de la sélection de tables via une boîte de dialogueMerci, j'ai utilisé ce concept et j'ai résolu le problème.
Code final ci-dessous en cas d'utilisation par quelqu'un d'autre
<
// Étape 1 : Obtenir les noms de toutes les tables de données ouvertes
dtNames = {};
Pour( t = 1, t <= N Table(), t++,
Insérer dans( dtNames, Data Table( t ) << Obtenir le nom )
);
// Étape 2 : Boîte de dialogue pour sélectionner deux tables
t1name = "";
t2name = "";
nw2 = Nouvelle fenêtre( "Sélecteur de table de données - Notez que les deux tables de données doivent être ouvertes dans cette session JMP",
< Zone de liste V(
Zone de texte (« Sélectionner la table principale (table d'extraction MES avec colonne TS) : »),
lb1 = Liste déroulante( dtNames, largeur( 600 ), nlines( 8 ), MaxItems( 1 ) ),
Boîte d'espacement (taille (10, 10)),
Zone de texte (« Sélectionnez la table secondaire (table de données avec HEURE DE DÉBUT/DE FIN dans les colonnes) : »),
lb2 = Liste déroulante( dtNames, largeur( 600 ), nlines( 8 ), MaxItems( 1 ) ),
Boîte d'espacement (taille (10, 10)),
Zone de liste H(
Boîte à boutons (« OK »,
t1sel = lb1 << Obtenir la sélection ;
t2sel = lb2 << Obtenir la sélection ;
Si( N éléments( t1sel ) == 0 | N éléments( t2sel ) == 0,
Nouvelle fenêtre (« Erreur », < Arrêt();
);
t1name = t1sel[1];
t2name = t2sel[1];
Si( t1name == t2name,
Nouvelle fenêtre (« Erreur », < Arrêt();
);
),
Boîte à boutons (« Annuler », nw2 << Fermer la fenêtre »)
)
)
);
// Maintenant, t1name et t2name sont des chaînes avec les noms de table sélectionnés
// Exemple : utilisation dans une requête SQL (en supposant que les deux tables sont ouvertes)
dtJoin = Nouvelle requête SQL(
Version(130),
Connexion("JMP"),
Tables JMP (tableau associatif ({t1name, table de données (t1name), t2name, table de données (t2name)})),
QueryName( t1name || " join " || t2name ),
< Depuis(
Table(t1name, Alias("t1" ) ),
Tableau(
t2name,
Alias( "t2" ),
Rejoindre(
Type (extérieur gauche),
LE( Colonne( "TS", "t1" ), Colonne( "HEURE DE FIN", "t2" ) ) &
GE(Colonne("TS", "t1" ), Colonne("HEURE DE DÉBUT", "t2" ) )
)
)
)
) << Courir;>