Как «связать» связанные таблицы в Access?

Мой сценарий. Компьютер A имеет базу данных Access, которая содержит связанные таблицы. Эти связанные таблицы фактически находятся в другой базе данных Access на компьютере B. Пока ничего необычного.

Теперь мы создаем базу данных SQL Server и устанавливаем ссылки на эти таблицы в базе данных Access на компьютере B; мы настраиваем DSN компьютера, чтобы определить необходимое соединение ODBC на компьютере B. База данных Access B теперь содержит как локальные таблицы, так и связанные таблицы SQL.

Доступ к базе данных A теперь хочет связать с новыми таблицами доступа к базе данных B - но только ее локальные таблицы отображаются в диалоговом окне для добавления связанной таблицы. Похоже, что вы не можете "ссылаться на связанную таблицу" в Access ...

Но так ли это на самом деле? Мы хотим представить ссылки таблицы SQL базы данных B на базу данных A , как если бы они были локальными таблицами ; то есть база данных A не знает, что новые таблицы в базе данных B на самом деле не являются локальными.

Конечно, мы могли бы связать таблицы SQL непосредственно с базой данных A, настроив DSN на этом компьютере, но мы не хотим этого делать. Мы хотели бы использовать компьютер /базу данных B в качестве связующего звена или «шлюза», который беспрепятственно представляет локальные таблицы и таблицы SQL для других клиентских приложений Access в сети. Это только временная настройка, которая позволит нам постепенно переносить все клиентские приложения Access в таблицы на основе SQL Server без необходимости изменять большой объем кода.

Можно ли это сделать? Есть ли другое работоспособное решение или сценарий, о котором мы не думали?

7 голосов | спросил user105064 12 Mayam09 2009, 04:01:42

3 ответа


0

Нет - вы можете ссылаться только на реальные таблицы - вам нужно воссоздать ссылки на сервер SQL, которые вы сделали в базе данных B, для базы данных A

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

ИЗМЕНИТЬ

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

ODBC;Driver={SQL Server};Server=<server name/IP>;Database=<database>;UID=<user>;PWD=<password>

Это связывает таблицу

Dim db As Database
Dim TD As TableDef
Dim sTableName As String  ''MS Access name (can be same as SQL Server name)
Dim sServerTableName As String  ''SQL Server Name 

sTable = "Table1"
sServerTableName  = "dbo.Table1"
sServerConnect = "ODBC;Driver={SQL Server};Server=Localhost;Database=DB1;"

Set TD = db.CreateTableDef(sTableName)
TD.Connect = sServerConnect
TD.SourceTableName = sServerTableName

db.TableDefs.Append TD
db.TableDefs.Refresh
ответил DJ. 12 Mayam09 2009, 09:34:10
0

Не могли бы вы создать запрос /представление для B, которое является просто представлением связанной таблицы на C, чтобы затем A могло получить доступ к запросу /представлению на B (который фактически является таблицей на C)?

, как:

Связанный запрос на A -> Запрос на B
                                :
                       Связанная таблица на B -> Настоящий стол на С

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

Еще одна идея: можете ли вы настроить репликацию между B и C так, чтобы все таблицы C реплицировались в B, где A может получить к ним доступ?

ответил codeulike 12 Mayam09 2009, 04:12:33
0

Что касается предложения запроса, то можно использовать предложение IN 'C:\OtherDatabase.mdb' в FROM предложение:

SELECT qryMyTable.*
FROM qryMyTable IN 'c:\OtherDatabase.mdb';

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

ответил David-W-Fenton 13 Mayam09 2009, 00:12:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132