Обновление таблицы ссылок доступа при изменении столбцов базовой таблицы SQL Server - PullRequest
0 голосов
/ 16 апреля 2009

На работе у нас есть база данных SQL Server, к которой несколько пользователей подключаются (только для чтения), используя Access 2003.

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

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

Однако, когда они смотрят на воссозданную таблицу из Access, она все равно показывает заголовки столбцов, которые были там, когда таблица была впервые связана с.

Есть ли способ, которым я могу программно пересвязывать таблицу каждый раз, когда они открывают базу данных Access?

Ответы [ 3 ]

3 голосов
/ 21 апреля 2009

В итоге я создал функцию VBA, которая выглядит примерно так (требуется обработка ошибок!)

Public Function ReConnectToLinkTable()

Dim db As Dao.Database
Dim tdf As Dao.TableDef

Set db = CurrentDb
Set tdf = db.CreateTableDef("local_table_name")

tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server_name;UID=user_name;" & _ 
              "PWD=password;APP=Microsoft Data Access Conponents;" & _
              "DATABASE=database_name"
tdf.Attributes = TableDefAttributeEnum.dbAttachSavePWD
tdf.SourceTableName = "server_table_name"    

db.TableDefs.Delete ("local_table_name")
db.TableDefs.Append tdf

End Function

Затем я создал макрос с именем AutoExec (имя гарантирует, что он вызывается при открытии файла Access), который имеет действие RunCode, которое вызывает функцию ReconnectToLinkTable ().

1 голос
/ 17 апреля 2009

Связанные таблицы ODBC прерываются при изменении таблицы или представления на сервере. Некоторые изменения могут привести к тому, что они станут доступными только для чтения, другие просто не будут включать все столбцы.

Я обнаружил, что обновление строки подключения не может решить эту проблему. Обычно он исправляет пропущенные поля, но все еще может быть доступен только для чтения. Единственный надежный способ сделать это - воссоздать связанную таблицу на лету.

Другая альтернатива - вообще не использовать связанную таблицу, а использовать сохраненный QueryDef с соответствующей строкой соединения. Это никогда не придется обновлять, но это может быть проблемой производительности, поскольку метаданные, хранящиеся в ссылке на таблицу, помогают Access выяснить, как получить данные. Без этих метаданных, хранящихся в ссылке на таблицу, он должен получать эту информацию с сервера при каждом запуске запроса.

0 голосов
/ 16 апреля 2009

Что-то вроде обычно используется этот фрагмент . Поищите в Google «таблицу ссылок обновления MS Access», и вы найдете различные решения, подобные этому.

...