模态窗口打开后如何显示正在运行的脚本?我花了一些时间创建了一个 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>如果您决定转到新 SQL 查询(),请记住使用<<运行前台,如果您希望脚本等待查询完成。</P>回复:如何显示打开后正在运行的脚本的模态窗口?经过一些尝试和错误之后,我找到了一些代码来使脚本按照我想要的方式运行。
按照您的建议,我使用普通窗口来显示查询正在运行 + 新 SQL 查询功能。由于普通窗口不会弹出到屏幕中央,因此我创建了一个函数来捕获显示器屏幕尺寸(不想为此调用外部电源外壳脚本),然后计算它应该出现的位置。
但是,还有一个小缺点——查询运行时,忙碌灯箱不会旋转——我们对此无能为力,对吗?
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;
);
回复:如何显示打开后的正在运行的脚本的模态窗口?您可以使用<<运行后台》,但它会带来很多不同的问题需要您解决。
回复:如何显示打开后的正在运行的脚本的模态窗口?另外,我建议您从创建数据库连接、执行 SQL、关闭数据库连接转到新 SQL 查询,因为它是查询的首选方法(使用起来更烦人,缺乏文档但仍然......它是前进的方向)。
我使用创建数据库连接/执行 SQL/关闭数据库连接,因为我经常要执行大量 SQL 查询。创建数据库连接会产生开销。多次调用新 SQL 查询可能会比较慢。
我很好奇您为什么认为新 SQL 查询是前进的方向?
回复:如何显示打开后的正在运行的脚本的模态窗口?我的建议是基于这篇文章《查询数据库的方法是什么?》和 Brian 的评论。我不太喜欢使用 New SQL Query(),因为它有很多问题,但我仍然在越来越多地使用它,希望我的脚本能够经得起未来的考验。
回复:如何显示打开后的正在运行的脚本的模态窗口?我一直使用 new sql query(),因为对于我的大多数脚本来说,它的功能性是最好的,而且 JMP 推荐它作为“正确方法”。也许值得写一份优点和缺点列表,并将其用作未来开发的提示,例如将其放入愿望清单中。为什么不为多个语句增强 new sql query()。
也许我们可以在 Scripters Club 讨论一下。
此致,
回复:如何显示打开后的正在运行的脚本的模态窗口?我们至少有一个愿望清单项目是改进“new sql query()”的文档,但肯定还需要更多。收集挫折和问题是一个好主意(我想我之前已经发了一些关于这些的帖子)。