如何在模態視窗開啟後顯示正在執行的腳本?我花了一些時間創建了一個 jsl 腳本,它提供使用者介面來指定一些條件並根據使用者輸入從 Amazon Redshift 提取資料。該腳本運行良好,但有一個小問題。
一旦使用者點擊模態視窗上的查詢按鈕,它就會設定一個變數isValid = 1,關閉自身以執行後續腳本,然後該腳本將建立一個進度窗口,顯示「正在提取數據,請稍候... ”之類的消息並啟動查詢打開。查詢完成後它應該會自行關閉。
問題是,這個進度視窗在我的螢幕上看不到(沒有顯示)。儘管查詢成功,但 JMP 似乎在創建視窗後立即運行查詢腳本,然後將其置於前面。
我嘗試在查詢腳本之前插入 wait(0) 或將視窗置於前面,但仍然沒有成功。只有當我註釋查詢部分時,我才能看到進度視窗。
我可以做些什麼來使視窗顯示並同時運行查詢腳本?
/*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;
);
);自動化和腳本編寫回覆:如何在模態視窗開啟後顯示正在執行的腳本?使用模態視窗的原因是它將顯示在螢幕中央,並且預設應該顯示在頂部。我之前嘗試過正常窗口,但它也沒有顯示。
無論如何,我會去收集更多資訊並探索新的 sql 查詢方法。之後會再回覆您。
非常感謝您提出的寶貴意見和建議,謝謝!回覆:如何在模態視窗開啟後顯示正在執行的腳本?您不需要使用模態視窗來顯示查詢正在執行。使用普通窗口,在查詢開始之前打開它,並在查詢完成時關閉它。
Names Default To Here(1);
isValid = 1;
If(isValid == 1,
nw = New Window("Query",
<<SHOW menu=""></SHOW>
<P>另外,我建議您從“創建資料庫連接”、“執行SQL”、“關閉資料庫連接”轉向“新SQL 查詢”,因為它是查詢的首選方法(使用它更煩人,缺乏文檔,但仍然... ……這是一種方式向前)。</P>
<P> </P>
<P>編輯:</P>
<P>如果您決定轉向 New SQL Query(),如果您希望腳本等待查詢完成,請記住使用 << Run Foreground。</P>回覆:如何在模態視窗開啟後顯示正在執行的腳本?經過一番嘗試和錯誤後,我找出了一些程式碼來讓腳本按照我想要的方式運作。
根據您的建議,我使用普通視窗來顯示查詢正在執行+新的 SQL 查詢功能。由於普通視窗不會在螢幕中心彈出,因此我創建了一個函數來捕獲監視器螢幕尺寸(不想為此調用外部電源 shell 腳本),然後計算它應該出現的位置。
然而,有一個小缺點——查詢運行時忙碌燈箱不旋轉——我們對此無能為力,對嗎?
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;
);
回覆:如何在模態視窗開啟後顯示正在執行的腳本?您可以使用 << Run Background,但它會帶來許多您必須解決的不同問題。
回覆:如何在模態視窗開啟後顯示正在執行的腳本?另外,我建議您從“創建資料庫連接”、“執行SQL”、“關閉資料庫連接”轉向“新SQL 查詢”,因為它是查詢的首選方法(使用它更煩人,缺乏文檔,但仍然... ……這是一種方式向前)。
我使用建立資料庫連接/執行sql/關閉資料庫連接,因為我經常有大量的SQL查詢要執行。建立資料庫連線會產生開銷。多次呼叫 New SQL Query 可能會較慢。
我很好奇為什麼你認為新的 SQL 查詢是前進的方向?
回覆:如何在模態視窗開啟後顯示正在執行的腳本?我的建議是基於這篇文章Which way to go query database?以及布萊恩的評論。我不太喜歡使用 New SQL Query(),因為它有很多問題,但我仍然在移動越來越多的腳本來使用它,希望我的腳本可以面向未來。
回覆:如何在模態視窗開啟後顯示正在執行的腳本?我一直使用 new sql query(),因為功能對於我的大多數腳本來說是最好的,並且 JMP 推薦它作為「正確的方式」。也許值得寫一份贊成和反對的清單,並將其用作未來發展的提示,例如將其放入願望清單中。為什麼不為多個語句增強新的 sql query() 呢?
也許我們可以在 Scripters Club 中討論。
此致,
回覆:如何在模態視窗開啟後顯示正在執行的腳本?我們至少有一個願望清單項目可以改進有關「new sql query()」的文檔,但肯定還需要更多項目。收集挫折和問題是一個好主意(我想我之前已經發表了一些關於這些問題的帖子)。