フォアグラウンドで実行中のクエリのステータスJSL を使用してフォアグラウンドで実行されているクエリのステータスをユーザーに更新することはできますか? 実行に数時間かかる SQL クエリがあり、スクリプトはテーブルを開いた後にテーブル上で操作する必要があるため、バックグラウンド クエリとして実行できません。
現在、Open Database() を使用しています。
/* fictitious database and table */
dt = Open Database( "DSN=ODBC Connection",
"SELECT * FROM some_table" )
Re: フォアグラウンドで実行中のクエリのステータスありがとう、エリック、
スクリプトを分割してクエリから実行するのは少し手間がかかりますが、これで仕事は完了するようです。
Re: フォアグラウンドで実行中のクエリのステータスねえ、ああ、
フォアグラウンド クエリからステータスを更新する方法はありません。クエリは 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 は使用できます。 ユーザーは使用できます「表示」>「クエリの実行」進捗状況を確認します。 レポートに大きな進捗があるかどうかは、クエリのほとんどの時間が実行フェーズに費やされるか、データ取得フェーズに費やされるかによって決まります。 実行フェーズではデータベースから更新を取得しません。クエリの実行後にデータベースからデータをフェッチする際に、取得した行数を更新するだけです。
エリック
Re: フォアグラウンドで実行中のクエリのステータスクエリ自体の処理に時間がかかる場合は、データが実際に読み取られるまで進行状況バーは表示されません。 少なくとも何かが起こっていることを知らせるために、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);
Re: フォアグラウンドで実行中のクエリのステータス申し訳ありませんが、上記は実際にはバックグラウンド クエリ用であることに注意してください。フォアグラウンド クエリの場合は、読み取られたレコード数をユーザーに通知し、それ以上の入力を防ぐ進行状況バーが表示される必要があります。
ブライアン
Re: フォアグラウンドで実行中のクエリのステータスこれのための専用の JSL オプションはありません。JMP UI が表示されている場合は、[表示] -> [クエリの実行] メニュー項目を使用して、いつでもクエリのステータスを確認できます。 JSL 内では、次のようなメイン メニュー コマンドを使用してダイアログを表示することもできます。
メインメニュー("表示:実行中のクエリ");
ブライアン・コーコラン
JMP開発