Внутреннее объединение через базы данных множественного доступа - PullRequest
3 голосов
/ 23 сентября 2008

Я перепроектирую приложение для ASP.NET CMS, которое мне действительно не нравится. Я немного улучшил производительность, чтобы обнаружить, что эта CMS не только использует MS SQL, но и некоторые пользователи просто используют базу данных MS Access.

Проблема в том, что у меня есть несколько таблиц, к которым я присоединяюсь, которые в версии MS Access находятся в двух разных файлах. Мне не разрешено просто перемещать таблицы в другой файл MDB.

Я сейчас пытаюсь найти хороший способ «внутреннего соединения» между файлами базы данных с множественным доступом?

Было бы очень жаль, если бы я собрал все данные и сделал это программно!

Спасибо

Ответы [ 4 ]

11 голосов
/ 23 сентября 2008

Вам не нужны связанные таблицы вообще. Существует два подхода к использованию данных из разных MDB, которые можно использовать без связанной таблицы. Во-первых, используйте «IN 'c: \ MyDBs \ Access.mdb'» в предложении FROM вашего SQL. Один из ваших сохраненных запросов будет выглядеть так:

SELECT MyTable.*
FROM MyTable IN 'c:\MyDBs\Access.mdb'

и другой сохраненный запрос будет:

SELECT OtherTable.*
FROM OtherTable IN 'c:\MyDBs\Other.mdb'

Затем можно сохранить эти запросы, а затем использовать сохраненные запросы для объединения двух таблиц.

Кроме того, вы можете управлять всем этим в одном операторе SQL, указав путь к исходному MDB для каждой таблицы в предложении FROM, таким образом:

SELECT MyTable.ID, OtherTable.OtherField
FROM [c:\MyDBs\Access.mdb].MyTable 
  INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID

Имейте в виду одну вещь, хотя:

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

3 голосов
/ 23 сентября 2008

Если у вас есть доступ к MDB и вы можете изменить их, вы можете рассмотреть возможность использования связанных таблиц. Access предоставляет возможность связываться с внешними данными (в других MDB, в файлах Excel, даже в SQL Server или Oracle), а затем вы можете выполнять свои объединения по ссылкам.

Я бы настоятельно рекомендовал тестировать производительность такой опции. Если выполнимо перенести пользователей баз данных Access в другую систему (даже в SQL Express), это также было бы предпочтительным - в прошлом я проверял, что больше нет 64-битных драйверов JET для ODBC, поэтому, если приложение когда-либо размещается в 64-битная среда, эти пользователи будут храниться.

1 голос
/ 23 сентября 2008

Внутри одной БД доступа вы можете создавать «связанные таблицы», которые указывают на другую БД. Вы должны (я думаю) иметь возможность запрашивать таблицы, как если бы они оба существовали в одной и той же БД.

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

0 голосов
/ 23 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...