|
|
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Всем привет! Помогите пожалуйста разобратся с сжатием базы. Нарыл в Help что вроде бы надо использовать функцию CompactDatabase, но она работает при условии что сжимаемая база закрыта. А как же я могу запустить функцию если сама база закрыта? Есть ли какой выход? Никак не могу эту проблему решить, помогите!!!!!!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 01:30 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Должно быть две базы: в одной находимся, другую сжимаем. Кстати, если система разделена на программу и данные, то так и получается: находимся в базе с программой, сжимаем базу с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 11:10 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Посмотри \r При удаление размер файла не уменьшается. Там несколько реализаций прдложено ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2003, 11:43 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Мне больше понравился Нуф-нуфовский вариант, но он у меня почему то не работает. С чего бы это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 19:47 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
хде мой шаманский бубен? :) Ну так откомпилируй, прогони в пошаговом режиме и подай сюда строчку и сообщение об ошибке :) //сможет ответить тока завтра... Хотя и без меня разберутся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2003, 20:34 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
В ветке, ссылку на которую дал Нуф-Нуф, Lescha_A запостил функцию Autocompact(). Сам пользуюсь именно ею [где взял не помню:-(]. Имхо, до сих пор это идеальное решение для неразделенной бд. Это фактически вызов встроенного метода Compact and Repair Database из меню Tools. >EDUDK01 при условии что сжимаемая база закрыта" >Владимир Саныч Должно быть две базы: в одной находимся, другую сжимаем. Нет. БД не должна быть обязательно закрыта при использовании вышеуказанной функции. 1. Т.е. реально повесить эту функция на кнопку "Выход" (скажем, в главной кнопочной форме) или на закрытие главной кнопочной формы и т.д. 2. Сжатие может не произойти, если в момент вызова функции будут открыты те или иные объекты текущей бд (таблицы, рекордсеты, связанные формы и т.п.). 3. Т.к. скорее всего это будет делаться на выходе, то в конце просто добавить Application.Quit. 4. Если п.3 не используется и возникает ситуация в п.2, то вы получите безымянную менюшку с безымянной кнопкой на панели инструментов. Обработку вышеописанных ситуаций и график обслуживания добавляем по вкусу. Не проверял, но если неразделенная база - многопользовательская, наверное, придется добавить проверку подключения других пользователей, хотя, по-моему, даже при отстутствии монопольного доступа вызов этой функции ошибки не сгенерирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2003, 06:52 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуфу: прогоняю в пошаговом режиме, никаких ошибок не выдает, но база при этом не сжимается. Пробовал совсем уж идиотский вариант, копирую текущий файл- 1 в файл-2. Затем сжимаю файл-2 в файл-3. Перезаписываю файл-3 в файл-1 и убиваю файл-2 и файл-3. Никакого результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 14:19 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Странно... У меня этот код уже года 2 работает... А может скинуть ВСЮ функцию/процедуру сюда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 14:38 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
В смысле: А можеШ скинуть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 14:41 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Это вот мои художества: Dim objFileSystem As Object Dim myCurrentDB As String Dim myNewDB1 As String Dim myNewDB2 As String myCurrentDB = "C:\WINNT\Profiles\edudk01\Desktop\db1.mdb" myNewDB1 = "C:\WINNT\Profiles\edudk01\Desktop\db2.mdb" myNewDB2 = "C:\WINNT\Profiles\edudk01\Desktop\db3.mdb" Set objFileSystem = CreateObject("Scripting.FileSystemObject") objFileSystem.CopyFile myCurrentDB, myNewDB1, True DBEngine.CompactDatabase myNewDB1, myNewDB2, dbLangCyrillic objFileSystem.CopyFile myNewDB2, myCurrentDB, True Kill myNewDB1 Kill myNewDB2 Set objFileSystem = Nothing А предидущий "нуфовский" код я просто вставлял целиком из примера в модуль и вызывал процедуру из формы. Может там процедуру обработки ошибок как-нибудь специально описать надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 15:04 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
хм... Вроде все пральна и логично... В обработчике ошибок пока добавлять ниче не надо (коль скоро у Вас ошибок и не возникает). Што я могу предположить? 1. Могет быть что NT по-своему как-то понимает "копировать файл"? 2. А могет быть что Акс под NT по-своему как-то понимает "Сжать/восстановить"? 3. А могет быть Вы сами как-то по своему понимаете (оцениваете) сжатие БД? Не подумайте, что я стебаюсь или вообще пытаюсь как-нить ущемить чье-либо достоинство, но... Вы точно уверены, что БД не была сжата одним из тестовых запусков, а теперь уже ей и сжиматься то некуда? Если вы уверены, то извиняюсь 100 разов, а ежли нет, то попробуйте добавить в БД много-пре-много записей (запросом, конешна:), а затем грохните их, после чего замерьте массу/объем, после чего запустите процедуру, и еще один замер... И вообще, как вы оцениваете "сжалась" она или не "сжалась"? //ниче на ум не приходит... вроде выполняется без ошибок, а не выполняется совсем... хм... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 15:32 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Отвечаю по порядку: 1. Не думаю, файлы копируются без проблем. 2. Тоже не то, если я допустим просто командно сжимаю из данной базы какую либо другую то все работает (из Файл-1 сжимаем Файл-2 в Файл-3). 3. Добавляю 100 новых записей, смотрю размер базы (200 кб). Удаляю все 100 записей, смотрю размер базы (200 кб). А. Сжимаю базу из "вручную" из меню, смотрю размер базы (148 кб). Б. Сжимаю базу програмно, смотрю размер базы (200 кб). Я в чем то неправ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:01 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
А нет ли в этой программе On Error Resume Next? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:05 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Санычу- в приведенном мной примере процедуры обработки ошибок нет совсем. В "нуфовском" примере он есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:11 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
> в приведенном мной примере процедуры обработки ошибок нет совсем. А в вызывающей процедуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:18 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Интересно посмотреть на файлы и их размеры после каждого шага. Особенно после DBEngine.CompactDatabase. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:21 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
В "нуфовском" примере его тоже нет! То есть он есть, но он отсылает к обработчику, а не Resume Next!... Хм... все ж таки... Хрень какая-та! Ошибок нет, действий нет... Мыслей нет... Ничего нет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:21 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Переустановили мы Аксес (таже версия, другой диск), все заработало. Однако... Всем ОГРОООООМНОЕ спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:39 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Э-э-э-э-э! вах... А я уж было чуть... Саныч, спасибо за поддержку... //пошел лобать понятную версию "нуф-нуфовского" кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:42 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Саныч протягивает руку из Израиля и пожимает Нуфу пятачок. Зрелище, кто бы видел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:54 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Угу Особенно с учетом того, что пятак у Нуфа сопливый (еще:) Гы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:57 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Это менее важно. Важнее, что у Израиля отношения со свининой особенные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 16:58 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
А он кошерная свинья :) (это только шутка, миллион раз извините если что) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 17:24 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Да чего извиняться, я-то согласен. :^) Пусть Нуф подтвердит, что извиняться не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 17:30 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Я еще наеду щаз! Не по поводу свинины, кнешна :) Вы, EDUDK01, обманули нас чтоль? млин.? Вы текущую базу сжимаете? И как? сжимается? млин... "нуфовским"вариантом можно только другую бд сжать... А так как у меня все проекты "деленые", то я об этой фишке запамятовал... А щаз, готовя FAQ напоролся... Нука, EDUDK01, поближе, поближе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 18:42 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Зачем "нуфовским"? Я своим "идиотским" вариантом сжимаю базу. Взяли вот сразу и обвинили во всем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 19:18 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
тогда просветите нас, каким "идиотским" способом вы сжимаете ТЕКУЩУЮ базу? //никаких обвинений... догадки одни :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 19:23 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Dim objFileSystem As Object Dim myCurrentDB As String Dim myNewDB1 As String Dim myNewDB2 As String myCurrentDB = "C:\WINNT\Profiles\edudk01\Desktop\db1.mdb" myNewDB1 = "C:\WINNT\Profiles\edudk01\Desktop\db2.mdb" myNewDB2 = "C:\WINNT\Profiles\edudk01\Desktop\db3.mdb" Set objFileSystem = CreateObject("Scripting.FileSystemObject") objFileSystem.CopyFile myCurrentDB, myNewDB1, True DBEngine.CompactDatabase myNewDB1, myNewDB2, dbLangCyrillic objFileSystem.CopyFile myNewDB2, myCurrentDB, True Kill myNewDB1 Kill myNewDB2 Set objFileSystem = Nothing ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 19:26 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
И что, на строке objFileSystem.CopyFile myNewDB2, myCurrentDB, True (копирование уже сжатого файла на место ТЕКУЩЕГО) не вываливается ошибка №70 "Permission denied!"? Хм... Хээээээээээээээлп!!!! Теперя у меня не работает!!! Может тоже офис снести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 19:48 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Нет никакой ошибки, все работает как часы, хотя код ИМХО плебейский. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2003, 19:56 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
А вы абсолютно уверены, что мы подразумеваем под "ТЕКУЩАЯ БД" ту БД, из которой выполняется сжатие (в которой работает наша процедура сжатия)? //просто так... лишний раз убедиться в ясной постановке задачи... з.ы. и что есть "плебейский"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 09:03 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Народ! Это и правда интересно. Получается, можно копировать базу из самой себя? И сжимать? ОТКРЫТУЮ?! И ПЕРЕЗАПИСЫВАТЬ на то же место?!! ПРАВДА, ЧТО ЛИ? 8-() Кто еще пробовал, отзовитесь! Нужны мысли по поводу "бэкапа по расписанию", уже думал внешнее приложение писать и по выходе его стартовать... Или винрар... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 09:56 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Получается, можно копировать базу из самой себя? И сжимать? ОТКРЫТУЮ?! И ПЕРЕЗАПИСЫВАТЬ на то же место?!! А хрен ли нам кабанам (Нуф-Нуф привет ) Есть у тебя база db1.mdb Создаешь в нотепаде файл, называешь его db1.mdb и копируешь в то место где база лежит. Очень даже скопируется. Админы в шоке, а ты сидишь и радуешься как хорошо база пожалась ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 10:02 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Нуф-нуфу: Алгоритм действий: Из Файл-1 запускаем процедуру: 1. Копировать Файл-1 в Файл-2 2. Сжимаем Файл-2 в Файл-3 3. Перезаписываем Файл-3 в Файл-1 4. Убиваем Файл-2 и Файл-3 Все работает без ошибок, проверено на Аксес 2000 и Аксес ХР. Насчет кода, я имел ввиду что данный вариант наверное не самое рациональное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 13:10 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Мюнхаузены блин. Сами себя за волосы научились вытаскивать из болота Ну как можно работая в Файл1 копировать поверх Файла1 что-то другое? Ну позволяет это аксес, но это же не повод этим пользоваться. А после копирования захочет какой-либо объект сохраниться - и кирдык, нераспознаваемый формат. Вам оно надо - так сжимать базу, что потом восстанавливать придется? Только что попробовал описанную методику, только не програмно, а ручками. Т.е. открыл базу, скопировал ее в другое место, восстановил/сжал, скопировал обратно (при этом все время исходная база была открыта). Ну и п%здец базе. При закрытии первой же формочки пошли по кругу два сообщения - "Ошибка при операции сохранения" и "Нераспознаваемый формат". Пришлось таскманагером срубать. Восстановить не получилось. Так что этот вариант не только не рациональный. Это - преступный вариант В фак его включать нельзя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 13:33 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
> В фак его включать нельзя В фак его включать надо, но только под лозунгом: если вам кто-то будет предлагать, не ешьте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 13:38 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Не пропал я (привет Лоху), а гулял у подножия маленький такой гора Машук (еще раз привет Лоху:) и не съеден еще (привет Санычу), и вообще, у меня отпуск (привет ВСЕМ :) гы-гы... //работайте-работайте, типа... Но буду съеден, ежли потекший кран дома у лубимой дэвушки не починю, а это вам не базу, знаете ли, восстановить :) По существу: 1. для EDUDK01: Знаешь, скорее всего это опять какой-то глюк. Правда, не берусь судить на моей ли машине или на вашей, ибо это без разници - ежли есть глюк (код ведет себя по разному от случая к случаю), то это код стоит упомянуть (см.ниже), но не стоит рекомендовать к повторению. //лично у меня при попытке перезаписать уже сжатый файл на место открытого выдается "Пермишен денаед" (шо-то типа "Разрешение на операцию не получено"). Видимо это пральна, ибо в справке черным по белому написано: "Copies and compacts a closed database , and gives you the..." и все в этом духе. Поэтому в таком виде, во всяком случае в FAQ это не пойдет (см, опять же, ниже). 2. Появилась новая идея добавить в "FAQ: Сжатие БД" раздел "Что еще можно сделать и почему так делать не надо?" , в котором и будут отражены варианты сжатия через "программный клик", "мюнхаузенское сжатие самого себя" и могет быть еще че-нить... 3. Клятвенно клянусь сени-завтра выложить предокончательную версию FAQ на всеобщую оценку, правку (наведение красоты) и т.п. Надеюсь (очень), что он будет окончательным вариантом... //уехал кран чинить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 14:47 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Нуфу: ОК, глюк так глюк. Но мне то от этого не легче, базу однако сжимать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2003, 15:13 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Вот я тут прочел все ваши сообщения и решил поделиться своим методом. Я понимаю, что этот метод - кульбиты пьяного дедушки, но раз нельзя выполнять _сжатие_ и _архивирование_ открытой базы и тем более ТЕКУЩЕЙ базы, то, возможно, это единственный метод. Итак, механизм: 1. из ТЕКУЩЕЙ базы (которую очень хочется и сжать и архивировать) вызывается модуль, который в текущ. (где база лежит) каталоге создает WSH скрипт, запускает его и закрывает базу. 2. запущенный скрипт дожидается, пока Акс закроет базу, и запускает ее сжатие: "msaccess <база>.mdb /compact". 3. потом делается архивация (тоже банальное копирование файлов с помощью объектов WSH) 4. и если все это прошло успешно, снова открывает базу в пользовательском режиме. Конечно этот механизм имеет много НО, однако с грехом поплам оно работает. 8-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2003, 16:59 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
чё-то я не понял зачем и чё сжимают... база - это акес в неразделенном виде? в однопользовательном режиме? или это клиентская часть? саму себя сжимать-то зачем? трудно на панель вынести снопку сжать и востановить? для каких целей сжатие? для резервного копирования? дак это в друго топике.. или я чё-то недогоняю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2003, 18:58 |
|
||
|
Сжатие базы, помогите!!!
|
|||
|---|---|---|---|
|
#18+
Moose, привет! Что-то подобное мы уже реализовали средствами самого Аксесса, но, имхо, возможностей там побольше можно прикрутить. Смотри FAQ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2003, 19:56 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1680174]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 183ms |
| total: | 290ms |

| 0 / 0 |
