DBNETLIB ConnectionOpen (Connect ()) ошибка при доступе приложения Delphi 2010 к SQL Server 2005 с драйверами OLEDB в Windows 7 x64 - PullRequest
1 голос
/ 31 марта 2011

Я создал приложение D2010, которое использует компонент TADOConnection для подключения к SQL Server с использованием драйверов OLEDB и tcp / ip. Проблема заключается в том, что мое приложение не может подключиться к базе данных, когда я запускаю ее (внутри IDE или нет) с сетевого диска. Каждый раз, когда я пытаюсь, я получаю эту ошибку через IDE:

---------------------------
Debugger Exception Notification
---------------------------
Project TroisTiers.exe raised exception class EOleException with message '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.'
---------------------------
Break   Continue   Help   
---------------------------

и я получаю «EOleException: Unspecified error» при запуске приложения вне IDE.

Дело в том, что когда я копирую .exe на локальный диск (C :), он работает мгновенно, без ошибок, без лагов. Когда я компилирую приложение D2010 на компьютере WinXP и запускаю его из Win7, оно также работает безупречно. Когда я беру .exe, который я собрал и запускаю на x86 Windows 7, я получаю те же ошибки, что и выше.

Я заметил, что при запуске приложения на сетевом диске загружаются следующие модули:

Module Load: WSHTCPIP.dll. No Debug Info. Base Address: $74CD0000. Process TroisTiers.exe (848)
Module Load: WSHIP6.dll. No Debug Info. Base Address: $74010000. Process TroisTiers.exe (848)
Module Load: DBnmpntw.dll. No Debug Info. Base Address: $750C0000. Process TroisTiers.exe (848)

Я утверждал, что приложение сначала пытается подключиться с использованием TCP / IP, а затем по какой-либо причине прибегает к именованным каналам. Просто для тестирования я активировал протокол именованных каналов на сервере, и он начал работать, но не каждый раз, и до установления соединения уходит до 10 секунд. Я деактивировал его, поскольку мы не подключаемся к производственным базам данных. Когда приложение выполняется локально (и показывает данные правильно), модуль DBnmpntw.dll загружается.

Когда я строю строку подключения (через файл .udl) и проверяю соединение, оно работает, хотя я не уверен, тестирую ли я через 64-битные или 32-битные драйверы.

Установка выходного каталога .exe на мой локальный диск пока является приемлемым решением, но мне бы очень хотелось знать, что является причиной этой проблемы, поскольку она усложняет работу в современной среде (дополнительная файлы рядом с .exe).

Дополнительная информация, для чего она стоит:

Моя строка подключения: 'Provider = SQLOLEDB.1; Persist Security Info = True; ID пользователя = *; Пароль = hunter2; Начальный каталог = [имя базы данных]; Источник данных = [IP-адрес сервера ]».

Я пытался принудительно использовать TCP / IP с "Network Library = DBMSSOCN;" но это не помогает.

Брандмауэры отключены на моем компьютере и на сервере;
McAfee AV на моем компьютере, управляемый через ePO;
SQL Server 2005 x64 работает на Win2k3 x64;
Windows 7 без установленного SP1;
cliconfg.exe -> активный протокол - только tcp / ip;

При необходимости могу предоставить дополнительную информацию.

1 Ответ

0 голосов
/ 03 августа 2011

Ваш .EXE слишком большой для работы на сетевом общем диске? У меня такой же опыт, когда размер .EXE превышает 25MB или что-то закрыто.

Решение простое, просто переместить .EXE обратно на локальный диск.

...