在前台运行的查询的状态是否可以使用 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开发