全部,
我有一个脚本,用于从世界各地的多个数据库中提取数据。这个脚本是定时运行的,并且是自动化的。也就是说,它会执行相应的操作,保存所有表,关闭 JMP 进程,然后任务就完成了。
然而,偶尔会出现一两个数据库无响应的情况。可能是 LDAP 服务器宕机,不接受我的密码,或者正在进行数据库维护等等。
在这种情况下,我会收到一个这样的弹出窗口:

即使我当时在场并点击“取消”,脚本也会在未完成的情况下退出。
我有一个从数据库提取数据的函数,它被封装在 try/catch 块中——但当我手动点击“取消”按钮时,似乎没有任何效果……更重要的是——在这种情况下,我该如何让脚本自动运行?如何告诉脚本,如果无法连接到某个数据库,就放弃连接,从其他数据库提取数据并进行处理……不要仅仅因为某个数据库无响应就导致整个脚本崩溃?如何消除那个弹出窗口,并将其视为 try 失败,然后跳转到 catch 块继续执行脚本?
以下是负责此功能的脚本部分:
DBPaths = [
"Server1" => "ODBC:DSN=...PORT=5432;",
"Server2" => "ODBC:DSN=...PORT=5432;",
"Server3" => "ODBC:DSN=...PORT=5432;",
"Server4" => "ODBC:DSN=...PORT=5432;",
"Server5" => "ODBC:DSN=...PORT=5432;"];
myQuery = Function( {serverDBPath, server},
New SQL Query(
Version( 130 ),
Connection( serverDBPath ),
QueryName( server ),
Select( ... ),
From( ... ),
Where( ... ),
PostQueryScript( ... )
) << Run Foreground()
);
myDTs = {};
For Each( {{server, DBPath}, index}, DBPaths,
Show( server, DBPath, index );
Try( myDTs[index] = myQuery( DBPath, server ), writeToLog( server || " Query error... Using: " || DBPath ||" Error message: "||exception_msg[1] ) );
);
谢谢,
M.
我想知道在后台运行查询是否会有帮助?我经常使用类似下面的方法,并检查返回的数据是否有效:
在后台运行查询,等待其完成,并在剩余的 JSL 脚本中引用它们。