Мы уже говорили об этом раньше, но стоит повторить — связанные таблицы могут быть действительно полезны в ваших базах данных по ряду причин. Но одним большим недостатком связанных таблиц является производительность — выполнение запросов к ним, особенно если они не являются таблицами Microsoft Access (т. е. если это таблицы Excel, CSV или DBF файлы). Они могут быть мучительно медленными в работе. Есть несколько способов обойти это — мы будем работать с одним из них, а именно с преобразованием связанной таблицы в локальную таблицу. Конечно, вы можете сделать это вручную, скопировав/вставив таблицы, но если у вас много работы, сделать это в коде намного проще, так что давайте посмотрим, как…
Почему важно изложить свои потребности
Прежде всего, давайте наметим, что мы на самом деле хотим, чтобы код делал — это значительно упрощает создание кода, поэтому я предлагаю вам делать это каждый раз, когда вы думаете о создании кода VBA. , это помогает уточнить вашу цель:
«Учитывая имя связанной таблицы, импортируйте эту таблицу в базу данных как локальную таблицу для повышения производительности — при желании удалите ссылку из базы данных одновременно»
Обычно, когда вы конвертируете связанную таблицу в локальную, вы захотите удалить ссылку, но в приведенном ниже примере кода мы предоставили вам возможность также сохранить исходный связанный файл, но при этом ваш вновь импортированная таблица не заменит вашу связанную таблицу в ваших запросах и т. д., поэтому вы не увидите прироста производительности, который даст вам локальная таблица. Как только вы убедитесь, что код работает так, как вам нужно, мы рекомендуем всегда удалять оригинал — в конце концов, вы на самом деле удаляете не саму таблицу, а только ссылку на нее.
Слово предостережения
Прежде чем мы перейдем к коду — небольшое предостережение: вы мало что можете сделать, если ссылаетесь на поврежденная база данных Access – если Access не может прочитать файл, маловероятно, что он сможет импортировать из него.
Итак – к коду…
Sub MakeTableLocal (tableName As String, необязательное удалениеOriginal As Boolean = True) Dim DbPath As Variant, TblName As Variant 'получить путь к связанной таблице DbPath = DLookup ("Database", "MSysObjects", "Name='" & tableName & "' And Type=6") 'Получить настоящее имя связанной таблицы (в случае, если ей был присвоен псевдоним в ссылке) TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6") If IsNull(DbPath) Then 'Либо локальная таблица, либо указано неправильное имя таблицы, выйдите из подпрограммы Exit Sub End If 'удалит связанную таблицу If deleteOriginal Then DoCmd.DeleteObject acTable, tableName Else 'If мы не удаляем существующую таблицу, нам придется переименовать импортированную таблицу, чтобы избежать ее «перезаписи» и т. д. tableName = tableName & «- local» End If «импортировать таблицу как локальную несвязанную таблицу DoCmd. Access", DbPath, acTable, TblName, tableName End Sub
Что делает код
Most кода будет довольно очевидно, но есть несколько ключевых моментов, на которые следует обратить внимание. Во-первых, мы получаем информацию о том, с каким файлом связана ссылка, просматривая (обычно скрытую) системную таблицу Access «MSysObjects». Поскольку вполне возможно (и вероятно), что вы дали связанной таблице новый локальный псевдоним, следующее, что нам нужно сделать, это получить имя исходной таблицы — опять же, из таблицы «MSysObjects».
Теперь, когда у нас есть эти детали, если они действительны (т.е. вы не предоставили подпрограмме имя таблицы с ошибками), мы готовы к работе, так что это просто вопрос а) удаления ссылки (если для deleteOriginal задано значение True) и импорт таблицы.
Это часто приводит к значительному повышению производительности, поэтому, если вы используете связанные таблицы, я настоятельно рекомендую вам проверить, какие выгоды даст вам перемещение этих таблиц в локальные версии — вы можете быть удивлены!
Об авторе:
Митчелл Понд — эксперт по восстановлению данных в DataNumen, Inc., которая является мировым лидером в области технологий восстановления данных, включая ремонт SQL Server файл и программные продукты для восстановления Excel. Для получения дополнительной информации посетите www.datanumen.com
Оставьте комментарий