Я экспортирую код sql запросов msaccess для контроля версий исходного кода.Я делал это некоторое время, но только сейчас заметил несоответствие.Экспортированный SQL-код отличался от кода, который я получал от перехода к представлению SQL в режиме разработки.Это была бы более старая версия.Мой код экспорта сводится к следующему:
Dim db As Database
Dim qr As QueryDef
Dim arq_out As Integer
Set db = CurrentDb
arq_out = FreeFile
arq_name = "Querydefs.sql"
Open destPath & arq_name For Output As arq_out
For Each qr In db.QueryDefs
If Not qr.Name Like "~TMP*" Then
Print #arq_out, qr.Name
Print #arq_out, qr.sql
Print #arq_out, String(70, "-")
End If
Next qr
Текущая база данных - это та, которую я не использовал более года.
Вы можете лучше понять эту временную шкалу:
- Обновлено несколько запросов (давно).Обновление состояло из переименования некоторых запросов и последующей соответствующей корректировки в нисходящем направлении.
- Экспортированный код запроса SQL с вышеприведенным VBA (сегодня).
- Заметил, что определенный sql
queryA
странно использовал егостарое имя зависимости. - Открыл
queryA
в режиме конструктора, и он показал правильное имя зависимости.Отличается от того, что было экспортировано.Поэтому я закрыл без сохранения. - Ран
Compact & Repair
перед повторным экспортом с тем же VBA. queryA
был экспортирован правильный код. - Заметил, что некоторые
queryB
в той же базе данных имеют аналогичную "устаревшую" проблему. - То же, что 4, 5 и 6.
Так что MsAccess хранит SQL-код где-то ещеи кормит меня старой или кэшированной версией.Я даже не знаю, подавил ли я какое-то соответствующее изменение из-за этого ключа в моем рабочем процессе, так как я использую его для анализа данных в качестве рабочего ограничения.
Я попытался запросить системные таблицы, чтобы увидеть,держал правильный SQL, но столкнулся с той же проблемой.Они будут показывать мне старые зависимости и будут автоматически обновляться после того, как я открою дизайн.Я использовал следующий пример запроса:
SELECT MSysQueries.Name1, MSysObjects.Name
FROM MSysQueries INNER JOIN MSysObjects ON MSysQueries.ObjectId = MSysObjects.Id
WHERE (((MSysQueries.Name1)="Dependency_Old_Name"));
Буду признателен за помощь: либо получить действительный sql-код из MsAccess, либо заставить MsAccess обновить все QueryDefs.SQL
.
Открытие и закрытиезапросы в режиме конструктора не будут предпочтительным решением, поскольку иногда они вводят ложные данные as Expr1
.Но это вполне может быть решением, если больше ничего не возможно.