Пользовательская форма Excel VBA для соединения с SQLOLEDB работает локально, но не удаленно - ошибка времени выполнения '-2147467259 (80004005)': [DBNETLIB]

Это была неделя исследований, и я до сих пор не могу решить эту проблему. Я создал форму пользователя Excel VBA, которая вставляет данные в соединение SQLOLEDB (SQLEXPRESS 2017) при нажатии кнопки CommandButton (называемой "Сохранить"). Локально (localhost) это работает как шарм. Все данные из столбцов успешно вставляются в таблицу БД SQL. Никаких ошибок вообще.

Однако, когда какой-либо клиент пытается выполнить то же действие, я получаю сообщение об ошибке "-2147467259 (80004005)": [DBNETLIB](ConnectionOpen (connect()).) SQL Server не существует или доступ запрещен.

Это то, что я пробовал до сих пор:

  • Я создал логин для клиента в моей SQL Server Management Studio.
  • Я предоставил клиенту разрешения на вставку для dbo.Table.
  • Я удостоверился, что "Разрешить удаленные подключения к этому серверу" отмечен в "Подключения" в свойствах моего сервера в SQL Server Management Studio.
  • Я добавил правила входящего и исходящего трафика в своем брандмауэре Windows, чтобы открыть порт 1433 на моем компьютере, где установлен сервер.
  • Я добавил правила входящих и исходящих событий в брандмауэре Windows, чтобы открыть порт 1433 на компьютере моего клиента.
  • Я проверил свой администратор источника данных ODBC (32- и 64-разрядный) и обнаружил, что у меня установлен собственный клиент SQL Server RDA 11.0, которого нет у моего клиента. Я исследовал, и больше невозможно установить эту версию. Я также узнал о SQL Server Compact 3.5, который предположительно поставляется с заменой RDA, называемой службами синхронизации для ADO.NET. Я установил 32- и 64-разрядные версии как на своем компьютере, так и на клиентах.
  • Я также пытался установить подключение к удаленному рабочему столу, используя свою собственную регистрационную информацию, но когда я тестировал свою форму пользователя или запускал свой тестер. UDL при попытке подключения к этому серверу я получаю то же сообщение об ошибке.

Это строка, которую я использую, чтобы установить это соединение:

conn.Open "Provider=SQLOLEDB;Data Source=PCNAME\SQLEXPRESS;Initial Catalog=DATABASENAME;Integrated Security=SSPI;Trusted_Connection=Yes"

conn.Execute "INSERT INTO dbo.TABLENAME (COLUMNNAME, COLUMNNAME2) values ('" & sColumnVariable & "', '" & sColumnVariable2 & "')"

Мой вопрос будет:

Как мне удается разрешить клиентам успешно вставлять в эту базу данных / таблицу SQL?

В чем проблема? Это в моих настройках компьютеров? Находится ли это в моих настройках компьютеров клиентов? Лежит ли он в моей SQL Server Management Studio (возможно, неправильно / отсутствуют разрешения)?

Я заранее ценю вашу помощь! С уважением, Дейв.

3 ответа

Решение

Я смог понять это. Это было связано с IP. Я использовал мой IP-адрес для подключения по локальной сети ТОЛЬКО без \SQLEXPRESS вместе с новым пользователем, которого я создал в SQL Server Management Studio в строке подключения:

conn.Open "Поставщик =SQLOLEDB; Источник данных =IPADDRESS; Начальный каталог =DATABASENAME; Интегрированная безопасность = SSPI; Идентификатор пользователя =MySQLTest; пароль =myPassc0de;

Я так счастлива.

Вы должны использовать IP-адрес для подключения, например:

  Data Source=101.101.101.101\SQLEXPRESS;
  1. Откройте приглашение DOS на компьютере, где расположен SQL Server Express, и введите ipconfig
  2. Получить IP-адрес и использовать его в строке подключения

LocalHost просто ссылается на ваш собственный компьютер. Поэтому, если на каждом клиентском компьютере не запущен SQL Express, он не будет работать.

Вам нужно использовать правильное имя компьютера или IP-адрес.

SQL Express работает на Windows Server?

Я уверен, что это требование, если вы хотите, чтобы другие компьютеры общались с вашей базой данных SQL Server Express. Это нормально использовать для локального тестирования, но вам нужно установить SQL Server на ПК, на котором фактически работает Windows Server, чтобы иметь возможность принимать и маршрутизировать соединения должным образом. Поэтому, пока SQL Server Express бесплатен, вам придется платить за Windows Server, если у вас его еще нет.

Если нет, я хотел бы знать, как обойтись с моим ИТ-отделом, чтобы я мог что-то сделать.

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