MsAccess QueryDef.SQL отличается от реального запроса SQL - PullRequest
0 голосов
/ 26 июня 2018

Я экспортирую код 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

Текущая база данных - это та, которую я не использовал более года.

Вы можете лучше понять эту временную шкалу:

  1. Обновлено несколько запросов (давно).Обновление состояло из переименования некоторых запросов и последующей соответствующей корректировки в нисходящем направлении.
  2. Экспортированный код запроса SQL с вышеприведенным VBA (сегодня).
  3. Заметил, что определенный sql queryA странно использовал егостарое имя зависимости.
  4. Открыл queryA в режиме конструктора, и он показал правильное имя зависимости.Отличается от того, что было экспортировано.Поэтому я закрыл без сохранения.
  5. Ран Compact & Repair перед повторным экспортом с тем же VBA.
  6. queryA был экспортирован правильный код.
  7. Заметил, что некоторые queryB в той же базе данных имеют аналогичную "устаревшую" проблему.
  8. То же, что 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.Но это вполне может быть решением, если больше ничего не возможно.

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