2008-09-22 4 views
3

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

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

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

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

Благодаря

ответ

3

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

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

+0

Вы уверены, что отношения могут быть реализованы с помощью таблиц, поступающих из разных баз данных? Я не уверен, что инструкция INNER JOIN была бы успешной в такой ситуации (на самом деле я убежден, что вы получите сообщение об ошибке!) – 2008-09-22 21:23:21

+0

Да, Access разрешил произвольные отношения между связанными таблицами вплоть до Windows 3.1 версии. Однако он часто выводит всю таблицу «на лету», что может быть проблемой при работе с большими таблицами. – user11318 2008-09-22 22:10:22

1

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

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

0

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

11

Вам не нужны связанные таблицы. Существует два подхода к использованию данных из разных 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 не обязательно сможет использовать индексы из этих таблиц для соединения (независимо от того, будет ли он использовать их для критериев в отдельных полях, это другой вопрос), поэтому это может быть очень медленно (в моих тестах это нет, но я не использую большие наборы данных для тестирования). Но эта проблема производительности относится и к связанным таблицам.

Смежные вопросы