powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не работает функция сжать базу данных!
3 сообщений из 3, страница 1 из 1
Не работает функция сжать базу данных!
    #32476913
Фотография Gyslik.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Ac97 пытаюсь программно сжать базу данных, таким образом:
With CommandBars.Add(, 1, , True)
.Controls.Add 1, 2071, , , True
.Visible = True
.Controls(1).SetFocus
DoEvents
SendKeys "~"
End With
(Взято из Faq)

Я вставляю это в обработчик нажатия на кнопку, которая делает бэкапирование Б.Д. (из Гетца "Сборник рецептов"), то есть перед бэкапом надо сжать БД. При нажатии на кнопку появляется на панели инструментов пустой квадратик, нажав на который происходит сжатие, но если на него не нажимать, то ничего не происходит. Думаю что дело в DoEvents.
Вот обработчик нажатия на кнпоку "Бэкап":

Private Sub cmdBackup_Click()

Call MakeBackup(Me!txtOutputDatabase)

End Sub

Sub MakeBackup(ByVal strOutputDatabase As String)

Dim dbOutput As Database
Dim intType As Integer
Dim ctlObjects As ListBox
Dim varItem As Variant
Dim strType As String
Dim strName As String
Dim intObjTot As Integer
Dim intObjCnt As Integer
Dim ctlProgress As TextBox

On Error GoTo HandleErr

Set ctlProgress = Me!txtProgress
Set ctlObjects = Me!lboObjects

ctlProgress.Visible = True
ctlProgress = "Initializing..."

intObjTot = ctlObjects.ItemsSelected.Count

If Len(Dir(strOutputDatabase)) > 0 Then
DoCmd.Hourglass False
Beep
If MsgBox("Output Database exists. Overwrite?", _
vbYesNo + vbQuestion) = vbYes Then
Kill strOutputDatabase
Else
Exit Sub
End If
End If

ctlProgress = "Creating " & strOutputDatabase & "..."
DoEvents

Set dbOutput = DBEngine.Workspaces(0). _
CreateDatabase(strOutputDatabase, dbLangGeneral)

dbOutput.Close

intObjCnt = 0
ctlProgress = "Backing up objects..."

Dim iii As Integer
For iii = 1 To ctlObjects.ListCount - 1
intObjCnt = intObjCnt + 1
strType = ctlObjects.Column(0, iii)
strName = ctlObjects.Column(1, iii)
ctlProgress = "Backing up " & strName & "..."
DoEvents
Call ExportObject(strOutputDatabase, strType, strName)
Next
Debug.Print "lala:" & ctlObjects.Column(0, 0)
Debug.Print "lalala:" & ctlObjects.Column(1, 0)
Debug.Print "lala:" & ctlObjects.Column(0, ctlObjects.ListCount - 1)
Debug.Print "lalala:" & ctlObjects.Column(1, ctlObjects.ListCount - 1)

ctlProgress = "Backup finished!"

ExitHere:
Exit Sub

HandleErr:
Select Case err
Case Else
MsgBox err & ": " & err.Description, , _
"MakeBackup"
End Select
Resume ExitHere
End Sub

Подскажите, пожалуйста, что я делаю не так?
...
Рейтинг: 0 / 0
Не работает функция сжать базу данных!
    #32476921
Abel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет ;)
Как раз на днях пришлось решать этот же вопрос. Дело оказалось не в DoEvents. Короче, попробуй поставить "End With" перед "SendKeys", который должен быть ПОСЛЕДНИМ в процедуре сжатия, поскольку Access пойдет на перезагрузку. У меня заработало. Вот только backup придется запускать уже другой кнопкой или автоматом после перезапуска ;)
...
Рейтинг: 0 / 0
Не работает функция сжать базу данных!
    #32477234
ex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выдержка и FAQ по поводу использованного кода:
- После последней строки в функции не должно быть никакого дополнительного кода , т.к. это может привести либо к невозможности выполнить сжатие, либо к невозможности выполнить данный дополнительный код;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не работает функция сжать базу данных!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]