Устаревшее приложение VB6 под ошибкой Win7 SQL

У нас довольно неудачное унаследованное приложение, изначально написанное на VB6, которое предшествовало любому в нашем ИТ-отделе как минимум на 5 лет. У нас есть контрактный разработчик для текущего обслуживания, и, где он может переписать разделы в код.NET (не уверен насчет его методов здесь, это вспомогательная работа для его обычной работы в качестве инженера IBM), приложение прекрасно работает (например, оно есть) под windows XP. У нас есть только несколько машин с Windows 7, в основном для тестирования, и это приложение, похоже, врезается в стену. Такие вещи, как фон не загружается и ошибки SQL. Это даже работает под администратором.

Запуск трассировки SQL из панели управления ODBC показывает несколько интересных вещей. Первоначально он успешно устанавливает соединение с базой данных, где выполняет запрос, чтобы определить, работает ли правильная версия. Этот запрос работает нормально.

            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, а мой виртуальный компьютер работает под управлением Win7 64-битной, и оба имеют ту же проблему, так что это можно исключить.

Я уже пытался переустановить собственный клиент SQL и среду выполнения VB, а также соответствующее приложение. Надеюсь, я найду решение и не буду прибегать к использованию виртуальной машины XP.

Редактировать - Ну, после многих попыток мы были вынуждены использовать виртуальную машину XP в качестве решения здесь. Либо компоненты VB не настолько совместимы, как они утверждают, или это древнее приложение делает что-то смешное.

2 ответа

Решение

Режим XP оказался единственным решением, которое будет работать.

Если это приложение, которое запускается с рабочего стола (т.е. не как служба), вы пытались настроить приложение для работы в режиме совместимости? У меня была похожая проблема с программой VB6 (одна и та же функция для чтения реестра, вызываемого из двух разных частей программы, одна работает, другая нет, но из VB6 IDE обе ​​работают), просто щелкнув правой кнопкой мыши и выполнив тест Win7 для совместимости и выбора режима XP SP2 вылечил проблему.

Другие вопросы по тегам