Как программно сжать базу Access 2000

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Как программно сжать базу Access 2000

Сообщение Luzin » 21.06.2003 (Сб) 11:33

Как программно сжать базу Access 2000 из Visual Basic 6.0

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 11:37

В DAO есть метод DBEngine.CompactDatabase

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 21.06.2003 (Сб) 11:41

RayShade писал(а):В DAO есть метод DBEngine.CompactDatabase

А через ADO возможно?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 11:43

Не в курсе. Никогда не пытался этого через ADO сделать. Думаю, что нет. А чем DAO то не подходит?

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 21.06.2003 (Сб) 11:48

Я просто с DAO не работал
только с ADO

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 11:52

Ничего по моему в DAO сложного нет :) То есть я думаю, для такой операции как сжатие многого переосмысливать не придется ;)

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 21.06.2003 (Сб) 11:54

Кинь пример?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 12:05

Код: Выделить всё
Sub mycompact()
Dim dbe As New DBEngine
With dbe
.CompactDatabase "c:\1.mdb", "c:\2.mdb"
End With
End Sub




Учти, что сжимаемая база не должна в этот момент никем быть открыта.

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 21.06.2003 (Сб) 12:13

Понял
Спасибо за пример, а смотрел ветку
"Сравнение записей в базе Access "
http://www.vbnet.ru/forum/show.asp?id=18240
может подскажешь чего?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 12:16

Этот же вопрос был и в этом форуме ;) На него так сразу не получается ответить, а время влезть в вопрос у меня будет только во вторник.

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 21.06.2003 (Сб) 12:26

Я знаю, что он был, ведь это мой вопрос
и кто-то его убил :D, я даже догадываюсь кто.
Если все будет поглядишь, что можно сделать будеть по вопросу.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.06.2003 (Сб) 12:42

Никто его не убивал. Я его перенес в этот форум просто. Посмотри внимательно, он в том же разделе что и этот топик :)

VisMajor
Обычный пользователь
Обычный пользователь
 
Сообщения: 78
Зарегистрирован: 04.10.2002 (Пт) 10:42

Сообщение VisMajor » 21.06.2003 (Сб) 21:16

RayShade писал(а):
Код: Выделить всё
Sub mycompact()
Dim dbe As New DBEngine
With dbe
.CompactDatabase "c:\1.mdb", "c:\2.mdb"
End With
End Sub


Учти, что сжимаемая база не должна в этот момент никем быть открыта.


Простите господа. Не подскажите ли жа-а-а-а-алкому ламеру, что есть из себя процес сжатия и остается ли сжатая база полнофункциональной.

Заранее благодарен. Юрий.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.06.2003 (Вс) 7:29

Файл mdb имеет кластерную сруктуру на манер таковой у винчестера. Соответственно, он подвержен "внутренней фрагментации", когда остаются пустые "кластеры". Сжатие ("дефрагментация") позволяет похерить все пустые "кластеры" и записать базу компактно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VisMajor
Обычный пользователь
Обычный пользователь
 
Сообщения: 78
Зарегистрирован: 04.10.2002 (Пт) 10:42

Сообщение VisMajor » 23.06.2003 (Пн) 13:26

GSerg писал(а):Файл mdb имеет кластерную сруктуру на манер таковой у винчестера. Соответственно, он подвержен "внутренней фрагментации", когда остаются пустые "кластеры". Сжатие ("дефрагментация") позволяет похерить все пустые "кластеры" и записать базу компактно.


Спасибо за пояснение.
И если можно еще один вопрос. Access формирует MDE файлы. Что это такое и с чем его едят? :roll:

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 23.06.2003 (Пн) 13:41

GSerg писал(а):Файл mdb имеет кластерную сруктуру на манер таковой у винчестера. Соответственно, он подвержен "внутренней фрагментации", когда остаются пустые "кластеры". Сжатие ("дефрагментация") позволяет похерить все пустые "кластеры" и записать базу компактно.

позвольте Вас поправить...
на самом деле при удалении записей из базы данных они не удаляются физически, а помечаются как удаленные. так вот процесс сжатия базы данных - это физическое удаление этих записей из файла, ну и после этого "дефрагментация" файла...
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 23.06.2003 (Пн) 14:01

2 Cyrax и GSerg

Вы оба правы :) Cyrax - то что ты скащзал применимо к базам в общем, а то что сказал GSerg - только к MDB :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.06.2003 (Вт) 9:56

Проведя столь полезную дискуссию, ответим наконец на вопрос человека :)

mde - это скомпилированный mdb. Этот файл можноо юзать в плане заполнения, удаления, получения отчётов, короче, выжимания результатов, а менять саму структуру базы нельзя. На эти файлы много ограничений по версиям Access. Например, Access XP может заюзать файлы mdb всех предыдущих версий, а, допустим, mde от Office97 открывать откажется.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VisMajor
Обычный пользователь
Обычный пользователь
 
Сообщения: 78
Зарегистрирован: 04.10.2002 (Пт) 10:42

Сообщение VisMajor » 25.06.2003 (Ср) 13:53

Спасибо. :idea:

Ivan1
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 27.05.2003 (Вт) 14:25
Откуда: Светлоград

Сообщение Ivan1 » 27.06.2003 (Пт) 9:38

Извините что вмешиваюсь
но скажите в одном mdb у меня 5 таблиц
они будут накапливаться до кокого размера
может рости mdb
Может у кого нибуть есть какой нибуть
электроный справочник по DAO
может вышлите.
Воробьев Иван В.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.06.2003 (Пт) 9:50

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

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 27.06.2003 (Пт) 9:59

Ivan1 писал(а):Извините что вмешиваюсь
но скажите в одном mdb у меня 5 таблиц
они будут накапливаться до кокого размера
может рости mdb
Может у кого нибуть есть какой нибуть
электроный справочник по DAO
может вышлите.

тут скорее всего уже будут действовать не ограничения формата и процессора баз данных, а ограничения файловой системы.
FAT поддерживает файлы размером не более 2Гб, FAT32 - 4Гб, а NTFS - в теории 16 экзабайт ( (2^63) - 1 )
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 27.06.2003 (Пт) 10:04

И смотря скока записай... а то тормоза появятся...
Причем я бы не стал делать базу которая будет иметь
немеряный размер + тонна записей и для это юзать Access.

А вот такой вопрос. А реально ли как то без DAO сжать?
Если я юзаю ADO то както еще DAO для этого подключать накладно.
Например такие СУБД как MySQL умежт это делть через SQL запрос.
Moderator VBStreets
---------------------------

Luzin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 28.01.2003 (Вт) 9:54
Откуда: Russia

Сообщение Luzin » 27.06.2003 (Пт) 10:06

я так и не нашел как из ADO сделать
потоэтому сделал через JRE (хотя через DAO было бы легче)

Cyrax
Cyberninja
Cyberninja
Аватара пользователя
 
Сообщения: 891
Зарегистрирован: 25.04.2002 (Чт) 21:20
Откуда: Magnitogorsk, Russia

Сообщение Cyrax » 27.06.2003 (Пт) 10:10

ASD писал(а):А вот такой вопрос. А реально ли как то без DAO сжать?
Если я юзаю ADO то както еще DAO для этого подключать накладно.
Например такие СУБД как MySQL умежт это делть через SQL запрос.

еще как реально. для этого есть библиотека, "Microsoft ADO Ext. x.x for DDL and Security" называется. x.x - это номер версии (на данный момент 2.5, кажется)
на http://vbrussian.com пара статей про этот самый ADOX лежали.
Ты это ему расскажи. Я уже пять болтов отвинтил, и конца не видно... (озадаченно) А это в какую сторону тянуть? Ну-ка... Ага, этот был лишний, этот вообще не отсюда, и этот... Точно, два болта.

Welcome to IRC

basicom
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 20.05.2003 (Вт) 10:10
Откуда: Екатеринбург

Сообщение basicom » 14.07.2003 (Пн) 14:05

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

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 19.07.2003 (Сб) 12:36

Luzin писал(а):я так и не нашел как из ADO сделать
потоэтому сделал через JRE (хотя через DAO было бы легче)


MSDN в статье с привлекательным заголовком "HOWTO: Compacting Microsoft Access Database via ADO" приводит пример с подключением библиотеки "Microsoft Jet and Replication Objects":

Код: Выделить всё
Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc2.mdb;Jet OLEDB:Engine Type=4"


Видимо, ничего более умного они не придумали :lol:


Вернуться в Базы данных

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 223

    TopList