Кажется, получаю неправильную строку подключения из tabledef - PullRequest
1 голос
/ 19 августа 2011

Использование Ms Access ...

Я пытаюсь изменить пользователя, к которому я подключен к базе данных SQL Server, из Access. Форма запуска из моего приложения доступа динамически подключается к таблицам с помощью измененной версии процедуры, размещенной в КБ Microsoft. В Essence он удаляет tabledef, который соответствует имени localName, с которым вы его вызываете, вызывает Currentdb.CreateTableDef, чтобы создать новый файл с соответствующей новой строкой подключения, и добавляет его в коллекцию CurrentDb.TableDefs. Насколько я вижу, это функция добавления, которая фактически связывается с базой данных и выдает ошибку, если строка подключения неверна.

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

Сейчас я пытаюсь второй проход через эту форму запуска с новой комбинацией пользователя и пароля, чтобы проверить различные разрешения в базе данных.

Затем я создал новую строку подключения с измененными именем и паролем и в настоящее время выполняю пошаговую процедуру, которую я только что описал.

У меня есть переменная td, которая содержит только что созданную таблицу, и я как раз перед ее добавлением в коллекцию Currentdb.TableDefs

В окне «Немедленное» отладчика ?td.connect правильно отображает строку подключения с вновь сформированной строкой подключения, а ?td.name дает tblConfig в качестве имени таблицы.

Просто чтобы убедиться, что TableDef был правильно удален из текущей коллекции, я сделал ?CurrentDb.Tabledefs("tblConfig").Connect из непосредственного окна и был вознагражден диалоговым окном, в котором говорилось, что в коллекции нет члена с таким именем

Затем я перешагнул через одну линию

CurrentDb.TableDefs.Append td

А теперь снова вызовите ?CurrentDb.Tabledefs("tblConfig").Connect из окна Immediate отладчиков, и ответом будет старая строка подключения, а не новая.

В этой процедуре активен OnError, но он не активируется во время одного шага.

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

У кого-нибудь есть лучшее объяснение?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Оказывается, строка подключения действительно кешируется

http://blogs.office.com/b/microsoft-access/archive/2011/04/08/power-tip-improve-the-security-of-database-connections.aspx

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

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

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

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

...