2016-08-12 4 views
0

У меня есть база данных Access, которые хранятся на сетевом диске. Эти базы данных имеют свои собственные таблицы и ссылки на другие таблицы из других баз данных этого диска. Поскольку запросы выполняются по сети, для их завершения требуется некоторое время. Есть ли способ создать опцию для копирования требуемых объектов в локальную папку, запустив запрос, а затем вернет результаты в исходную базу данных в сети?Запуск запроса доступа с сетевого диска локально

+2

Я думаю, что это займет слишком много работы, чтобы быть совершенным. Представьте, что 2 пользователя делают это в одно и то же время, тогда пользователь, который выполнил запрос позже, перезапишет работу предыдущего человека. Лучшее, что я хотел бы предложить, - это обновление до какого-то SQL-сервера. –

ответ

1

У меня есть эта проблема тоже. Я копирую исходные данные и свою базу данных на свой локальный диск и добавляю две вещи:

Сначала это таблица («связанный источник таблицы»), которая сообщает, где хранятся связанные таблицы. Первая строка имеет место, чтобы использовать, когда БД находится в сети, 2-го показывает источник данных, когда я на локальном компьютере (в моем случае, B :)

ID source path 
1 network \\usa0300swg02\sthq\corptax\tax\shared\Common Tables 2016.accdb 
2 local b:\Common Tables 2016.accdb 

Тогда у меня есть функция VBA, что я создал в AutoExec макрос, чтобы запустить всякий раз, когда я загрузить базу данных:

Function relink_tables() 

If Left(CurrentDb().Name, 2) = "C:" Or Left(CurrentDb().Name, 2) = "B:" Then 
    Source = "local" 
    Else: Source = "network" 
    End If 
Set rs = CurrentDb.OpenRecordset("select * from [linked table source] where source='" & Source & "'") 
Source = rs.Fields("path") 

For Each R In References 
    If InStr(R.Name, "Common Tables") > 0 Then Application.References.Remove R 
    Next R 
Application.References.AddFromFile Source 

x = 0 
Set TDefs = CurrentDb().TableDefs 
For Each table In TDefs 
    If InStr(table.Connect, "Common Tables") = 0 Then GoTo NT 
    table.Connect = ";DATABASE=" & Source 
    table.RefreshLink 
    x = x + 1 
NT: 
    Next table 
Finish: 
MsgBox "remapped " & x & " tables" 
End Function 

Примечания:

  • Это также обновляет ссылки на модуль кода - вы можете удалить эти строки если они вам не нужны
  • Возможно, вам потребуется настроить функцию для конкретной ситуации - в моем случае все мои связанные таблицы com из db, называемые «Common Tables», и я переписываю все из этого db. Ваши точные требования, вероятно, будут отличаться, но это может дать вам место для начала.
  • Это также очень удобно, когда я каждый день просматриваю базу данных - я просто обновляю источник связанных таблиц (с 2016 по 2017 год) и повторно -run the macro

Дополнительное примечание - как прокомментировал Хайнек Бернард выше, контроль версий и многопользовательский доступ являются большими соображениями. В моем случае я могу контролировать, кто еще использует db, когда я использую свою локальную копию. Другой вариант, если у вас есть SharePoint или что-то подобное, заключается в том, чтобы использовать его как репозиторий db в сети и использовать функции проверки и регистрации для контроля. Вам все равно нужно получить ссылки для размещения загруженных данных.

+0

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

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