Probleme mit dem Pfadnamen des JMP-Abfrage-Generators beim Auswählen von Tabellen über ein DialogfeldIch verwende ein Dialogfeld, um die primären und sekundären Tabellen auszuwählen, aber wenn der JMP-Abfragegenerator ausgeführt wird, werden die Dateipfadnamen nicht richtig ersetzt. Auch wenn ich dieses Problem manuell behebe, tritt beim nächsten Mal, wenn das Skript auf die Tabellen verweisen muss, ein Fehler auf.
Fehler: Name nicht aufgelöst: PRIMARYNAME beim Zugriff oder bei der Auswertung von „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>
Bearbeiten (jthi): JSL-Formatierung hinzugefügt
Automatisierung und SkriptingBetreff: Probleme mit dem Pfadnamen des JMP-Abfrage-Generators beim Auswählen von Tabellen über ein DialogfeldIch würde den Tabellennamen + Link-assoziatives Array außerhalb der neuen SQL-Abfrage erstellen und das auswerten
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);
Betreff: Probleme mit dem Pfadnamen im JMP-Abfrage-Generator beim Auswählen von Tabellen über ein DialogfeldDanke, ich habe dieses Konzept verwendet und das Problem gelöst.
Der endgültige Code unten für den Fall, dass er von jemand anderem verwendet wird
<
// Schritt 1: Namen aller offenen Datentabellen abrufen
dtNames = {};
Für (t = 1, t <= N Tabelle(), t++,
Einfügen in (dtNames, Datentabelle (t) << Name abrufen)
);
// Schritt 2: Dialog zur Auswahl zweier Tabellen
t1name = "";
t2name = "";
nw2 = Neues Fenster( "Datentabellenauswahl - Beachten Sie, dass beide Datentabellen in dieser JMP-Sitzung geöffnet sein müssen",
< V-Listenfeld(
Textfeld ("Primäre Tabelle auswählen (MES-Extrakttabelle mit TS-Spalte):" ),
lb1 = Listenfeld( dtNames, Breite( 600 ), nZeilen( 8 ), MaxItems( 1 ) ),
Distanzbox (Größe (10, 10)),
Textfeld ("Sekundäre Tabelle auswählen (Datentabelle mit START-/ENDZEIT in Spalten):")
lb2 = Listenfeld( dtNames, Breite( 600 ), nZeilen( 8 ), MaxItems( 1 ) ),
Distanzbox (Größe (10, 10)),
H-Listenfeld(
Schaltflächenfeld ("OK",
t1sel = lb1 << Auswahl abrufen;
t2sel = lb2 << Auswahl abrufen;
Wenn (N Elemente(t1sel) == 0 | N Elemente(t2sel) == 0,
Neues Fenster( "Fehler", < Stoppen();
);
t1name = t1sel[1];
t2name = t2sel[1];
Wenn (t1name == t2name,
Neues Fenster( "Fehler", < Stoppen();
);
),
Button Box( "Abbrechen", nw2 << Fenster schließen )
)
)
);
// Jetzt sind t1name und t2name Zeichenfolgen mit den ausgewählten Tabellennamen
// Beispiel: Verwendung in SQL-Abfrage (vorausgesetzt, beide Tabellen sind geöffnet)
dtJoin = Neue SQL-Abfrage(
Version(130),
Verbindung("JMP"),
JMP-Tabellen (Assoziatives Array ({t1name, Datentabelle (t1name), t2name, Datentabelle (t2name)})),
Abfragename(t1name || " join " || t2name ),
< Aus(
Tabelle(t1name, Alias("t1")),
Tisch(
t2name,
Alias( "t2" ),
Verbinden(
Typ (Links Außen),
LE(Spalte( "TS", "t1" ), Spalte( "ENDZEIT", "t2" ) ) &
GE(Spalte( "TS", "t1" ), Spalte( "STARTZEIT", "t2" ) )
)
)
)
) << Ausführen;>