Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Access: как программно сжать и восстановить базу


Автор: Chyslyvchyk 19.10.2004, 17:16
Есть таблица:
1) Из нее удаляются данные
2) В нее загружаются данные из другой таблицы
Проблема в том, что в этой таблице есть поле "Счетчик", который, зараза, при внесении новых данных считает не сначала, а от последнего значения, что было до удаления данных из таблицы.
Лечиться: пункт меню в Access "Сервис -> Служебные программы -> Сжать и восстановить базу данных".
Нужно программно сделать действие аналогичное пункту меню в Access "Сервис -> Служебные программы -> Сжать и восстановить базу данных".
smile=help

Автор: Pakshin A. S. 19.10.2004, 17:26
Если работаешь с Delphi, то поможет статейка
http://forum.vingrad.ru/index.php?showtopic=30626&unread=1&hl=access

Предпоследний пост, от Pegas'а...

Автор: Chyslyvchyk 19.10.2004, 17:32
Цитата(Pakshin @ 19.10.2004, 17:26)
Если работаешь с Delphi, то поможет статейка
http://forum.vingrad.ru/index.php?showtopic=30626&unread=1&hl=access

Предпоследний пост, от Pegas'а...

Если б с Делфями - в разделе Дельфей была бы тема опубликована. :D

Microsoft Visual Basic

Автор: boevik 19.10.2004, 17:36
Chyslyvchyk, что используешь DAO или ADO?

Автор: Chyslyvchyk 19.10.2004, 17:42
Цитата(boevik @ 19.10.2004, 17:36)
Chyslyvchyk, что используешь DAO или ADO?

Да я в самом Access копошусь, в редакторе Visual Basic.
Вот тута инфы немного, только не знаю, как ее использовать: http://www.team-x.ru/xforum/index.html?act=Print&client=html&f=27&t=739

Автор: boevik 19.10.2004, 17:56
Chyslyvchyk, можно воспользоваться командой CompactDatabase, НО ты не сможешь сжать открытую базу т.е. самого себя.

Автор: Chyslyvchyk 20.10.2004, 09:20
Помогите модифицировать:

CompactDatabase Method Example
This example uses the CompactDatabase method to change the collating order of a database. You cannot use this code in a module belonging to Northwind.mdb.
Код
Sub CompactDatabaseX()
 Dim dbsNorthwind As Database
 Set dbsNorthwind = OpenDatabase("Northwind.mdb")
 ' Show the properties of the original database.
 With dbsNorthwind
    Debug.Print .Name & ", version " & .Version
    Debug.Print "  CollatingOrder = " & .CollatingOrder
    .Close
 End With
 ' Make sure there isn't already a file with the
 ' name of the compacted database.
 If Dir("NwindKorean.mdb") <> "" Then _
    Kill "NwindKorean.mdb"
 ' This statement creates a compact version of the
 ' Northwind database that uses a Korean language
 ' collating order.
 DBEngine.CompactDatabase "Northwind.mdb", _
    "NwindKorean.mdb", dbLangKorean
 Set dbsNorthwind = OpenDatabase("NwindKorean.mdb")
 ' Show the properties of the compacted database.
 With dbsNorthwind
    Debug.Print .Name & ", version " & .Version
    Debug.Print "  CollatingOrder = " & .CollatingOrder
    .Close
 End With
End Sub

Автор: Chyslyvchyk 20.10.2004, 14:30
Обнуление счетчика решилось другим способом:
1) удалить из таблицы все данные
2) выполнить код:
Код
Private Sub Zeroing()
Dim Recs As DAO.Recordset
Set Recs = CurrentDb.OpenRecordset("Имя таблицы", dbOpenDynaset)
With Recs
.AddNew
'поле счетчика
!ID = 0
!Поле1 = "0"
!Поле2 = "0"
!Поле3 = "0"
.Update
.Close
End With
End Sub

3) Опять удалить все из таблицы
Теперь если добавлять данные в таблицу, счетчик начинает считать с 1. Что и требовалось сделать. Ура.

Автор: Akina 20.10.2004, 14:41
Chyslyvchyk
Что-то у тебя с базой неладно. Поле уникальный ключ типа счетчик при правильном построении базы должно использоваться только в одном месте - в JOIN для связывания таблиц. Все, более нигде. А для тех целей, которые ты озвучиваешь, правильное решение - введение в БД дополнительного поля и программное его заполнение нужными значениями.

Автор: Golden Hands 23.1.2005, 04:25
Да че вы мучаетесь с обнулением счетчика?
Копируйте таблицу (выделяете, Копировать - Вставить), удаляете предыдущую, переименовываете (имя как у старой). И - счетчик обнулен.

Автор: Chyslyvchyk 1.3.2005, 18:43
Цитата(Golden @ 23.1.2005, 04:25)
Да че вы мучаетесь с обнулением счетчика?
Копируйте таблицу (выделяете, Копировать - Вставить), удаляете предыдущую, переименовываете (имя как у старой). И - счетчик обнулен.

Это нужно было сделать программно.

Автор: Golden Hands 2.3.2005, 00:32
Цитата
Это нужно было сделать программно.

Хм, а разве программно нельзя копировать таблицу, переименовать, удалить старую? Потыкаюсь.

Автор: Chyslyvchyk 2.3.2005, 13:48
Цитата(Golden @ 2.3.2005, 00:32)
Цитата
Это нужно было сделать программно.

Хм, а разве программно нельзя копировать таблицу, переименовать, удалить старую? Потыкаюсь.

Проблема в том, что эта таблица имела связные поля с другой таблицей. И при ее удаление терялась связь. В то время единственный выход, который был найден - очистить и перезаписать.

Автор: Golden Hands 7.3.2005, 01:56
Да, связи таблицы теряются. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)