我认为您对“崩溃”一词的使用非常非常令人困惑。如果您的会话实际上在 _progres(或 prowin,如果这是 Windows)终止的通常意义上“崩溃”,那么您将不会保留任何锁定的记录。您还会有一个 protrace 文件,可以帮助您确定问题发生的位置。
顺便说一句,您可以在客户端启动时添加错误日志,以确定 QXtend 找不到的错误发生在哪里:
_progres dbname -p startup.p -clientlog logname.log
您没有共享任何代码,所以我只能猜测,但大概您正在通过 -p 启动参数运行您的登录程序。
如果我错了,请纠正我,但有以下几点:
_progres dbname -p startup.p
然后启动程序运行它运行的任何程序,让您登录并运行应用程序。也许是这样的:
/* startup.p
*/
message "(re)starting!".
pause.
run value( "login.p" ).
run value( "stuff.p" ).
message "all done".
pause.
quit.
还有:
/* login.p
*/
message "hello, logging in!".
pause.
return.
随着:
/* stuff.p
*/
message "hello, doing stuff!".
pause.
run value( "notthere.p" ).
message "hello, doing more stuff!".
pause.
return.
有时会发生错误(您似乎想将此称为“崩溃”)。当 stuff.p 尝试“运行 notthere.p”时,我已安排发生严重错误。因此,如果您运行我的示例,您将看到您所描述的行为 - 您的会话“崩溃”,启动过程重新运行,然后您再次进入登录屏幕。
要改变它并捕获错误,只需在 RUN 语句周围加上“DO ON STOP”。像这样:
/* startup.p
*/
message "(re)starting!".
pause.
do on error undo, leave
on endkey undo, leave
on stop undo, leave
on quit undo, leave: /* "leave", exits this block when one of the named conditions arises */
run value( "login.p" ).
run value( "stuff.p" ).
/* we just leave because we finished normally */
end.
message "all done".
pause.
quit.
您提到了 QXtend,所以我猜测 MFG/Pro 参与其中。如果您不能直接修改 MFG/Pro 启动过程(我记得那将是“-p mfg.p”),只需将上面的代码修改为从“DO ON STOP”中运行 mfg.p 的“垫片”。 .." 块。