Не секрет, что при удалении из DBF-базы записи, она не удаляется, а просто помечается как удалённая, при этом физически оставаясь на своём месте и занимая место. Понадобилось мне почистить очень разросшуюся за годы DBF-базу. Сделал это средствами 1С, но мне это показалось не очень удобным (так как сама из под себя 1С база не упакуется), и родилась идея реализовать сабж в отдельной утилите на Delphi. Программа перебирает все BDF-файлы в выбранной директории, упаковывает их, и удаляет соответствующие CDX-файлы. Требует BDE engine.
Прошу сильно не пинать — всего лишь проба пера на Дельфе.
Приветствуются дельные замечания, исправления и наставления на путь истинный, пустобрехи — «не зачет».
а чем ТИИ с соотв. галкой хуже?
мдя… чтобы выдать одну команду (если мне не изменяет память zap…???) — понадобилось привлечь дельфи…
.. или pack?
пробуем — выбираем файл, жмакаем упаковать получаем ошибку борланд энжайн.. смотрим.. ааа! вместо выбранного файла подставилась маска путь*.dbf — низачот!!!
фиг с ним — пишем файл ручками….
http://s1.dump.ru/viewer/3577469/
.
хочется ругаться матом…
«PACK TABLE ‘» + полный_путь_к_дбф + «‘»
Вроде бы большая часть драйверов и провайдеров умеет.
Постоянно пользую с VFPOLEDB
+(6) Нарушено одно из главных правил программирования:
Если это уже реализовано и применимо к задаче — нехрен ихобретать велосипед!
ну и нафига оно? когда в 1с это делается одной командой…
(7) Ну, просил же сильно не пинать 🙁
(1) Что такое ТИИ?
(2) zap или pack — откуда или где такая команда?
(4)(5) прога по моему желанию должна перебирать все DBF-файлы в выбранной директории и удалить соответственные CDX-файлы.
(8) в 1С базу А нужно упаковывать из-под базы Б.
Очень жесткий прессинг, всем спасибо за комменты…
(9) сделал бы еще поддержку командной строки еще куда нишло, а так пользы ноль, даже перебор каталога и удаления cdx 5 строчек кода в 1с
Господа! Не стреляйте в пианиста — он играет, как умеет. Хотя лично мне и в голову бы не пришло писать подобное — есть же cdbfw, но дерзание заслуживает хотя бы уважения.
Например, в лом набирать?:
regsvr32 test.reg
Можно написать приблуду, которая будет выполнять только одну эту команду. Удобнее? — стопудово! Так и здесь…
(10) Я же объяснил, что перебор файлов базы из-под самой себя невозможен, только из другой базы — мне это неудобно.
(11) ну хоть кто-то заступился 🙂
(6) VFPOLEDB тож не вариант
(9)
— не знаю что она там должна и как — я как пользователь — не телепат, тем более что все равно она этого не делает…
(0) > Прошу сильно не пинать — всего лишь проба пера на Дельфе.
— Иди лучше тренируйся вон на… на кошках.
© Операция «Ы» и другие приключения Шурика
😉
(15) Я же просил пустобрехов не флудить, а вы только этим и занимаетесь. Эт Вам к Петросяну на форум. Там наверное все такие умные. А чтоб по доброму подсоветовать, так Вам слабо.
(14) Попроавил описание для нетелепатов » Программа перебирает все BDF-файлы в выбранной директории, упаковывает их, и удаляет соответствующие CDX-файлы. Требует BDE engine.».
(16) ну так положи рядом бдеэнджайн….
(17) ок, понял.
А что, база так разрослась, что конфигуратор не справляется?
(19) Даже не знаю, как ответить. Скажем так: Я не ставил себе целью бороться с разросшейся базой средствами 1С. Достаточно того, что моя утилита справилать с поставленной задачей (упаковать DBF 1С базу не из-под 1С), к тому же я хотел немного познакомиться с Дельфи (чисто из спортивного интереса), и было желание поделиться результатами работы с сообществом (которое должно было не высмеивать и сарказничать над малоопытным программистом, а оценить и дать дельные советы по возможности). Но сообщество повело себя некрасиво, что не может радовать.
(16) Разъясню…
1) Какое отношение эта разработка имеет к 1С?
2) На коммент (1) Вы так и не ответили.
3) > так как сама из под себя 1С база не упакуется
А под этим Вы что имели в виду?
4) А Вы знаете сколько раз я на форуме помогал людям? А Вы? Ровно 0 😀
(20) > над малоопытным программистом
вот-вот… я бы не доверил обработку своих баз таким кодерам….
+21 и еще альтернатива есть: Администрирование — выгрузить данные — загрузить данные. То же самое делает…
(21.1) я её собирася применить к 1С+DBF.
(21.2) Ответил в (9).
(21.3) верно, чувак. ты меня уличил в малоопытности (о чём я сообщил в предыдущем комменте).
Вопрос снят. Признаю бесполезность этой программы для сообщества.
Только прелюдия до (20.3) была слишком малоприятной для меня (столько сарказма и насмешек вместо дельных замечаний) и возможно носила легкомысленно-увеселитьельный характер для сообщества. Всем спасибо за отзывчивость.
(24) из 9-ого коммента….
(1) Что такое ТИИ?
Замечательный ответ 😀 Честно сказать, я подумал что это шутка.
И напрасно Вы обижаетесь. В (15) Я пытался Вам мягко намекнуть, что не стоит, не зная как следует платформу (Дельфи), заниматься такими серьезными вещами, как изменение файлов данных на низком уровне.
А Вы в ответ начали ругаться 🙂
(25) Ну, уж извиняйте, намёк не так понял. Просто мне не пришло в голову (21.3), так бы я к другой среде разработки и не прибегал.
(26) Ладно, я не злой 🙂
Но Вы все равно осваивайте Дельфи. Гдядишь, и пригодится в будующем 😉
P.S. А, может, и мне молодость вспомнить… что-то такое на Clipper’е написать… 😀
оки. В конце концов — хоть кто-то (в частностиAltair777 ) что-то дельное сказал 🙂
(28) снял минус 😉
а минуса можно было и поснимать 😳
(30) повторяю (28) 😀
+ (23) хотя бы по теме. и на том спс.
(33) поддерживаю. нельзя рубить начинания на корню — это же не педагогично (с) Макаренко 🙂
(33) А вот интересно… Если по какой-то причине не все файлы будут упакованы, это скажется на ссылочной целостности?
Анализируется ли она для помеченных на удалениях записях (на уровне dbf)? Есть у меня смутное подозрение, что да.
И тогда неровные колеса могут привести к тяжелым последствиям…
(34) 😀
«Бить не нужно. А не вникнут — разъяснять!» © В. Высоцкий.
+(36)
— Шурик! Вы комсомолец?
— Да.
— Это же не наш метод!
© Операция «Ы» и другие приключения Шурика
(35) прогнал несколько разных баз — проблем замечено не было. На ссылочной целостности, думаю, никак не скажется. Если какой-то файл упаковать не удается, то файл пропускается, а его CDX не трогается. Проверки на удаленные записи никакой нет — просто перебор файлов и при возможности — паковка.
(38) Это же не в транзакции делается?
А если свет отключат?
(38) Я имел в виду штатную проверку ссылочной целостности.
Пример. Удаленный элемент справочника, удаленный документ с ссылкой на этот элемент справочника.
Файл справочника упаковался, а файл документа — нет.
Т.е. в нем осталась ссылка на справочник. Хотя, и помеченная на удаление на физическом уровне.
(39) тоже вариант, нужно ИБП ставить в таком случае. То же самое может произойти и при ТИИ.
(40) исключено. вовремя упаковки ДБФ не удаляются записи помеченные на удаление в 1С, только те, которые в 1С не видны (удалены совсем), соответственно ссылок на них уже быть не может.
Команда 1С для объекта Хbase Сжать()
Сжать()
Назначение:
Сжать базу, убрав удаленные записи.
Запускай себе ert-шку из другой базы (хоть пустой) и пакуй сколько хочешь. За это минус. За применение Дельфи — плюс (потому как Дельфи 😉 )
Итого: НОЛЬ
(43) «Запускай себе ert-шку из другой базы» — не устраивает, в том то и дело. А вот то, что Альтаир подсказал в (21.3) — Вполне, и не нужно изгаляться со сторонними утилитами 🙂
(43) я же говорил, что уже реализовывал это средствами 1С — всё не то.
«Итого: НОЛЬ» — и на том спасибо, хоть не минус 🙂
Дык тогда проще поставить FoxPro, там помимо ручной правки есть и команда pack.
Что BDE engine поставить, что фокспро…
+(46) Кстати, на дельфе можно было и ADO заюзать
(47), да но это БДЕ для меня проще оказался, я ж в дельфи первый раз писал
(43) «Плавали — знаем…»
Метод Сжать() не работал раньше (лет пять назад, на старых релизах). Отрабатывал без ошибок, но записи не удалял. Как сейчас — не проверял, сама тема не очень актуальна.
(9) Это все команды фокспро, которые понимаются большинством драйверов дбф.
«и удалить соответственные CDX-файлы» — а потом все равно запускать 1С и ждать переиндексации? а не проще тогда сразу из-под 1С все делать?
(13) Почему это не вариант? Да он имеет ограничения по монопольному режиму, зато прокрасно понимает cdx-ы и имеет кучу доп.функционала, т.к. это ядро фокса.
(16) Нелогично ради такой простой операции тянуть за собой еще и BDE…
(46) Весь фокс ставить смысла нет — достаточно VFPOLEDB.
не я все понимаю конечно, вроде смысл то может и есть…
а если база открыта и в ней юзеры сидят и правят доки, а тут раз и сжатие и удаление cdx
программа может и полезная
но в отношении 1с я ее в жизни не буду использовать, ибо штатными средствами безопаснее
(50)(51) читай (21.3) и (24)
Итак… Вижу тут налетели на человека: и не так свистишь, и не туда летишь…
1. О полезности/бесполезности рассуждать не буду — ибо считаю, если хоть одному человеку облегчит жизнь, это уже польза. Хотя вместо кнопки «Выбрать файл из базы данных» я бы поставил поле выбора «Каталог БД», но это уже так… мелкие придирки и на общую картину не влияют (думаю автор по своему усмотрению изменит это дело).
2. За попытку написать на Делфи естественно надо поощрить. Говорят — все это делается штатно. Не вопросс. Но мне почему-то, к примеру, если только «посмотреть» внешнюю обработку, сподручнее плагин Абадонны к тотал командиру, чем запускать огромадину 1С и в ней уже смотреть. Дело вкуса. А о вкусах не спорят.
Так что давайте не забывать, что все мы, даже гуру, когда-то были начинающими. И чем больше маленьких, легеньких приблуд, облегчающих работу с 1С — тем лучше, или я люто извиняюсь…
(53) от такой проникновенной речи меня сразу отпустило … есть же справедливость на свете 🙂
и даже общий «-1» меня уже не огорчает 🙂
(52) Ничего то ты не понял. Большинство комментирующих не ставят целью принизить твои умственные способности, скорее наоборот — показывают промахи для того, чтобы ты мог развиваться, а не топтаться на месте…
Подробнее:
BDE штука довольно мощная, но и слишком объемная для таких целей, потому я и предложил как альтернативу использовать ВМЕСТО нее VFPOLEDB, который по сути своей является одной из последних версий движка Visual FoxPro, т.е. позволяет использовать ВЕСЬ его функционал, установкой всего лишь ОДНОГО файла в систему.
Использовать же его возможности можно откуда угодно — из 1С, delphi, VB, js, etc… (примеры и ссылки можно найти на этом форуме)
Заметил в перечислении выше JS? — на нем твою же легику, которую ты реализовал в дельфовой проге, сделать было бы быстрее, проще и без необходимости компиляции, т.е. доработка была бы намного проще, но если тебе так уж хочется использовать дельфи — флаг тебе в руки, но BDE — это слишком круто для такой простой задачи.
(56) 1. «… показывают промахи для того, чтобы ты мог развиваться, а не топтаться на месте …» Естественно, я для этого и показываю свою разработку, но это не значит, что нужно ставить минусы (именно это и расстраивает, а не стимулирует к дальнейшему развитию).
2. BDE не такая уж и большая штука — bdeinst.cab — 3,4Mb. Содержит всего один файл, который нужно за-регсрв32-ить. Его достаточно для работы БДЕ.
3. Я не спорю про широкий выбор способов для реализации сей задачи, но я выбрал именно Дельфи в целях саморазвития, и я своей цели достиг (немного изучил Дельфи).
(35)
Анализируется ли она для помеченных на удалениях записях (на уровне dbf)? Есть у меня смутное подозрение, что да.
мдя… такие элемнетраные вещи надо бы знать 😥
все равно как коммунист, не знающий кто такой Карл Маркс
(58) Я задаю наводющий вопрос. А Вас есть на него ответ?
Есть у меня смутное подозрение, что …..
Есть!!! В полях таблиц 1С (хоть dbf, хоть sql), ессть поле IsMarket.
По нему сама 1С определяет, что запись помечена на удаление, но в самих таблицах она физически существует за милую душу, и база даже не подозревает, что запись удалена. А вот при ПОЛНОМ (непоссредственном удалении из 1С) уже БАЗА ее помечает, как удаленную, и потом может использовать эту строку (если не делали pack) для другой записи.
Так что свои подозрения
можешь… убрать в ящик стола
+(60) И в школу!
Согласен с описанием в (60), только поле ISMARK, а не ISMRKET.
(62) Ну, по памяти сказал 😀
не заглянул в dd
Просто из вышеизложенного становится понятен уровень «чистых» одноэснегов 😀
А минус у тебя зря, за инициативу наказывать нельзя! Подравняю до нуля 😉
😀 да ладно, с кем не бывает. Я тоже не считаю себя полным профаном в 1С, однако про момент в 21.3 почемуто забыл, и понесло меня в дебри Дельфи. 🙁 🙂
(64) вот и спасибки — справедливость восторжествовала
+(64) Во, и Василий (Душелов) тебя за инциативу в плюсы выгнал 😀
Меня вообще отпустило после его плюса, даже захорошело как-то 🙂
(67) Василий, я думаю, заплюсовал не инициативу, а отвагу. В этом я к нему присоединюсь, пожалуй.
Девушка: Вы знаете санскрит?
Студент: А когда сдавать?
😉
(60) Это я прекрасно знаю. Вопрос был в том, знает ли об этом автор?
Позволю себе маленький ликбез 😉
Физически запись помечается на удаление при Операции — Удаление помеченных объектов, а не мифическом при ПОЛНОМ (непоссредственном удалении из 1С)
И при Удалить(1)
В первом случае проверяются ссылки на эту запись.
(69)ОТВАГА?
Что это по-вашему?
Участвовать в корриде?
Или в гонках Формулы 1?
Может быть в воздушном бою на истребителе?
А может затяжной прыжок с парашютом?
Прыжок в пропасть на резиновой растяжке или спуск по горной реке на плоту?
Поспорить на всю зарплату?
Напасть на вышибалу в баре?
Или подраться с начальником?
Прокатиться на поломанном чертовом колесе?
Ерунда…….все это мелочи!
Вот что такое ОТВАГА!
(71)
Еще раз мдя…. А удаление обработкой Спр.Удалить(1) — это мифическое?
А если включен режим непосредственного удаления, а я на отладке для себя его именно такой включаю, — это мифический?
Так что — еще раз в школу!
+ к (70) Ну отвага, не отвага, а минуса при каких хырах? Оно что, не работает, портит данные, садит сервер? Если хоть одно с выше перечисленного, тогда да — можно предъявлять претензии, а так… Злопыхательство в чисом виде.
И поэтому мой вопрос в (35) был правильный, хоть и наводящий 🙂
(33) А вот интересно… Если по какой-то причине не все файлы будут упакованы, это скажется на ссылочной целостности?
Вопрос был задан автору! И прав был Кушнир, предлагая выбирать не отдельные файлы, а каталог со всеми файлами.
Но и УПСы не спасают от зависания компьютера при сжатии базы.
Могут рухнуть ссылки…
(72) Да уже ходил я в школу и не раз 🙂
СП — моя «настольная» книга 😉
А Удалить(1) — это криво….
Удалить(<?>);
Синтаксис:
Удалить(<Режим>)
Назначение:
Удалить документ.
Параметры:
<Режим> -: 1 — непосредственное удаление, 0 — пометка на удаление (необязателен, по умолчанию — 1).
Замечание:
Метод можно использовать только для объектов, созданных функцией СоздатьОбъект.
(73) Минуса от меня тут и не было никогда. 😮
А под отвагой здесь я подразумеваю: потребовалось что-то сделать, берем незнакомый язык, резко изучаем и делаем.
Это по-нашему (с) Душелов 8)
А что, для особых идиотов автор должен был написать «сделайте сначала резвную копию»?
Я же пишу — Внимание! Первый запуск в монопольном режиме 🙂
Но при этом идиотами никого не называю…
Аркадий, что ты цепляешься, а?
Я что не прав, что ссылочная целостность может нарушиться при неполном сжатии базы?
(79) Думаю что ты не прав
(80) сейчас проверю на тестовой базе
(79) Ты не прав. Налицо непонимание элементарных вещей и неумение прислушиваться к мнению понимающих людей.
(82) налицо желание разобраться
Я разве кого-нибудь назвал? Поднимите мне веки..
«для особых идиотов» — гипотетическое выражение
Стоп. Если запись физически помечена на удаление, значит ссылок на нее нет.
сорри, ступил
еще можно запустить «Калькулятор» и проверить дествительно ли 2х2=4?
😀
(76) Это был вопрос за минуса к тем, чьи минуса еще «висят». Но похоже риторический….
(84) «Поднимите веки» — это не твое. Тебе надо говорить «Снимите с меня очки» 😀
(85) Слава богу.
Ты просто мыслишь только на уровне 1С.
Ширше надо глядеть, не надо мистицизма там, где его нет.
А вообще механизм ссылочной целостности реализован в 1С очень плохо.
Перебираются ВСЕ таблицы, поэтому работает очень медленно.
Никогда не использую, пользуюсь своими механизмами.
А в случае, если при каком-то неучтенном условии неразрешенная ссылка появилась, ее очень легко можно вернуть на место руками.
(86) Калькулятор — это отстой! Excel — это сила 😀
см. (85)
(87) см. (85)
(85) Слава Христу, Аллаху, Будде и прочим!
(94) чес.слово… весь в запарке
проблема с ИТЗ, может кто подскажет?
проблема с группами справочника
они не индексируются, итогов не могу получить
(99) Не загаживай тематическую ветку.
Тебе на 1cpp.ru
(91) >(87) см. (85)
понял, я когда отправлял — ещё не видел (85)
(93) — да я, как посмотрю, действительно, такие дебаты — о-го-го. Особенно весело про отвагу в (70) 🙂
(101) Я не загаживаю… апаю разработку моего друга 🙂
(106) Поразительно много у тебя друзей.
Сам себе назначаешь?
(109) не всех 🙂
хм… кто-то, кажется, призывал «Не загаживай тематическую ветку.«
(89)
Ну я ж не такой уж зверь;) Да и Азазелло в отпуске 😀
(57) 2. ты указал файл дистрибутива, который потом еще распаковывает кучу файлов и устанавливает в систему, что само по себе уже не есть 1 файл.
3. Я разве сказал что-то против дельфи? я показал только то, что есть движок доступа к данным намного роднее к ДБФ + имеющий больше возможностей (например, БДЕ не понимает Dbase5).
(92) Дельфи был первым ООП языком, которым я овладел в самом начале своей программистской карьеры, до него был только ДОС (си, паскаль, фортран, ассемблер), а после уже все остальное (с++, пхп, перл, пролог, лисп, 1С и многое другое).
(105) + надо изучить все имеющиемся драйверы и провайдеры, а потом уже выбирать наиболее подходящий под задачу.
Автору стоит внимательно прочитать (105) коммент, а далее справку по ADO в дельфи и на сайте мелкомягких, если он и дальше планирует разрабатывать приложения для работы с БД.