|
|
Очистка от временных запросов создаваемых Формами и Отчетами
При открытии любой формы или отчета, если она сама или любой из ее обьектов использует в качестве источника данных строку SQL то для каждого такого обьекта в базе данных создается временный запрос с префиксом ~sq_ + имя обьекта, которые не удаляется ни после закрытия формы, ни после сжатия. Можно перед обжатием на несколько (сотен) кил, уменьшить размер файла (перед пересылкой по почте например) используя данную процедуру.
Private Sub esDelTempQueries()
Dim qdf As QueryDef
Dim i As Integer
Dim c As Integer
Dim x As Long
On Error Resume Next
CurrentDb.QueryDefs.Refresh
For Each qdf In CurrentDb.QueryDefs
If Left(qdf.Name, 4) = "~sq_" Then
c = Len(qdf.SQL)
CurrentDb.QueryDefs.Delete qdf.Name
If Err.Number > 0 Then
Err.Clear
Else
i = i + 1
x = x + c
End If
End If
Next qdf
If i > 0 Then
Debug.Print "---------------------------------"
Debug.Print "Итого удалено запросов: " & i & " содержащих: " & x & " байт"
Else
Debug.Print "Временные запросы не обнаружены"
End If
End Sub
Обратная процедура - забиваем базу мусором по полной (ради любопытства)
Private Sub esRestoreTempQueries()
Dim dbs As Database, ctr As Container, doc As Document
On Error GoTo RestoreTempQueriesErr
Set dbs = CurrentDb
Set ctr = dbs.Containers!Forms
For Each doc In ctr.Documents
DoCmd.OpenForm doc.Name, acDesign, "", "", , acHidden
DoCmd.Close acForm, doc.Name, acSaveYes
Next doc
Set ctr = dbs.Containers!Reports
For Each doc In ctr.Documents
DoCmd.OpenReport doc.Name, acDesign, "", "", , acHidden
DoCmd.Close acReport, doc.Name, acSaveYes
Next doc
Exit Sub
RestoreTempQueriesErr:
MsgBox Err.Description & vbCrLf & "При обработке формы - " & doc.Name
End Sub
|
|