MyTetra Share
Делитесь знаниями!
Очистка от временных запросов создаваемых Формами и Отчетами
Время создания: 16.03.2019 23:43
Раздел: Разные закладки - VBA - Access - msa.polarcom.ru - 10 Приложение MSA
Запись: xintrea/mytetra_db_adgaver_new/master/base/1532017032di8sc1pybd/text.html на raw.githubusercontent.com

Очистка от временных запросов создаваемых Формами и Отчетами

    При открытии любой формы или отчета, если она сама или любой из ее обьектов использует в качестве источника данных строку SQL то для каждого такого обьекта в базе данных создается временный запрос с префиксом ~sq_  + имя обьекта, которые не удаляется ни после закрытия формы, ни после сжатия. Можно перед обжатием на несколько (сотен) кил, уменьшить размер файла (перед пересылкой по почте например) используя данную процедуру.

Private Sub esDelTempQueries()

'es 14.12.04

'Удаление временных запросов от форм/отчетов

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

'Debug.Print qdf.SQL

c = Len(qdf.SQL)

CurrentDb.QueryDefs.Delete qdf.Name

If Err.Number > 0 Then

'Debug.Print Err.Description

Err.Clear

Else

i = i + 1

x = x + c

'Debug.Print "Запрос - " & qdf.Name & " - Удален!"

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()

'es 14.12.04

'Восстановление временных запросов от всех форм/отчетов

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





Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования