Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Dedico un po' di tempo alla creazione di uno script jsl, che fornisce un'interfaccia utente per specificare alcuni criteri ed estrarre dati da Amazon Redshift in base all'input dell'utente. Lo script funziona bene ma presenta un piccolo problema.
Una volta che l'utente fa clic sul pulsante di query in una finestra modale, imposta una variabile isValid = 1, si chiude per eseguire lo script successivo, che creerà quindi una finestra di avanzamento che visualizzerà un messaggio come "estrazione dati, attendere..." e avviando il interrogazione su open. Dovrebbe chiudersi al termine della query.
Il problema è che questa finestra di avanzamento non può essere vista (non visualizzata) sul mio schermo. Sembra che JMP esegua lo script della query immediatamente dopo la creazione della finestra prima che venga portata in primo piano, sebbene la query abbia esito positivo.
Provo a inserire wait(0) o a portare la finestra in primo piano prima dello script di query, ancora senza fortuna. Posso vedere la finestra di avanzamento solo se noto la parte della query.
Cosa posso fare per visualizzare la finestra ed eseguire contemporaneamente lo script di query?
/*scripts before this line are not related to the issue, hence not included*/<BR /><BR /><BR />If(isValid == 1,
nwQuery = New Window( "Query", <<SHOW menu=""></SHOW> window show up if remark below lines */
mySQL = Eval Insert(tpSQL);
dbc = Create Database Connection("DSN=Amazon Redshift; UID=***; PSW=***");
dt = Execute SQL (dbc, mySQL, "Query");
close database connection(dbc);<BR /> // add wait(2); if remark above lines
bbOk << Close Window;
))),
bbOk << Click;
);
);Automazione e scriptingRi: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Il motivo per utilizzare la finestra modale è che verrà visualizzata al centro dello schermo e si suppone sia mostrata in alto per impostazione predefinita. Ho già provato la finestra normale e anche questa non viene visualizzata.
Ad ogni modo, andrò a raccogliere maggiori informazioni ed esplorerò il nuovo metodo di query SQL. Ti risponderò nuovamente dopo.
Molto apprezzato per la tua preziosa opinione e suggerimento, grazie!Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Non è necessario utilizzare la finestra modale per mostrare che la query è in esecuzione. Utilizza la finestra normale, aprila prima dell'inizio della query e chiudila al termine della query.
Names Default To Here(1);
isValid = 1;
If(isValid == 1,
nw = New Window("Query",
<<SHOW menu=""></SHOW>
<P>Inoltre ti suggerisco di passare da Crea connessione al database, Esegui SQL, Chiudi connessione al database a Nuova query SQL poiché è il metodo preferito per le query (è più fastidioso da usare, manca di documentazione ma comunque... è la strada da percorrere inoltrare).</P>
<P> </P>
<P>Modificare:</P>
<P>Se decidi di passare a New SQL Query() ricorda di utilizzare << Esegui Foreground con esso SE desideri che lo script attenda il completamento della query.</P>Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Dopo alcuni tentativi ed errori, riesco a capire del codice per rendere il comportamento dello script nel modo che desidero.
Come tuo suggerimento, utilizzo la finestra normale per mostrare che la query è in esecuzione + Nuova funzione SQL Query. Poiché la finestra normale non verrà visualizzata al centro dello schermo, creo una funzione per acquisire le dimensioni dello schermo del monitor (non voglio chiamare script di shell di alimentazione esterna per questo) quindi calcolo dove dovrebbe essere visualizzato.
Tuttavia, c'è un piccolo difetto: la casella luminosa di occupato non gira quando la query è in esecuzione: non possiamo farci niente, giusto?
Names Default To Here(1);
GetWinConsoleSize = Function({},
nW = New Window("Get Win Console Size", << Window View("Invisible"), << Maximize Window(1));
theSize = nW << Get Window Size();
nW << Close Window();
Return(theSize);
);
drawWinProgress = Function({scrSize},
xSize = 250;
ySize = 50;
cpX = (scrSize[1]/2)-(xSize/2);
cpY = (scrSize[2]/2)-(ySize/2);
nW = New Window("Query Data", << Show Menu(0), << Show Toolbars(0), << Size(xSize,ySize), << Show Window (0),
Lineup Box(N Col(2), Busy Light(<< Automatic, size(40,40)), Text Box(" Pulling data, please wait ...")),
);
nW << Move Window(cpX, cpY);
nW << Show Window (1);
Return(nW);
);
nwMain = New Window("UI for user to input query criteria", << Modal, << Return Result,
// All display box goes here
H List Box(
Spacer Box(),
bbQuery = Button Box("Query",
isValid = 1;
bbQuery << Close Window;
,
isValid = 0;
bbCancel = Button Box("Cancel", Stop()),
),
);
If(isValid == 1,
wcSize = GetWinConsoleSize();
wProg = drawWinProgress(wcSize);
Wait(0);<BR /> // Generating SQL based on user criteria
dt = New SQL Query(Connection(strOdbcConnection), CustomSQL(mySQL)) << Run Foreground;
wProg << Close Window;
);
Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Potresti usare << Esegui sfondo ma comporterebbe molti problemi diversi che dovresti risolvere.
Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Inoltre ti suggerisco di passare da Crea connessione al database, Esegui SQL, Chiudi connessione al database a Nuova query SQL poiché è il metodo preferito per le query (è più fastidioso da usare, manca di documentazione ma comunque... è la strada da percorrere inoltrare).
Utilizzo la creazione di una connessione al database/l'esecuzione di SQL/la chiusura della connessione al database perché spesso ho numerose query SQL da eseguire. È previsto un sovraccarico per creare la connessione al database. Chiamare più volte la nuova query SQL potrebbe essere più lento.
Sono curioso di sapere perché pensi che New SQL Query sia la strada da seguire?
Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Il mio suggerimento si basa su questo post . In che modo interrogare il database? e il commento di Brian. Non mi piace molto usare New SQL Query() a causa di molti problemi che ha, ma sto comunque spostando sempre più script per utilizzarlo per, si spera, rendere i miei script a prova di futuro.
Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Utilizzo sempre new sql query() perché la funzionalità è la migliore per la maggior parte dei miei script e JMP lo consiglia come "modo giusto". Forse varrebbe la pena scrivere un elenco di Pro e Contro e usarlo come suggerimento per lo sviluppo futuro, ad esempio inserirlo nella lista dei desideri. Perché non migliorare new sql query() per più di un'istruzione.
Magari possiamo parlarne nello Scripters Club.
Distinti saluti,
Ri: Come mostrare la finestra modale quale script in esecuzione dopo che è stato aperto?Abbiamo almeno un elemento della lista dei desideri che migliora la documentazione su "new sql query()" ma ce ne sono sicuramente alcuni altri che sarebbero necessari. Raccogliere le frustrazioni e i problemi è una buona idea (penso di aver scritto alcuni post riguardanti quelli precedenti).