在前台執行的查詢的狀態是否可以使用 JSL 向使用者更新在前台執行的查詢的狀態? 我有一個需要幾個小時才能運行的 SQL 查詢,並且腳本需要在打開後對錶進行操作,因此我無法將其作為後台查詢運行。
目前我正在使用開放資料庫():
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" )
回覆:在前台執行的查詢的狀態謝謝埃里克,
將腳本拆分為從查詢運行將需要一些工作,但看起來它可以完成工作。
回覆:在前台執行的查詢的狀態嘿,呃,
沒有辦法從前台查詢更新狀態,因為該查詢佔用了 JMP 的主線程,因此 JMP 在運行時實際上無法執行任何操作。
我建議的解決方法是使用查詢產生器建立查詢(如果您已經擁有要執行的 SQL,則使用自訂 SQL),然後將查詢儲存為檔案。 假設它在磁碟上的名稱為“oneMillionRows.jmpquery”。
然後,編寫以下腳本:
query = include("oneMillionRows.jmpquery");
query << Run Background(
On Run Complete(
Write("\!NQuery is complete! Rows in result: ", NRows(queryResult));
)
);
無論您想在查詢完成後運行什麼 JSL 都可以進入運行完成時參數為運行後台() 。 因此,當查詢運行時,JMP 仍然可用。 使用者可以使用檢視 > 執行查詢看到進展。 是否有太多進展需要報告取決於查詢是否將大部分時間花在執行階段或資料檢索階段。 在執行階段我們不會從資料庫取得任何更新;我們只是在查詢執行後從資料庫取得資料時更新檢索到的行數。
艾瑞克
回覆:在前台執行的查詢的狀態如果查詢本身需要很長時間來處理,則在實際讀取資料之前您將看不到進度列。 我使用 Caption() 命令向用戶發送訊息,至少讓他們知道發生了什麼事。 對於某些應用程序,我可以估計所需的時間,並將其包含在訊息中。 時間是相對的!
caption("Reading data, please be patient...");
wait(0);
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" );
caption(remove);
wait(0);
回覆:在前台執行的查詢的狀態我應該要提到的是,上面的內容實際上是用於後台查詢的,抱歉。對於前台查詢,應該有一個進度條,通知使用者讀取的記錄數並防止進一步輸入。
布萊恩
回覆:在前台執行的查詢的狀態沒有專門用於此目的的 JSL 選項。如果您有可見的 JMP UI,則可以隨時使用「檢視」->「執行查詢」選單項目檢查查詢的狀態。 在 JSL 中,您也可以使用主選單命令來開啟對話框,例如:
主選單(“檢視:執行查詢”);
布萊恩·科科倫
JMP開發