Это кажется плохой идеей и подходом к этому решению.
Прежде всего, если клиент запускает Access как эксклюзивный, то Access или SQL-сервер не смогут установить успешную ссылку.
И вы должны убедиться, что SQL-сервер НЕ пытается открыть (связать) эксклюзивную базу данных доступа на стороне клиента.Возможно, когда вы тестировали из SSMS, у вас не было запущенной копии доступа с тем же открытым файлом accDB.Я не посмотрел близко, но я полагаю, что по умолчанию для ссылки сервера на Access является эксклюзивным (это означает, что файл accDB на стороне клиента не может быть открыт, пока клиент Access имеет тот же файл, открытый.
Хуже, если вы обновите какие-либо данныечерез сторону SERVER в клиенте, тогда любая строка будет перетащена на сервер sql, обновлена и затем отправлена обратно по проводам. Почему бы не переместить этот код обновления локально, и вы НЕ генерируете сетевой трафик для достижения этого обновления локальных данных.
Такие обновления через «wan», а не по локальной сети, ОЧЕНЬ медленные. Пока вы используете систему обновления SQL, вы на самом деле «сырые» чтения данных из локального файла, и этоОЧЕНЬ плохая идея по WAN-соединению. Если вы испытываете разрыв в соединении, вы собираетесь повредить и взорвать локальный файл accDB.
Связанные таблицы из Access to sql server в порядке, так как «файл»не читается и не передается по сети. Однако подключение SQL-сервера к локальному клиенту accDB означает, что выигрышФайловая система dows проходит через SQL-сервер через это соединение VPN / WAN.Вы действительно хотите этого избежать.Это означает, что SQL-сервер выполняет открытие файла, и файловые буферы вдов и чтение происходит на стороне сервера.Ядро ole jet / ace работает на стороне сервера, но чтение файла происходит на стороне клиента.
Я объясняю, почему это большая проблема «порчи» в моей статье:
http://www.kallal.ca/Wan/Wans.html
Кроме того, «модель» и «идея» связанных серверов на самом деле не являются моделью для «прыжка и выхода».Таким образом, связанные серверы представляют собой больше «обслуживающий» тип процесса, в котором вы настраиваете связанный сервер, и он вроде остается на месте.
Таким образом, некая многопользовательская система, в которой связывание других обслуживаний (или файла доступа) на лету, на самом деле не является идеей и концепцией связанных серверов.
Также не ясно, что произойдет, когда у вас будет более одного пользователя для такой системы?Я предполагаю, что могут быть созданы разные именованные связанные серверы, но опять же, ваш код t-sql должен работать на «многих» разных связанных серверах.(так что код должен быть изменен).
Это означает, что ваш t-sql ether должен работать для «многих» разных связанных серверов с одним и тем же кодом t-sql, или вы всегда используете одно и то же имя для связанного сервера.Если вы используете то же имя, то один клиент сможет работать.
Чем больше я думаю об этом подходе, тем хуже он становится.
Мне кажется, гораздо более плавный подход заключался бы в том, чтобы Access связывал таблицы с сервером SQL.
Если вы используете аутентификацию домена для подключения к серверу sql, то любой пользователь, скажем, Excel, может с легкостью выполнить некоторые запросы к этому серверу sql, пока ваша VPN активна.То же самое происходит, если они запускают SSMS.
Я бы подумал:
Использовать вход на сервер SQL и, таким образом, авторизованные пользователи не могут извлекать или просматривать данные из этих таблиц в Excel, Access или некоторых другихдругая клиентская программа, которая может легко обращаться к серверу SQL (включая локальный клиент, на котором работает SSMS).
НЕ включайте UID / пароль в связанные таблицы.Это означает, что вам не нужно включать (в текстовом виде) uid / logon, который вы используете для этого процесса.
Непонятно, скрывает ли приложение AccessОн получает доступ к интерфейсу, но даже если по какой-то причине пользователь пропустит интерфейс вашего приложения, он получит сообщение об ошибке, пытаясь открыть существующую связанную таблицу.(Ссылки не будут работать до тех пор, пока ваш код VBA не выполнит простой вход в систему).Наличие «входа» клиента не требует создания каких-либо новых ссылок на стороне клиента (ни на стороне сервера в этом отношении).
Я бы настоятельно рекомендовал установить / установить соединение на стороне клиента, и я бы попыталсяОбновление локальных клиентских таблиц происходит с помощью кода на стороне клиента для устранения сетевого трафика, но хуже всего то, что «открываются» файлы Windows по сети.Если этот файл «открыт», и ваше соединение потеряно, то вы обрезаете открытый файл Windows «вживую», и простые вещи, такие как очистка локального дискового кэша и т. Д., Не будут работать и будут потеряны.
Если вы используете ссылки со стороны клиента, то вы никогда не откроете файл windows в этой сети (только соединение через сокет ODBC).
Так же, как приложение доступа, разделенное на внешний интерфейс и внутренний интерфейс, может хорошо работать в твердой локальной сети, такая настройка работает очень плохо в WAN + VPN.
В итоге:Вероятно, вы можете заставить вашу настройку работать, но я не рекомендую ее.
Что искать:
Проверить эксклюзивное открытие / использование файла accDB (убедитесь, что доступ незапуск или открытие на стороне клиента файла accDB как эксклюзивного).Если это произойдет, то sql сторона не сможет сделать ссылку на файл.
Проверьте и убедитесь, что при создании ссылки sql на файл accDB с той стороны сервера, на котором сервер sql не пытается выполнить «исключение».(это будет означать, что Access local не может открыть или использовать файл).
Тот факт, что мы уже «проверяем» оба конца на предмет чего-то, что приведет к сбою этой установки, уже является точкой сбоя, а мы (выНадо убедиться, что все сделано правильно.
Как уже отмечалось, я не рекомендую открывать файл Windows в такой сети.
Так что проверьте эксклюзивный выпуск (оба конца).Тем не менее, я бы посмотрел на то, как Access установит соединение на стороне клиента и выполнит sprocЕсли некоторые данные требуются для окончательного обновления и проверки, происходящей в этом sproc, то выполните проверку на стороне сервера, перенаправьте полученные необходимые данные клиенту и затем выполните локальный код для обновления.
Итакхотя я не думаю, что эта установка будет надежной, сверху я бы проверил «исключительную» проблему - оба конца должны избегать открытия файла accDB как исключительного.