Est-ce que je fais quelque chose de mal ici ou est-ce un bug?Exécutez le code ci-dessous dans JMP 14 ou 15 une commande à la fois et trois tables sont ouvertes à la fin.Exécutez tout en même temps et une table ne s'ouvre jamais dans l'interface graphique ou se ferme automatiquement, comme en témoigne une erreur sur la dernière ligne.
// 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;
Jusqu'à présent, je n'ai rencontré ce problème que lorsque les instructions futures tentent de s'exécuter avant la fin de la première.Dans ce cas, la première instruction ne se termine jamais vraiment (les données sont chargées, mais ne sont tout simplement pas mises à disposition via cette variable) ; ou la table est ensuite fermée, ce qui ne fait pas partie du script.L'ajout d'attente résout le problème. Je vais voir ce qu'en pense le support JMP.
Merci
L'interpréteur JMP traite les instructions JSL l'une après l'autre et n'attend pas nécessairement que les étapes ci-dessus dans le code soient terminées avant que les instructions suivantes ne soient traitées. C'est-à-dire que certaines instructions s'exécutent en arrière-plan, tandis que la JSL continue de traiter.Je crois que c'est ce qui se passe. Vous pouvez forcer la JSL à attendre de plusieurs manières.Utilisant un
Attendez(0);
ou
dtDD << relancer les formules ;
forcera JSL à faire une pause avant le traitement.
J'ai placé un Wait (0) après les fonctions Open () pour les familles Big Class et Big Class et également juste avant le
dtDD << amener la fenêtre au premier plan ;
Le résultat a été la bonne exécution de votre JSL.