Win7 下旧版 VB6 应用程序 SQL 错误

Win7 下旧版 VB6 应用程序 SQL 错误

我们工作中有一个相当不幸的遗留应用程序,最初是用 VB6 编写的,它比我们 IT 部门的任何人都早至少 5 年。我们有一个合同开发人员负责持续维护,他会将部分内容重写为 .NET 代码(不确定他的技术,这是他作为 IBM 工程师的日常工作的副业),该应用程序在 Windows XP 下运行良好(例如)。我们只有几台 Windows 7 机器主要用于测试,这个应用程序似乎遇到了障碍。例如背景无法加载和 SQL 错误。它甚至在管理员下运行。

从 ODBC 控制面板运行 SQL 跟踪会显示几个有趣的事情。它最初成功连接到数据库,并运行查询以确定它是否正在运行正确的版本。此查询运行正常。

            558-1af0 ENTER SQLExecDirectW 
  HSTMT               0x020D7548
  WCHAR *             0x04C8F0F0 [     115] "SELECT count(*) c FROM tblSoftwareVersion WHERE  fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
  SDWORD                   115

BMS             558-1af0 EXIT  SQLExecDirectW  with return code 1 (SQL_SUCCESS_WITH_INFO)
  HSTMT               0x020D7548
  WCHAR *             0x04C8F0F0 [     115] "SELECT count(*) c FROM tblSoftwareVersion WHERE  fldSoftwareVersion = '123456' AND fldSoftwareName = 'Application.VB'"
  SDWORD                   115

然后它似乎断开了连接,尽管它连接到同一个数据库,但找不到 ODBC 连接。从跟踪来看,它似乎配置了连接,然后开始触发 SQLFreeStmt 来解除绑定并关闭,然后当它在应用程序中尝试执行其操作时,没有连接。

558-1af0 ENTER SQLFreeStmt 
  HSTMT               0x020D7548
  UWORD                        2 <SQL_UNBIND>

BMS             558-1af0 EXIT  SQLFreeStmt  with return code 0 (SQL_SUCCESS)
  HSTMT               0x020D7548
  UWORD                        2 <SQL_UNBIND>

然后当我尝试做一些提取数据的事情时就会发生这种情况

            558-1af0 ENTER SQLDriverConnectW 
  HDBC                0x020DDA00
  HWND                0x00000000
  WCHAR *             0x73EF8634 [      -3] "******\ 0"
  SWORD                       -3 
  WCHAR *             0x73EF8634 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

BMS             558-1af0 EXIT  SQLDriverConnectW  with return code -1 (SQL_ERROR)
  HDBC                0x020DDA00
  HWND                0x00000000
  WCHAR *             0x73EF8634 [      -3] "******\ 0"
  SWORD                       -3 
  WCHAR *             0x73EF8634 
  SWORD                       -3 
  SWORD *             0x00000000
  UWORD                        0 <SQL_DRIVER_NOPROMPT>

  DIAG [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0)

我对这个问题的搜索几乎都涉及到编程问题,其中连接字符串有问题。不过,在这个特定场景中唯一不同的是 Windows 7,我知道连接字符串没有问题,因为它可以在 XP 机器上运行。VB 组件应该在 Win7 下仍能正常工作。我的电脑运行的是 32 位 Win7,我的 VP 运行的是 Win7 64 位,两者都有同样的问题,所以可以排除这个可能性。

我已经尝试重新安装 SQL Native Client 和 VB 运行时以及有问题的应用程序。希望我能找到解决方案,而不必求助于使用 XP VM。

编辑 - 经过多次尝试,我们不得不使用 XP VM 作为解决方案。要么是 VB 组件不像他们声称的那样兼容,要么是这个古老的应用程序正在做一些奇怪的事情。

答案1

如果它是一个从桌面运行的应用程序(即不是作为服务运行),您是否尝试将应用程序设置为在兼容模式下运行?我在使用 VB6 程序时遇到了类似的问题(从程序的两个不同部分调用相同的函数来读取注册表,一个可以工作,另一个不可以,但从 VB6 IDE 中两个都可以工作),只需右键单击并让 Win7 测试兼容性并选择 XP SP2 模式即可解决问题。

答案2

XP 模式最终成为唯一可行的解​​决方案。

相关内容