Win7 SQL 오류가 발생한 레거시 VB6 애플리케이션

Win7 SQL 오류가 발생한 레거시 VB6 애플리케이션

우리 회사에는 원래 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

그런 다음 연결이 끊어진 것처럼 보이고 동일한 DB에 연결되어 있음에도 불구하고 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 모드는 결국 작동하는 유일한 솔루션이 되었습니다.

관련 정보