Доступ к настройкам подключения ODBC для кэширования - PullRequest
1 голос
/ 05 марта 2009

Моя компания интенсивно использует SAI, и для создания отчетов из этой системы мы используем ODBC для подключения к БД. В настоящее время наша установка является региональной, и поэтому у нас есть отдельные среды для каждого региона. Пытаясь получить доступ к этим средам с помощью MS ACCESS, я обнаружил, что не могу связываться с таблицами в разных средах и получать точные данные.

Я могу создавать ссылки на различные среды, используя определенные DSN. Затем я могу получить доступ к данным, однако первая открываемая таблица, независимо от того, к какой области она принадлежит, работает нормально. Однако после этого все таблицы, независимо от региона, к которому они принадлежат, используют настройки DSN из первой таблицы, которая была открыта. Если я закрываю Access и перезагружаюсь, я могу начать с данных из другой среды, которая затем будет работать, однако остальные данные будут отражать эти настройки DSN. Кроме того, когда я смотрю на страницу свойств, настройки DSN остаются такими, какими они должны быть.

Позвольте мне также добавить, что таблицы для каждого региона имеют одинаковое имя. То есть таблица продаж - это продажи во всех средах, таблица производства - это таблица производства во всех регионах. В результате, когда я ссылаюсь на таблицу продаж из нескольких сред, необходимо переименовать ее в MS ACCESS.

Ответы [ 3 ]

1 голос
/ 12 марта 2009

Я бы посмотрел на этот ТА вопрос ответил в прошлом месяце.

В нем описывается пара методов, заставляющих Access повторно связать таблицы ODBC, и, если все не удается, вы можете программно перезапустить базу данных с помощью небольшой функции , которую вы найдете в моем блоге .

1 голос
/ 04 апреля 2017

Я подозреваю, что вы пропустили несколько деталей, которые нам нужны.

Когда вы открываете эту первую таблицу, вам предлагается войти в систему? (это важная информация). Если вы используете «разные» ссылки и сохраняете идентификатор пользователя / пароль в этих ссылках, вы не должны получать никаких запросов ODBC, и поэтому вы можете легко работать с несколькими регионами.

Однако, похоже, у вас есть один набор ссылок, и вы хотите перенаправить / повторно связать с другим сервером. Это может работать, но НЕ, если вы видите / разрешаете ODBC-запросы.

Если вы включите ИД пользователя / пароль в ссылки, то вы сможете повторно связать (переключиться) на любую систему. Однако, когда вы сделаете это, ОБА и комбинация uid / пароль будут и будут активны в одно и то же время.

Если все идет ОЧЕНЬ неправильно, то, что, если вы повторно связываетесь с неправильным входом в систему, тогда будет использоваться предыдущий uid / пароль! И на самом деле, если вы ТЕСТИРОВАНИЕ на вход в систему (даже плохой!), То будет использоваться первый законный вход! В конце концов, это означает, что слабым местом здесь является КОГДА / если вы запрашиваете вход в систему, он вернет «да» для легального входа в систему ДАЖЕ, если вход в систему плохой! (потому что Access восстановит прежний законный вход в систему). Вы ДОЛЖНЫ решить эту проблему.

Так что, скорее всего, вещи указывают на ваш код, который выполняет «проверку» входа перед повторной ссылкой. Я хотел бы предложить, чтобы ваш «тестовый» код входа в систему возвращал «ОК», тогда ВЫ выполняете сквозной запрос для возврата имени базы данных - если это имя базы данных / сервер неверно, то вы отклоняете этот вход в систему и НЕ выполняете повторную ссылку.

Так важно, как вы тестируете новый вход в систему / сервер? И вы, безусловно, НИКОГДА не хотите, чтобы появлялось приглашение входа в ODBC - поскольку, если пользователь отменяет или вводит неправильный вход в систему, ваш код повторной ссылки будет использовать предыдущий вход в кэш.

Вы должны иметь возможность повторно связать тот же самый заданный набор таблиц и указать их на другом сервере - но вы должны убедиться, что вход в систему, который вы использовали, действительно работал.

И последнее, но не менее важное: Access ВСЕГДА использует соединение без DSN. ЕДИНСТВЕННОЕ исключение, если вы используете системный DSN. Поэтому, когда вы создаете файл DSN и повторно связываете его, точка DSN FROM THAT игнорируется и не используется. (это позволяет вам распространять приложение на другие рабочие столы без необходимости копировать / включать DSN). Таким образом, в действительности вы почти всегда используете соединение без DSN, а если нет, то я предлагаю вам сбросить DSN системы, так как Access не может использовать USER / пароль из таких DSN системы - даже если вы включите в него USER / пароль DSN ВСЕ ЕЩЕ игнорируется.

Кроме того, когда вы повторно ссылаетесь, используете ли вы dbAttachSavePWD - вам это не нужно, но я бы для тестирования включил его.

Если вы используете / разрешаете драйверу ODBC запрашивать у пользователя вход в систему - вы должны устранить это и убедиться, что ваш код выполняет вход.

0 голосов
/ 09 марта 2009

Один из вариантов, который вы можете иметь (хотя и немного затянутый), - создать базу данных доступа для каждого региона, которая ссылается на таблицы из одного региона. например, храните таблицу продаж и производственную таблицу для региона Европы в одной базе данных доступа и помещайте их из Азии в другую базу данных.

Как только вы настроите эту настройку, вам может оказаться намного проще использовать третью базу данных доступа для связи с двумя другими базами доступа.

Надеюсь, это полезно.

...