Ho usato Query Builder per scrivere diverse query. Quindi ho posizionato questi script uno dopo l'altro. Successivamente voglio lavorare con le nuove tabelle di dati formate dalle query.
Il mio problema è che una delle query impiega> 10 secondi per essere eseguita e il JSL che segue le query cerca di lavorare con la tabella "da formare" (che non è presente quando lo script arriva a quella parte del codice) . Questo ovviamente causa un errore e chiude lo script.
Ho provato a utilizzare il comando "Esegui in background", ma sembra che lo script finisca tutti insieme.
Qualche idea su come posso eseguire le query e forzare un WAIT fino a quando tutte le query non hanno restituito le loro tabelle prima di eseguire il resto dello script (che agisce su quelle tabelle)?
Grazie,
Martino
Mi dispiace di essere arrivato in ritardo: il suggerimento di Brian di usare Esegui in primo piano sulla query in JSL è il modo per garantire che una query finisca prima che venga eseguita la riga successiva di JSL. Non c'è bisogno di riscrivere!
Eric
In realtà, è ancora meglio usare Esegui in primo piano.Ci scusiamo per non aver capito bene, subito, ma qualcosa del tipo:
Query1 = Nuova query SQL (
Connessione (...
) ,
Ordinato da ( ) ,
PostQueryScript (...
)
) ;
Interrogazione1 << Esegui in primo piano;
dovrebbe funzionare.
Brian
Ciao Martino,
Puoi anche provare a disattivare le operazioni in background per le query.Questo ha funzionato per me.Puoi andare su "Preferenze-> Costruttore di query-> ODBC-> Esegui query in background quando possibile" e deselezionarlo, oppure nello script puoi fare qualcosa del genere:
Impostazioni del Generatore di query( Query in background( 0 ) )
Nella parte superiore del tuo script.
Brian Corcoran
Sviluppo JMP
Grazie mille pmroz!!!! Ciò richiede un po' di riscrittura, ma funziona a meraviglia!
Lo proverò e ti farò sapere come va a finire.
Grazie
Sospetto che il query << Esegui torna subito. Non sono sicuro di come potresti sincronizzarlo.
Io uso eseguire SQL invece, e questo sembra aspettare fino al completamento prima di avanzare nella sceneggiatura. Ad esempio, se avessi 4 istruzioni SQL da eseguire:
dbc = create database connection(<CONNECTION-STRING>);
dt1 = execute sql(dbc, sql1);
dt2 = execute sql(dbc, sql2);
dt3 = execute sql(dbc, sql3);
dt4 = execute sql(dbc, sql4);
close database connection(dbc);</CONNECTION-STRING>
SÌ. Wait(0) in realtà non fa come suggerisci. Le query restituiscono effettivamente in un ordine casuale, in base a (quello che sembra essere) la loro dimensione e complessità. Ho 7 domande ed è la quarta che richiede molto tempo. Ho provato a inserire prima quella query nello script, ma le altre vengono eseguite così velocemente che questa non è ancora stata completata quando viene eseguito il codice rimanente nello script.
Ecco parte del codice che sto usando, con gran parte di esso rimosso per proteggere la fonte. Ma dà la struttura generale. Ho rimosso le query 4-7 e le ultime 4 istruzioni Join alla fine per brevità.
Query1 = Nuova query SQL (
Connessione (...
) ,
Ordinato da ( ) ,
PostQueryScript (...
)
) ;
Interrogazione1 << Correre ;
Aspettare ( 0 ) ;
Query2 = Nuova query SQL (
Connessione (...
) ,
Ordinato da ( ) ,
PostQueryScript (...
)
) ;
Interrogazione2 << Correre ;
Aspettare ( 0 ) ;
Query3 = Nuova query SQL (
Connessione (...
) ,
Ordinato da ( ) ,
PostQueryScript (...
)
) ;
Interrogazione3 << Correre ;
Aspettare ( 0 ) ;
//Unisci le tabelle
Table12 = Tabella dati ( "01" ) << Giuntura (
Con ( Tabella dati ( "02" ) ) ,
Unisci colonne con lo stesso nome,
Bandiera della partita ( 0 ) ,
Per colonne corrispondenti (
:
) ,
Rilascia multipli ( 0 , 0 ) ,
Includi non corrispondenze ( 0 , 0 ) ,
Mantieni l'ordine del tavolo principale ( 1 ) ,
Tabella delle uscite ( "12" )
) ;
Table123 = Tabella dati ( "12" ) << Giuntura (
Con ( Tabella dati ( "03" ) ) ,
Unisci colonne con lo stesso nome,
Bandiera della partita ( 0 ) ,
Per colonne corrispondenti (
:
) ,
Rilascia multipli ( 0 , 0 ) ,
Includi non corrispondenze ( 0 , 0 ) ,
Mantieni l'ordine del tavolo principale ( 1 ) ,
Tabella delle uscite ( "123" )
) ;
Hai messo un wait(0); comando dopo ogni recupero? Ciò dovrebbe costringere JMP ad attendere il completamento dei comandi precedenti.