На выходе сжать базу данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

На выходе сжать базу данных

Сообщение Summer.05 » 18.06.2006 (Вс) 20:19

При выходе из программы на VB надо, чтобы сжималась база данных
Примеры есть, но почему-то у меня не работает. Ниже представлен мой код.
Подскажите, пожалуйста, что тут не так?
Спасибо!
_______________________________


Private Sub Command12_Click()
Dim Database
strPath = App.Path & "/" & "DB/db1.mdb"
Dim s As String
s = "Вы уверены в том, что хотите выйти?"
Beep
If MsgBox(s, vbQuestion + vbYesNo, "Подтверждение выхода") = vbNo Then Exit Sub
'Закрываем БД
Adodc1.Database.Close

'Вызываем метод CompactDataBase объекта DBEngine
'для сжатия, и сжимаем БД переименовывая ее
DBEngine.CompactDatabase "/" & "DB/db.mdb", "/" & "DB/db1.mdb"""
'Уничтоваем старую БД
'Kill "/" & "DB/db.mdb"
'Присваиваем полученной, 'сжатой' БД
'ее прежнее имя
Dim OldDB
Dim NewDB
OldDB = "/" & "DB/db1.mdb"
NewDB = "/" & "DB/db.mdb"
Name OldDB As NewDB

End
End Sub

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 18.06.2006 (Вс) 21:29

А где возникает ошибка?

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 19.06.2006 (Пн) 3:25

Думаю как минимум здесь:
Код: Выделить всё
DBEngine.CompactDatabase "/" & "DB/db.mdb", "/" & "DB/db1.mdb"""

И здесь:
Код: Выделить всё
Name OldDB As NewDB
Бороться и искать, найти и перепрятать!

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 19.06.2006 (Пн) 8:23

Ошибка возникает здесь:

Adodc1.Database.Close


Но это - первая ошибка, могут быть и другие.

Может быть, есть иные варианты решения задачи?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 19.06.2006 (Пн) 11:06

Summer.05 писал(а):Ошибка возникает здесь:

Adodc1.Database.Close


Но это - первая ошибка, могут быть и другие.

Может быть, есть иные варианты решения задачи?


1. А не закрывается ли уже ранее закрытая база?
2. используетс ли база в других приложениях?
3. ну и подозрительные пути какие-то "/" & "DB/db.mdb".
Почему не записать абсолютные пути?

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 19.06.2006 (Пн) 11:17

А не закрывается ли уже ранее закрытая база?


Думаю, что нет, так как команда END поставлена в самый конец и база в это время отражена в DBGrid.

используетс ли база в других приложениях?


Нет, не используется.

Почему не записать абсолютные пути?

Не используется потому, что при переносе на другой компьютер программа вообще перестанет работать. Вынужден использовать относительные пути.

Не настаиваю, а прошу помощи: как на событие "клик" кнопки перед закрытием программы обеспечить программное сжатие базы.

Это возможно?
Это целесообразно?

Спасибо!

MeMBus
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 450
Зарегистрирован: 23.02.2005 (Ср) 7:03
Откуда: Из леса...

Сообщение MeMBus » 19.06.2006 (Пн) 11:42

MeMBus писал(а):
Код: Выделить всё
DBEngine.CompactDatabase "/" & "DB/db.mdb", "/" & "DB/db1.mdb"""

Ну нету тут пути однозначно...
Summer.05 писал(а):Думаю, что нет, так как команда END поставлена в самый конец и база в это время отражена в DBGrid.

Это не показатель... У тебя база при вызове закрытия – скорее всего уже закрыта (99%).
Summer.05 писал(а):как на событие "клик" кнопки перед закрытием программы обеспечить программное сжатие базы.

Сжатие базы делать лучше через сервисные возможности твоей программы, а не каждый раз при закрытии, в зависимости от частоты удаления данных в базе.
Бороться и искать, найти и перепрятать!

Summer.05
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 285
Зарегистрирован: 28.12.2005 (Ср) 20:19
Откуда: Москва

Сообщение Summer.05 » 20.06.2006 (Вт) 7:26

MeMBus

Спасибо, понял. Это - логичнее, через сервис сделать.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 102

    TopList