Если Вы удалили таблицу или запрос, а запросы, использующие их, оставили в базе (по существу это мусор), то даже замечательный анализатор Access (1997,2000) ничего Вам о них не скажет.
Автор: Юрий Шерман www.tour-soft.com Поиск мусорных запросов Если Вы удалили таблицу или запрос, а запросы, использующие их, оставили в базе (по существу это мусор), то даже замечательный анализатор Access (1997,2000) ничего Вам о них не скажет. Помучившись с ручным поиском мусорных запросов, я написал программу. Она основана на том, что при вызове такого запроса в режиме конструктора Access преобразует текст запроса, приводя его к синтаксически корректному виду. То есть текст меняется, а это можно поймать. Правда дальше выяснилось, что меняется и текст некоторых совершенно нормальных запросов - Access иногда переставляет местами части текста, порядок следования которых несущественен. Когда случается это "иногда", я честно говоря, не понял. Но заметил, что если номальный запрос перезаписать дважды, то второй текст равен исходному. Может найдутся еще более кривые случаи, то, пожалуйста, сообщите о них. Из-за этих возможных случаев запросы с изменяющимся текстом в сообщениях называются не мусорными, а подозрительными. ' Контроль запросов, версия 1.2 ' Комментарий: 'в базе часто остаются "мусорные" запросы, 'которые мы забываем удалять/изменять после изменения 'таблиц и 'вложенных запросов. ' ' Российские программисты, WEB: ' http://www.mtu-net.ru/ruprog ' На сайте имеются другие полезные программы '(Freeware и Shareware) ' Автор Юрий Шерман, mailto:
Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
' FreeWare ' 'ПОРЯДОК ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ 'Запустите программу CheckQueryDefs, 'например, из отладчика. 'Если есть подозрение на ошибку в запросе, 'то программа занесет его в список для печати. 'Сами запросы программа не изменяет. Public Function CheckQueryDefs() Dim PathLog As String Dim i As Long, j As Long, n As Long, m As Integer Dim MN As String, Q As QueryDef, QueryTempName As String Dim S As String, S1 As String 'Это имя можно изменять QueryTempName = "_$Temp" 'имя временного запроса 'Размещаем файл сообшений в своем каталоге S = CurrentDb.Name PathLog = Left(S, Len(S) - Len(Dir(S))) + "~QuerLog.txt" If Dir(PathLog) <> "" Then Kill PathLog m = FreeFile Open PathLog For Output As #m Print #m, "Список подозрительных запросов" + vbCrLf n = CurrentDb.QueryDefs.Count - 1 If n >= 0 Then _ SysCmd acSysCmdInitMeter, "QueryDefs", (n + 1) On Error Resume Next j = 0 For i = 0 To n DoEvents SysCmd acSysCmdUpdateMeter, (i + 1) DoCmd.DeleteObject acQuery, QueryTempName MN = CurrentDb.QueryDefs(i).Name S = CurrentDb.QueryDefs(i).SQL Err.Clear Set Q = CurrentDb.CreateQueryDef(QueryTempName, S) If Err > 0 Then 'в запросе синтаксическая ошибка j = j + 1 Print #m, j & ". " & MN & _ ": Ошибка № " & Err & ". " + _ Err.Description + vbCrLf Else 'Первая обработка компилятором DoCmd.OpenQuery QueryTempName, acViewDesign DoCmd.Close acQuery, QueryTempName, acSaveYes S1 = CurrentDb.QueryDefs(QueryTempName).SQL DoCmd.DeleteObject acQuery, QueryTempName 'Вторая обработка компилятором Set Q = CurrentDb.CreateQueryDef(QueryTempName, S1) DoCmd.OpenQuery QueryTempName, acViewDesign DoCmd.Close acQuery, QueryTempName, acSaveYes S1 = CurrentDb.QueryDefs(QueryTempName).SQL If S <> S1 Then j = j + 1 Print #m, j & ". " & MN + _ ": Запрос изменяется после обработки компилятором SQL" _ + vbCrLf End If End If Next i DoCmd.DeleteObject acQuery, QueryTempName Print #m, "Проверено запросов: " & (n + 1) & vbCrLf & _ "Подозрительных: " & j Close #m SysCmd acSysCmdClearStatus Shell "NotePad.exe " + PathLog, 1 End Function
|
Просмотров: 5568
Ваш коментарий будет первым | | |