PowerBuilder 6迁移至2017后用户端出现SQL Server Native Client未安装错误求助
排查PB2017迁移后用户机器EXE无法运行的问题
这问题我之前帮团队处理过类似的,给你几个实操的排查方向,按优先级来试:
1. 优先解决SQL Native Client的注册问题
你手动复制SQLNCLI*文件是没用的——OLE DB驱动是COM组件,必须通过官方安装包完成注册才能被PB调用。
- 确认你用的是SQL Server 2012对应的SQL Native Client版本(SQLNCLI11),别装错成其他版本(比如SQLNCLI10对应2008)
- 给用户机器安装官方的
sqlncli.msi(32位/64位要和你的PB EXE编译架构一致:如果是32位EXE,哪怕用户是64位系统,也要装32位驱动)
2. 检查PB2017的运行时库是否齐全
开发者机器因为装了PB开发环境,自带运行时,但用户机器需要部署PB的核心运行库:
- 用PB2017自带的Runtime Packager生成对应版本的运行库安装包,给用户机器安装;或者把以下关键文件复制到应用目录:
PBVM170.dllPBODB170.dllPBDWE170.dll(如果用到数据窗口)libjcc.dll(通用组件)
3. 验证连接字符串的正确性和权限
- 检查PB里的连接参数:比如是否指定了正确的
Server、Database,身份验证方式是否适配用户环境(Windows认证的话,用户机器的账号要有数据库访问权限;SQL Server认证的话,Uid和Pwd是否正确) - 让用户用SQL Server Management Studio在本地测试连接目标数据库,排除网络、防火墙、数据库权限的问题
4. 排查32位/64位兼容性问题
- 如果你的PB EXE是32位编译的,必须确保用户机器装了32位的SQL Native Client——64位驱动无法被32位程序加载,哪怕系统是64位的
- 可以在PB编译时确认目标架构:右键项目→Properties→Build→Target Type选择对应的架构
5. 添加错误日志定位具体问题
如果以上都排查了还是不行,给你的PB应用加个错误捕获逻辑,把连接失败的具体信息输出到日志:
TRY SQLCA.DBMS = "SNC SQL Native Client(OLE DB)" SQLCA.LogId = "your_user" SQLCA.LogPass = "your_pwd" SQLCA.ServerName = "your_server" SQLCA.Database = "your_db" CONNECT USING SQLCA; CATCH (runtimeerror er) // 把错误信息写入日志文件 int li_file li_file = FileOpen("connect_error.log", LineMode!, Write!, LockWrite!, Append!) if li_file > 0 then FileWrite(li_file, "连接失败时间: " + String(Now())) FileWrite(li_file, "错误代码: " + String(SQLCA.SQLCode)) FileWrite(li_file, "错误信息: " + SQLCA.SQLErrText) FileWrite(li_file, "PB错误信息: " + er.GetMessage()) FileClose(li_file) end if END TRY
让用户运行EXE后把connect_error.log发给你,就能精准定位是驱动问题、权限问题还是连接参数问题了。
内容的提问来源于stack exchange,提问作者SivaM
相关产品推荐
相关产品推荐

