能否通过.pf文件程序化连接数据库?switch case切换遇错误1402求助
关于Progress中使用Switch Case连接数据库时出现错误1402的解决方案
嘿,我来帮你解决这个头疼的问题!你遇到的错误1402提示“parameter -p is not a database parameter and was ignored”,但你的.pf文件里明明没写-p参数,这大概率是当前进程继承了额外的启动参数导致的——Progress的CONNECT语句默认会把当前会话的所有参数都传递给新连接,哪怕你的.pf文件里没包含这些参数。
下面是具体的排查和解决步骤:
先搞清楚-p参数的来源
- 检查程序启动命令行:比如你是不是用类似
pro myapp.p -p somevalue这样的命令启动的?哪怕你的.pf里没写,启动时的-p参数会被当前会话继承,CONNECT时就会跟着传到新连接里。 - 检查.pf文件的间接引用:看看
test.pf或Db.pf里有没有INCLUDE其他.pf文件?如果被引用的文件里有-p参数,也会被加载进来。 - 用代码验证:在
CONNECT之前加一行DISPLAY SESSION:PARAMETER('p').,看看输出的是什么值——如果有内容,说明当前会话确实带着-p参数。
解决方法:控制CONNECT的参数传递
最直接的方式是在CONNECT时使用NO-PARAMETERS选项,这样会忽略当前会话的所有参数,只使用你指定的.pf文件里的参数(或者显式写的参数)。
修改后的示例代码
CASE Db_Name: WHEN "Test": CONNECT TO 'test.pf' NO-PARAMETERS. END. OTHERWISE: CONNECT TO 'Db.pf' NO-PARAMETERS. END. END CASE.
如果你不想完全忽略所有参数,只想清除-p,也可以显式指定需要的参数,比如:
CASE Db_Name: WHEN "Test": // 只传递-db参数,覆盖其他多余参数 CONNECT TO (-db test) NO-PARAMETERS. END. OTHERWISE: CONNECT TO (-db production) NO-PARAMETERS. END. END CASE.
验证修改效果
修改后运行代码,看看错误1402是否消失,再用DISPLAY SESSION:DB-NAME.确认连接的数据库是否符合预期。
内容的提问来源于stack exchange,提问作者Gaetano Herman
相关产品推荐
相关产品推荐

