Tabella dati mancante - chiusa automaticamente?Sto sbagliando qualcosa qui o è un bug?Esegui il codice seguente in JMP 14 o 15 un comando alla volta e alla fine vengono aperte tre tabelle.Eseguilo tutto in una volta e una tabella non si apre mai nella GUI o si chiude automaticamente, evidenziato da un errore nell'ultima riga.
// This script should open 2 tables and create a third based on the first two.
// Run script line by line and all three are open at the end. Run all at once
// and the first table, dtDD, is not open when the script is finished.
names default to here(1);
dtDD = Open("$Sample_Data/Big Class.jmp");
dtDDOld = Open("$Sample_Data/Big Class Families.jmp");
if(left(jmpversion(),2) == "15",
dtDDOld << Delete Row( 1 ); //not sure why this didn't delete a row in JMP 14...
,
dtDDOld << select where( row() == 1 );
dtDDOld << delete rows();
);
//find new tags
dtDDNew = New SQL Query(
Version( 130 ),
Connection( "JMP" ),
QueryName( "New Query" ),
Select(
Column( "name", "t1" ),
Column( "age", "t1" ),
Column( "sex", "t1" ),
Column( "name", "t2", Alias( "name 2" ) )
),
From(
Table( dtDD << Get Name, Alias( "t1" ) ),
Table(
dtDDOld << Get Name,
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "name", "t1" ), Column( "name", "t2" ) )
)
)
),
Where(
Custom(
"t2.\!"name\!" is null and (t1.\!"name\!" is not null)",
UI( Custom( Base( "Continuous" ) ) )
)
)
) << Run;
dtDD << bring window to front;
Re: Tabella dati mancante - chiusa automaticamente?Finora ho riscontrato questo problema solo quando le istruzioni future tentano di essere eseguite prima del completamento della prima.In questo caso, la prima istruzione non viene mai completata (i dati vengono caricati, ma non resi disponibili tramite quella variabile); oppure la tabella viene successivamente chiusa, che non fa parte dello script.L'aggiunta di wait lo risolve però. Vedrò cosa ne pensa il supporto JMP.
Grazie
Re: Tabella dati mancante - chiusa automaticamente?L'interprete JMP elabora le istruzioni JSL una dopo l'altra e non attende necessariamente il completamento dei passaggi precedenti nel codice prima che vengano elaborate le istruzioni successive. Cioè, alcune istruzioni vengono eseguite in background, mentre il JSL continua a elaborare.Credo che questo sia ciò che sta accadendo. Puoi forzare il JSL ad aspettare in un paio di modi.Usare un
Aspetta(0);
o
dtDD << formule di ripetizione;
forzerà la pausa di JSL prima dell'elaborazione.
Ho inserito un Wait(0) dopo le funzioni Open() per le famiglie Big Class e Big Class e anche appena prima di
dtDD << porta la finestra in primo piano;
Il risultato è stata la corretta esecuzione del tuo JSL.