powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обновление модулей для пользователей
52 сообщений из 52, показаны все 3 страниц
Обновление модулей для пользователей
    #39188820
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Комрады, приветствую!
Имеется разделенная БД Access (локально формы и запросы для каждого юзера, в сети - таблицы). Файл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Раньше, когда базой только начали пользоваться и у юзеров было мало (или совсем отсутствовали свои запросы) обновление заключалось в простом удалении файла с формами и заменой его на новый. Сейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои.
Вопрос: как реализовать отдельное обновление модулей и форм внутри accdb так, чтобы со стороны юзера было меньше всего телодвижений?
_____________________
А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188826
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_Imp, хранить настройки в другой БД. Или организовать автоматическое обновление пользовательских данных.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188830
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\, настройки совсем отдельно - уже, наверное, поздно, переделки того не стоят.
А автоматическое обновление - это, извините, как?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188833
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_Imp, у меня есть БД, которая обновляется стандартно с заданного места. Пользователь запускает "пускатель", а тот проверяет актуальность версии и если надо обновляет и переписывает настройки пользователя, и/или просто запускает основную БД.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188834
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\, поделитесь примером?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188857
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_Imp, свой рабочий вариант выкладывать не буду, в размер не укладываюсь, да и решает он специфические задачи (а править некогда).
Но вот несколько возможных вариантов решения
Как хранить версию базы?
OpenDatabase
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188858
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если фантазировать, как это могло бы быть...
1. В сетевом файле есть таблица, в которой лежит номер актуальной версии. Либо id обновления.
2. При каждом открытии пользовательского файла средствами VBA происходит запрос в эту таблицу и извлечение единственного либо последнего (соответственно) значения.
3. Это значение сравнивается со значением в модуле пользовательского файла, например "update_history". Если значения совпадают - ничего не происходит (ну или запускается обычная последовательность процедур). Если значения не совпадают - происходит запрос в таблицу примерно следующего вида:
№ обновления заменить2 main.bas3 main.bas3 Form_frmResp.clc
Находим номер обновления (п.1), средствами VBA удаляем файл, имя которого указано в поле "заменить", экспортируем новое, которое лежит по заранее определенному пути. Сохраняем файл проекта. При необходимости повторяем процедуру.
4. В модуль "update_history" записываем номер обновления.

Коряво?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188864
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpСейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои

Это как? Еще ни разу не видел приложения в котором для каждого юзера свои запросы... Это нужно всем отдать только таблицы и сказать типа - ребята, а запросы каждый себе делайте сами ? Обычно запросы, формы, отчеты и модули для всех одинаковые и всё это вместе называется интерфейсом, который потом и обновляется на ура путем замены только одного файла (интерфейса). По нормальному, юзеры кроме форм и отчетов больше ничего и видеть то не должны, а если давать всем вольную на то, чтобы самому что-то ваять - то никакой речи об автоматическом обновлении интерфейса уже и быть то не может...
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188868
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag, смотрите, для работы форм у меня все запросы либо в рекордсоурсах форм, либо в VBA. Сохраненные запросы - это когда в сети лежит файл на десяток миллионов записей, а юзеру нужна аналитика. Какая-то своя. Которая не нужна соседу справа и соседу слева. Он делает запрос и периодически к нему обращается. Или 20 запросов. То же самое делают соседи справа и соседи слева.
То есть мой Access делает 2 вещи:
1. Выполняет заранее запрограммированные функции
2. Служит хранилищем.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188870
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_ImpКоряво?Очень.
Первую ссылку не смотрел. Версия хранится в свойствах бд. Файл front-end копируется к пользователю с временным названием, туда программно добавляются/копируются пользовательские данные, старый front-end удаляется, новый переименовывается и запускается.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188883
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpКоряво?
Есть немного.
Служебная таблица по п. 1 - такие же данные, как и остальные, обрабатываемые приложением. Так что место ей - в БД с данными.
Сведения об обновлении блоков по п. 3 - должны имхо храниться как в БД локального интерфейса (custom properties), так и в общей БД с данными в служебной таблице. Более того, БД с данными должны хранить, вероятно, и историю обновления, и даже прогресс текущего обновления.

Frost_ImpНаходим номер обновления (п.1), средствами VBA удаляем файл, имя которого указано в поле "заменить", экспортируем новое, которое лежит по заранее определенному пути. Сохраняем файл проекта. При необходимости повторяем процедуру.
Основная проблема предлагаемой схемы - её неустойчивость. Во-первых, совершенно непонятно, что делать, если в процессе обновления произошла ошибка. Во-вторых, неясно, как в этой схеме обновлять модуль обновления.

Гораздо разумнее такая схема:
1) При запуске модулем интерфейса выполняется версионный контроль. Если текущая версия равна актуальной - начинается сеанс работы. Если версионная информация недоступна - разумнее аварийно завершить работу, чем запустить интерфейс, рискуя порушить данные.
2) Если текущая версия младше (или просто не равна - но вот тут надо много думать) актуальной - выполняется защищённое (от сбоев и искажений) копирование с общего ресурса двух модулей. Первый - модуль обновления. Второй - актуальная версия интерфейса. Если имеются предыдущие копии (проверка выполняется перед копированием) - сперва они проверяются на целостность и актуальность версии, разрушенные и неактуальные - удаляются и загружаются новые. Если в процессе копирования обнаружено повреждение копируемых модулей - выполняется аварийное завершение с выводом диагностики.
3) Если копирование прошло нормально - асинхронно запускается модуль обновления, ему передаётся необходимая информация о текущем процессе, и работа основного модуля завершается.
4) Модуль обновления ожидает завершения работы основного приложения (по переданным ему данным), после чего выполняет переименование модулей (current -> bak, new -> current). Если оно неудачно - диагностика и аварийное завершение.
5) Если переименование прошло удачно - модуль обновления асинхронно запускает обновлённый интерфейс и завершает работу.
Вопрос удаления старых версий надо решать дополнительно. Я бы оставил его на чисто удаление вручную.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188890
Frost_ImpФайл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Для общего развития - DoCmd.TransferDatabase может импортировать любой объект. Существующий перед этим можно удалить (DoCmd.DeleteObject) или переименовать (DoCmd.Rename).
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188892
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Для общего развития - DoCmd.TransferDatabase может импортировать любой объект.Включая объект (модуль или макрос), в котором располагается этот самый выполняемый в текущий момент DoCmd.TransferDatabase? чёта я засомневался...
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188922
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\, не разберусь в прилагаемом вами примере. В нем говорится следующее
авторFile>Database Properties вкладка Custom, в поле Name пишем "DB Version" ставим тип "Number"
и всякий раз увеличиваем это значение.
В 7 VBA нет Database Properties, есть Project Properties. Не понимаю, как там добавить поле с произвольным типом, куда сохранять значение версии? Есть некое поле Conditional compilation arguments. Это оно? Как вызвать его значение из VBA?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39188954
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_Imp,
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189373
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев )Для общего развития - DoCmd.TransferDatabase может импортировать любой объект. Существующий перед этим можно удалить (DoCmd.DeleteObject) или переименовать (DoCmd.Rename).
авторDoCmd.TransferDatabase Осуществляет экспорт/импорт данных между открытой базой данных (или проектом Microsoft Access) и другой (внешней) базой данных.
А мне нужно, например, *.bas импортировать в открытую базу данных просто с жесткого диска, эта макрокоманда не подходит. А что подойдет?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189417
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть сейчас задачу сузилась до:
импортировать файл *.bas или *.cls в текущую базу данных без диалоговых окон. Имена файлов знаю, пути знаю.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189420
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простая замена файла-библиотеки.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189430
Отделите мух от котлет, отделите БД с данными и вашу интерфейсную часть от файла БД с индивидуально-пользовательской частью, где каждый может делать какие угодно запросы. Для поддержки ощущения целостности системы сделайте в своей интерфейсной БД кнопку "Открыть мои запросы".. Всё что ваше - это ваше и не надо туда пускать пользователей НЕ через ваш интерфейс, а в своем файле пользователи пусть веселятся без вас.

При такой схеме задача сводится к типовой - как подменить файл на более новый.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189618
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredПростая замена файла-библиотеки.не понимаю
Мухи-КотлетыОтделите мух от котлет, отделите БД с данными и вашу интерфейсную часть от файла БД с индивидуально-пользовательской частью, где каждый может делать какие угодно запросы. Для поддержки ощущения целостности системы сделайте в своей интерфейсной БД кнопку "Открыть мои запросы".. Всё что ваше - это ваше и не надо туда пускать пользователей НЕ через ваш интерфейс, а в своем файле пользователи пусть веселятся без вас.
При такой схеме задача сводится к типовой - как подменить файл на более новый.
Я уже писал в самом начале, что если бы все было по описанной вами схеме - проблем бы не было. Проблема возникла сейчас на уже готовой базе. Мухокотлеты это или нет - решать, уж извините, в конечном итоге юзерам на местах. Я не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я). Меня (и поставленные бизнес-задачи) на все сто устраивает текущая схема. Отдавать дань красоте я не хочу: для этого нет ни ресурсов, ни необходимости.
Поэтому, если вам не сложно, давайте вернемся не к обсуждению правильности структуры моей БД, а к конкретному вопросу: как средствами VBA без диалоговых окон импортировать модуль (*.bas) из внешнего файла? Прежний файл я удаляю без проблем
Код: vbnet
1.
DoCmd.TransferDatabase 0, "Microsoft Access", db, 5, Path & rs2.updModul & "." & rs2.updType, rs2.updModul


а вот с импортом разобраться не могу
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189651
Frost_ImpЯ не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я).Я тоже ничего критического не вижу, не пойму с чего вы об этом заговорили. Предложенный мной вариант никак не исключает "мой функционал через формы, а также сами ведут аналитическую работу".

Frost_ImpМеня (и поставленные бизнес-задачи) на все сто устраивает текущая схема.Вы лукавите. Данный топик тому подтверждение. Но то ли еще будет..

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

Но вы правы в одном - мои посты являются оффтопом в данной теме, за что извиняюсь.

Удачки вам
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189666
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мухи-КотлетыFrost_ImpЯ не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я).Я тоже ничего критического не вижу, не пойму с чего вы об этом заговорили. Предложенный мной вариант никак не исключает "мой функционал через формы, а также сами ведут аналитическую работу".

Frost_ImpМеня (и поставленные бизнес-задачи) на все сто устраивает текущая схема.Вы лукавите. Данный топик тому подтверждение. Но то ли еще будет..

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

Но вы правы в одном - мои посты являются оффтопом в данной теме, за что извиняюсь.

Удачки вам
100500
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189675
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Комрады, я очень рад, что мой вопрос вызвал такое бурное обсуждение. К сожалению, мне н ехватает профессиональных знаний, чтобы объяснить вам на понятном (и однозначно понимаемом) языке, почему я не хочу сейчас разделять базу для того, чтобы решить точечную задачу. В очередной раз попрошу ответить на вопрос - как средствами VBA без диалоговых окон импортировать модуль (*.bas) из внешнего файла? Если угодно - я соглашусь со всеми вашими "обвинениями", посыплю голову пеплом и приму факт, что я безрукая обезьяна, если это поможет в решении моей задачи.
Спасибо.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189692
не верю, что я это делаю...

пара разных решений тут:
http://stackoverflow.com/questions/31596339/importing-a-module-into-access-programmatically-from-a-cls-or-similar-file

если не устроит, то гуглить по "ms access VBProject.VBComponents import"
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189720
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мухи-Котлетыне верю, что я это делаю...Но вы действительно это делаете, за что вам респект и лучи добра.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189751
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки позволю себе уточнение
Код: vbnet
1.
DoCmd.DeleteObject 5, rs2.updModul


замечательно удаляет модуль. Но этой макрокомандой не удается удалить class objects, который form_*, а при экспорте выглядит как *.cls
Перебрал все objects type - ничего не подходит
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189756
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpКомрады, приветствую!
Имеется разделенная БД Access (локально формы и запросы для каждого юзера, в сети - таблицы). Файл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Раньше, когда базой только начали пользоваться и у юзеров было мало (или совсем отсутствовали свои запросы) обновление заключалось в простом удалении файла с формами и заменой его на новый. Сейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои.
Вопрос: как реализовать отдельное обновление модулей и форм внутри accdb так, чтобы со стороны юзера было меньше всего телодвижений?
_____________________
А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым.
Попробую:
1 У вас на клиенте пользователи создают запросы?
получается что они видят таблицы и модули VBA и тд.
2 Создав запрос на обновление пользователи могут изменять данные?
3 Получется что каждый клиент уникальный (об этом вам и говорил "Мухи-Котлеты ")
никакой VBA вам не поможет так как каждово клиента будете править рученьками.
даже написав код VBA для импорта модуль (*.bas)
придется подключаться к каждому клиенту (они у вас по определению уникальны)
4 проектирование очень плохое и не надо прикрываться словами что оно вас устраивает (вот видишь не устроило)
С уважением.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189771
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIПопробую:
1 У вас на клиенте пользователи создают запросы?
получается что они видят таблицы и модули VBA и тд.
2 Создав запрос на обновление пользователи могут изменять данные?
3 Получется что каждый клиент уникальный (об этом вам и говорил "Мухи-Котлеты ")
никакой VBA вам не поможет так как каждово клиента будете править рученьками.
даже написав код VBA для импорта модуль (*.bas)
придется подключаться к каждому клиенту (они у вас по определению уникальны)
4 проектирование очень плохое и не надо прикрываться словами что оно вас устраивает (вот видишь не устроило)
С уважением.
Спасибо за критику.
С удовольствием расскажу еще раз.
1. Да, именно так. Они видят таблицы, модули. Запросы - нет, все мои запросы - в VBA.
2. Технически - да
3. Не совсем понятно. Клиенты уникальны только с точки зрения сохраненных пользовательских запросов. Все остальное (формы, модули, классы, процедуры) идентично. Именно эти идентичные вещи я и буду обновлять.
4. База проектировалась, как однопользовательская. Затем для решения бизнес-целей пришлось ее разделить и сделать многопользовательской. Какие-либо доработки уже не планировались, так как, во-первых, база была достаточно вылизана с т.з. необходимого функционала, а во-вторых через 3-4 месяца необходимость в ее использовании отпадет.
Вчера мной была найдена некритичная ошибка в одном из модулей. Ошибку я исправил, но возник вопрос - как этот модуль обновить у пользователей, не затрагивая их многочисленные запросы. В связи с чем и был создан топик.
В результате диалога в топике родился код на 50 строк, который решает мою задачу без глобальных доработок по еще одному разделению баз и вынесением пользовательских запросов в отдельный файл.
И небольшое дополнение по п.2. Это сложно объяснить, но я и пользователи делаем одну общую работу, достигая общие цели. Сделать вопрос на удаление/обновление можно - но зачем? После этого конечный пользователь выйдет в свете "сам себе злобный буратино" и "отморожу уши назло бабушке". В это сложно поверить разработчикам, находящимся по другую сторону баррикад от бизнес-пользователей, но в моем случае - я и пользователи на одной стороне. И все прекрасно отдают себе отчет в своей работе.
P.S. И, да - файл с таблицами у меня бэкапится регулярно, восстановить поврежденные данные - дело двух кликов мыши.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189773
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_Imp,

Я полностью согласен с Мухи-Котлеты, но рас уж это действительно для меня такой цирк впервые, то просто расшифрую на примере самый подходящий (на мой взгляд) тут ответ от

PredeclaredПростая замена файла-библиотеки.

Итого:
1. Распаковываем в корень диска С моё вложение дабы на нем иметь папку C:\modulator с пятью файлами mdb (ВАЖНО! Распаковать нужно именно так и именно туда, иначе не будет работать - это всего лишь пример).
Основные файлы:
- таблицы (это просто таблицы, типа сама база данных, хранилище)
- приложение_лузера (это то, что у каждого юзера своё персональное), к нему привязана таблица из хранилища из файла таблицы, в нем создан модуль tmp (заглушка) и в референсах есть ссылка на авторский файл (приложение_автора)
- приложение_автора собственно тот файл, который поставляет всем автор в нем пока одна функция f1_
Дополнительные (для тестирования):
- приложение_автора1 (сейчас один в один соответствует файлу приложение_автора)
- приложение_автора2 (в нем изменена функция f1_ тут она не складывает, а умножает, например)
Как проверить:
1. Запускаем Запрос1 из приложение_лузера и видим, что он суммирует поля... закрываем всё...
2. Удаляем нафик приложение_автора, и делаем его по новой из приложение_автора2 (делаем копию и переименовываем в приложение_автора).
3. Запускаем Запрос1 из приложение_лузера и видим, что он уже перемножает поля...
Вывод:
приложение_лузера тупо оперирует данными из таблицы, но в соответствии с алгоритмами из приложение_автора, которое ему подсунули в виде файла...

НО ЭТО ОЧЕНЬ ПОХОЖЕ НА ТУПИКОВЫЙ ПУТЬ !!!
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189778
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpP.S. И, да - файл с таблицами у меня бэкапится регулярно, восстановить поврежденные данные - дело двух кликов мыши.
Чепуха ни чего вы не востановите у вас же не каждую секунду бекап делается!
Да откатится на день может и получиться, но это не есть айс.
Советую (ИМХО) Клиентская база имет ссылку на дополнительную базу так сказать (сборник вашеих модулей и процедур) тогда обновление будет проще обновили вашу дополнительную базу с заменой файла и проблем нет.
А ковыряться в каждом клиенте (бр в смысле та есче петня)
С уважением.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189817
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIЧепуха ни чего вы не востановите у вас же не каждую секунду бекап делается!
Да откатится на день может и получиться, но это не есть айс.
Советую (ИМХО) Клиентская база имет ссылку на дополнительную базу так сказать (сборник вашеих модулей и процедур) тогда обновление будет проще обновили вашу дополнительную базу с заменой файла и проблем нет.
А ковыряться в каждом клиенте (бр в смысле та есче петня)
С уважением.
А мне нет необходимости делать это каждую секунду. Важные данные туда заливаются раз в неделю. Пользователи делают аналитику на основе этих данных. Разную. Разнообразную. Испортили файл - получили по шее от начальства (даже не от меня). Нафига им это делать?)
Давайте я расскажу, что я в итоге сделал, может, так будет понятнее, что задача решается довольно просто и проблемы, которые вы озвучиваете, для моего случая надуманные.
Итак, при загрузке приложения запускается это
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
Public Function updBase()
Dim rs1 As Object
Dim rs2 As Object
Set db = OpenDatabase("здесь путь к файлу форм")
Call HasToBeRefreshed(lngVersionOnServer, lngVersionOnC)
If lngVersionOnServer > lngVersionOnC Then
    MsgBox ("На сервере есть обновления")
    Else
    Set db = Nothing
    Exit Function
    End If
    
mySQL = "SELECT updList.* FROM updList WHERE updList.updID = " & lngVersionOnServer
'пояснение: в сетевом файле есть таблица updList вида "номер версии(updID) - имя модуля(updModul) - тип модуля(updType)"
'в котором лежит перечень файлов, которые нужно обновить в рамках обновления №...
Set rs2 = db.OpenRecordset(mySQL)
Path = "путь до папке с обновлениями\update\" & lngVersionOnServer & "\" 'файлы для обновления лежит в папках с именем=№обновления
db = "путь до сетевого файла с таблицами"
Do While Not rs2.EOF
    On Error Resume Next
    Select Case rs2.updType 'сделал case чтобы указывать разные project type в DoCmd.DeleteObject
        Case "bas"
        DoCmd.DeleteObject 5, rs2.updModul
        Case "cls"
        'вот здесь сложность, не могу удалить Form_...
        End Select

    Dim strFile As String
    Dim strPath As String
    Dim strProject As String
    
    strFile = rs2.updModul & "." & rs2.updType
    strPath = Path & strFile
    Debug.Print strPath
'здесь импортирую нужный файл
    If Len(Dir(strPath)) > 0 Then
        'VBE.ActiveVBProject.VBComponents.Import strPath
        VBE.VBProjects("code for ATM").VBComponents.Import strPath
        DoCmd.RunCommand acCmdCompileAndSaveAllModules
        Else
        MsgBox "File not found: " & strPath, vbOKOnly + vbCritical, "Oops!"
        End If
    rs2.MoveNext
    Loop
    
End Function
'здесь полностью скопипасченная функция сверки версий
Public Function HasToBeRefreshed(lngVersionOnServer, lngVersionOnC) As Boolean

Dim wrk As Workspace
Dim dbs As Database, cnt As Container
Dim doc As Document, prp As Property
'Dim lngVersionOnServer As Long
'Dim lngVersionOnC As Long

Const conPropertyNotFound = 3270    ' Property not found error.

On Error GoTo SetCustom_Err
    Set wrk = DBEngine.CreateWorkspace("", "Admin", "")
    Set dbs = wrk.OpenDatabase("путь до локального файла")
    Set cnt = dbs.Containers!Databases
    Set doc = cnt.Documents!UserDefined
    Set prp = doc.Properties("DB Version")
    lngVersionOnC = prp.Value
   

    Set dbs = wrk.OpenDatabase("путь до сетевого файла")
    Set cnt = dbs.Containers!Databases
    Set doc = cnt.Documents!UserDefined
    Set prp = doc.Properties("DB Version")
    lngVersionOnServer = prp.Value

    Set prp = Nothing
    Set doc = Nothing
    Set cnt = Nothing
    Set dbs = Nothing
    Set wrk = Nothing

    'HasToBeRefreshed = (lngVersionOnServer > lngVersionOnC)

    Exit Function


SetCustom_Err:
    Beep
    If Err = conPropertyNotFound Then
        MsgBox "There is no information of the DB Version.", vbExclamation
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
    End If

    HasToBeRefreshed = False

End Function


Все! За исключением проблемы, которую я указал в коде, все замечательно работает.
Да, код грязноватый, но да и я не профи.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189846
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_Imp, ню-ню... А "мусор" который остаётся после удаления модулей? Не проще ли копировать файл с кодом, а туда уже добавлять запросы/таблицы(?) пользователя?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189851
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\Frost_Imp, ню-ню... А "мусор" который остаётся после удаления модулей? Не проще ли копировать файл с кодом, а туда уже добавлять запросы/таблицы(?) пользователя?
Какой именно мусор?
Свой способ выбрал потому, что мне легче скопировать заранее заданный список файлов, нежели парсить и составлять рандомный список из запросов юзера. Ну и как бы все рвно не понимаю, чем ваш вариант радикально лучше, возможно ответ про мусор поможет мне разобраться.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189886
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_ImpКакой именно мусор? Для начала вот, а там дальше сам...
Модификация модуля очистки от "мусора"
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189887
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_Imp,

А почему Вас не устраивает библиотечный вариант базы? Т.е. создаете файл с формами, отчётами, модулями и т.д. (назовём условно "Библиотека"), потом создаете ещё один файл для юзера (назовём "Пользовательская база"), где НЕ будут ни форм, ни отчётов и т.д. Подключаете в пользовательской базе через референс библиотеку. Единственное - надо будет функционал состряпать как вызвать объекты из библиотеки находясь в пользовательской базе.
Пользовательской базе пусть юзеры экспериментируют всё что угодно, создают какие угодно запросы и прочие объекты (хотя и такой вариант некоторые программисты не любят, мало ли что натворит пользователь!). Каждый раз Вы будете обновлять только библиотеку, а пользовательскую базу вообще не будете трогать.
Разве не вариант в Вашем случае?
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189900
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Frost_ImpСвой способ выбрал потому, что мне легче скопировать заранее заданный список файлов, нежели парсить и составлять рандомный список из запросов юзера. Ну и как бы все рвно не понимаю, чем ваш вариант радикально лучше, возможно ответ про мусор поможет мне разобраться.Так и не нужно парсить, копируй усё скопом.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189908
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenFrost_Imp,

А почему Вас не устраивает библиотечный вариант базы? Т.е. создаете файл с формами, отчётами, модулями и т.д. (назовём условно "Библиотека"), потом создаете ещё один файл для юзера (назовём "Пользовательская база"), где НЕ будут ни форм, ни отчётов и т.д. Подключаете в пользовательской базе через референс библиотеку. Единственное - надо будет функционал состряпать как вызвать объекты из библиотеки находясь в пользовательской базе.
Пользовательской базе пусть юзеры экспериментируют всё что угодно, создают какие угодно запросы и прочие объекты (хотя и такой вариант некоторые программисты не любят, мало ли что натворит пользователь!). Каждый раз Вы будете обновлять только библиотеку, а пользовательскую базу вообще не будете трогать.
Разве не вариант в Вашем случае?
Дык оне не ищют легких путей
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189909
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_Imp,

Есть ещё и такой вариант. У объекта "Application" есть скрытые методы "SaveAsText" (сохраняет в отдельный текстовый файл все свойства объекта) и "LoadFromText" (создаёт объект базы согласно текстовому файлу, который был создан с помощью "SaveAsText").
Допустим, где-то в сети находится некий файл, где модули и прочие объекты обновлены. В пользовательской базе подключаетесь к сетевому файлу, оттуда "списываете" объект с помощью "SaveAsText". Ну а потом запускаете "LoadFromText". А в конце можете удалить текстовый файл, который был создан (если хотите замести следы).

И тем не менее, библиотечный вариант всё таки лучше.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189920
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
\\\\Frost_ImpКакой именно мусор? Для начала вот, а там дальше сам...
Модификация модуля очистки от "мусора"
Полезно, безусловно. В моем случае - нет острой необходимости.
1. Размер пользовательского файла с формами некритичен.
2. Обновления происходят очень редко.
Конечно, я понимаю ваше желание делать сразу "чтоб красиво и блестело". Возможно, это ваш хлеб. Возможно, вы получаете за это деньги. Но это не мой случай. Мне нужно решить конкретную задачу, не тратя на это месяц своего рабочего времени. Я не пытаюсь вас обидеть. Я пытаюсь объяснить, почему я на хочу тратить 10Х своего времени, вместо того, чтобы потратить Х. Ну это же просто: незачем покупать автомобиль, чтобы пару раз попасть в магазин за продуктами.
studieren, это и на ваш пост ответ, в общем-то. Кроме того, без обид, но вы, видимо, пропустили мои подобные развернутые ответы выше.
И снова вернусь к своей проблеме
авторТаки позволю себе уточнение
Код: vbnet
1.
DoCmd.DeleteObject 5, rs2.updModul


замечательно удаляет модуль. Но этой макрокомандой не удается удалить class objects, который form_*, а при экспорте выглядит как *.cls
Перебрал все objects type - ничего не подходит
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189921
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_Imp,

То что ТС не понимает всех нюансов проектирования,
советовать ему бесполезно.
Схема базы и доступ к функционалу полное г..но.
Я умываю руки (не хочу участвовать в теме "как из г..на сделать конфетку" )
С уважением.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189938
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROI, при всем уважении, но я тоже не люблю, когда меня не слушают. Пятница, время потрепаться - ок, но это не оправдывает вашего желания поговорить о наболевшем для вас и ненужном для меня, вместо того, чтобы просто дать совет или рекомендацию по простому вопросу "как программно удалить class objects?" без привязки к качеству моей бд, цвету моей кожи или моей пряморукости. Спасибо за критику, но не более.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39189954
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpROI, при всем уважении, но я тоже не люблю, когда меня не слушают. Пятница, время потрепаться - ок, но это не оправдывает вашего желания поговорить о наболевшем для вас и ненужном для меня, вместо того, чтобы просто дать совет или рекомендацию по простому вопросу "как программно удалить class objects?" без привязки к качеству моей бд, цвету моей кожи или моей пряморукости. Спасибо за критику, но не более.
Дык я пытаюсь донести до вас:
1 Вам придется подключаться своим кодом на VBA к каждому клиенту.
2 Удалить из базы модуль, накатить новый, как-же предворительная компиляция (это если вы не в теме В
VBA Debug-> Compile DataBase )
3 Ну с мусором тебе объяснили, но ты я так понял не в курил (твои проблемы).
4 У вас есть стойкое желание делать все через одно место (флаг вам в руки)
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190067
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ROIДык я пытаюсь донести до вас:
1 Вам придется подключаться своим кодом на VBA к каждому клиенту.
2 Удалить из базы модуль, накатить новый, как-же предворительная компиляция (это если вы не в теме В
VBA Debug-> Compile DataBase )
3 Ну с мусором тебе объяснили, но ты я так понял не в курил (твои проблемы).
4 У вас есть стойкое желание делать все через одно место (флаг вам в руки)
Вы придумываете проблемы на пустом месте.
1. Да нет же. Ну откуда вы это берете? Писал же (именно писал, комрады, почему никто не читает?)
авторИтак, при загрузке приложения запускается это
При загрузке! Где здесь слово "вручную"?
2. Компиляцию и отладку кода я делаю на своей машине. На своей же машине проверяю работоспособность. Со своего проекта делаю экспорт файл, кладу его в папку для обновлений. При условии, что остальные модули и процедуры абсолютно идентичны моим - почему у них не должно это запуститься?
3. Я все прекрасно вкурил, проблема имеет место быть. Только я мыслю не булевыми функциями "есть проблема/нет проблемы", а взвешиваю необходимость ее решения с точки зрения здравого смысла и моих бизнес-задач.
4. Объясните мне, как вопрос "как программно удалить class objects?", будучи заданный в вакууме (о чем я прошу уже не в первый раз), является методом решения задач через одно место? Есть задача, нужен совет по решению.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190097
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по п.4.
Если вопрос о бэк модуле формы/отчета, то: HasModule Property.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190152
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclaredпо п.4.
Если вопрос о бэк модуле формы/отчета, то: HasModule Property.
Что-то я накуролесил.
Как я понял, изменение свойства формы HasModule с True на False ведет к удалению модуля формы. Об этом, по крайней мере, честно предупредил Access при попытке сделать это руками через интерфейс свойств. Я согласился. В итоге модуль формы по-прежнему визуально присутствует в списке модулей, но не открывается, ругаясь на File not found.
Также я пришел к выводу, что простая попытка импорта cls файла не превратит модуль класса в модуль формы :(
Теперь у меня 4 модуля класса, которые открываются (и имеют содержимое модуля формы), но не удаляются методом
DoCmd.DeleteObject 5, Class1
ругаясь на тот же File not found
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190161
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ожидаемо.

Вообще лучше пользовать малодокументированные
SaveAsText
LoadFromText
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190206
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredВообще лучше пользовать малодокументированные
SaveAsText
LoadFromText
Отличный совет. Особенно после PredeclaredОжидаемо. на использование хорошодокументированных.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190221
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_Imp... 4. Объясните мне, как вопрос "как программно удалить class objects?", .., является методом решения задач через одно место? ...
Вы просили объяснить?
Я таки объяснил.
Наглядно.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190236
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredFrost_Imp... 4. Объясните мне, как вопрос "как программно удалить class objects?", .., является методом решения задач через одно место? ...
Вы просили объяснить?
Я таки объяснил.
Наглядно.
Смирюсь с вашим сарказмом, все-таки на вашей территории, вынужден терпеть снисхождение.
Передумал спрашивать. В мои седые года быть подушечкой для иголок, наверное, неправильно. Подожду, может еще кто на огонек заглянет.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39190302
сорри за оффтоп, но..

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

- Привет! Как выстрелить из дробовика в сапог, его не снимая?
- А зачем?
- Ну чтобы шнурки можно было в дырочки вставлять.
- Зачем шнурки в сапогах???
- Ну мне так нужно! Просто ответьте на вопрос!
- Берете ружье и стреляете в сапог.
- Попробовал, но появилась только одна дырочка, а надо много, да и к тому же теперь нога болит.
- Вы что, не сняли сапог???
- Ну да, я же написал, что хочу стрелять не снимая...
- Так делать нельзя! Это плохо для вас закончится! Ну да ладно... Патрон должен быть с дробью, попробуйте.
- Хм.. теперь челюсть болит...
- ???
- Ну я дуплетом, а там отдача прилетела в виде приклада..

Еще раз.. всё это без злобы и стёба.. по-дружески.. разрядить обстановку, так сказать :)
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39191912
Frost_Imp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мухи-Котлеты, да я уже и не обижаюсь.
Да простят меня модераторы, но поддержу вашу лирическую нотку своим видением.

В некотором царстве, в некотором государстве жил-был добрый молодец. И отправился он как-то путешествовать по дальним странам, чтоб, как говориться, дураком не помирать, дивных дивностей посмотреть.
Много гулял, много видывал, чудес всяческих, пора и домой собираться. Лег путь его через пустыню. День идет добрый молодец, два, неделю. Еда и вода закончились. Помирать уж собрался добрый молодец, как увидел вдали оазис травою зеленой обрамленный и с колодцем посередине. Собрался добрый молодец с остатками сил и, на последнем издыхании добрался до колодца. Приятной свежестью и предвкушением ордарил его колодец, однако не тут то было: колодец глубокий, вода на дне, ведра нет, лишь какое-то устройство навроде насоса торчит из колодца. И так к нему добрый молодец, и эдак - не понимает, как с этим насосом сладится. Ну, думает, вот и смертушка моя пришла. Обидно вот так вот, около воды от жажды помереть.
Вдруг видит добрый молодец - старичок к нему ковыляет. Старенький, сухонький, но в глазах мудрость всего света. Взмолился добрый молодец, помоги, де, мне старик, помираю. "В чем задача твоя?" - медленно спросил старик. "Вот колодец, вот насос" - ответил добрый молодец, "Мне б насос поднажать да и счастлив я был бы". Осмотрел старичок доброго молодца с головы до ног и молвил: "Не под силу тебе, чужеземец, с этим насосом справиться. Руки у тебя слабоваты, да и одежда не подходит. Кроме того, ты слишком молод, насос принимает только руки стариков почтенных". "Что же мне делать, как воды испить?" - измученно прошептал добрый молодец. Сверкнул глазами старик из-под бровей седых и молвил: "Для начала тебе нужно родиться в стране семи холмов, в 7 лет пройти обряд посвящения, убить варана и съесть его его голову, затем на 20 лет уйти в отшельники, питаться только травой и постигать мудрость мира. После этого вернуться в родную страну, взять в жены самую красивую женщину, завести с ней пятерых детей, поставить свой дом, заслужить уважение Семи Старцев и лишь потом ты станешь достойным качать воду из колодца священным насосом." Заплакал добрый молодец: "Мне бы только глоток, чтоб не умереть в краю чужом. Неужели нет никаких других способов?" "Я недостаточно мудр, чтобы помочь тебе в этом" - ответил старик. "Может Один Из Семи тебе поможет?" - и показал рукой в сторону. Обернулся добрый молодец и увидел старичка, еще более сухонького и старенького, чем его собеседник, но с более глубокой мудростью в глазах. В а руке... А в руке старичка увидел добрый молодец ведро к веревке привязанной. Воспрял добрый молодец, бросился к старцу, взмолился что было силы "Помоги, старик, воды из колодца испить. Не справляюсь с насосом древним, не родился я в стране Семи холмов, не прошел обряд посвящения в семь лет, не отшельничал двадцать, не брал в жены самую красивую женщину и не рожала она мне пятерых детей. Не заслужил я уважения Семи и твоего, старик, но, ради всех богов, помоги мне воды из колодца испить!" Остановился старик, покрутил задумчиво ведро в руке и молвил: "Ведро". "Что ведро? Взять ведро? Использовать?" - добрый молодец выхватил ведро из рук старца, бросился к колодцу, забросил ведро внутрь. Струтся веревка меж рук, а ведро все еще дна не достигло. Вот уж она и кончилась. Заглянул добрый молоц в колодец - совсем чуть от ведра до воды. "Что делать, старик?" - отчаялся добрый молодец. "Одежда" - просто ответил старец. Сбросил добрый молодец с себя одежду, связал узлами, привязал к веревке и - о, чудо! - ведро зачерпнуло живительныю влагу. Потащил добрый молодец ведро наверх, предвкушая глотки прохладные, да поторопился, руки соскользнули, веревку потеряли и упала веревка с ведром и одеждой на самое дно колодца. Поднял глаза обиссилевшие добрый молодец, посмотрел на старца и упал замертво. "Я знал" - сказал старец, неторопясь подошел к насосу, снял незаметный замок, работу насоса блокирующий, двумя движениями налил себе воды в стакан, из широкого рукава извлеченный, медленно напился и пошел прочь от колодца. Темнело.
...
Рейтинг: 0 / 0
Обновление модулей для пользователей
    #39191971
А зори здесь тихие
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frost_ImpМухи-Котлеты, да я уже и не обижаюсь.
Да простят меня модераторы, но поддержу вашу лирическую нотку своим видением.

В некотором царстве, в некотором государстве жил-был добрый молодец. И отправился он как-то путешествовать по дальним странам, чтоб, как говориться, дураком не помирать, дивных дивностей посмотреть.
Много гулял, много видывал, чудес всяческих, пора и домой собираться. Лег путь его через пустыню. День идет добрый молодец, два, неделю. Еда и вода закончились. Помирать уж собрался добрый молодец, как увидел вдали оазис травою зеленой обрамленный и с колодцем посередине. Собрался добрый молодец с остатками сил и, на последнем издыхании добрался до колодца. Приятной свежестью и предвкушением ордарил его колодец, однако не тут то было: колодец глубокий, вода на дне, ведра нет, лишь какое-то устройство навроде насоса торчит из колодца. И так к нему добрый молодец, и эдак - не понимает, как с этим насосом сладится. Ну, думает, вот и смертушка моя пришла. Обидно вот так вот, около воды от жажды помереть.
Вдруг видит добрый молодец - старичок к нему ковыляет. Старенький, сухонький, но в глазах мудрость всего света. Взмолился добрый молодец, помоги, де, мне старик, помираю. "В чем задача твоя?" - медленно спросил старик. "Вот колодец, вот насос" - ответил добрый молодец, "Мне б насос поднажать да и счастлив я был бы". Осмотрел старичок доброго молодца с головы до ног и молвил: "Не под силу тебе, чужеземец, с этим насосом справиться. Руки у тебя слабоваты, да и одежда не подходит. Кроме того, ты слишком молод, насос принимает только руки стариков почтенных". "Что же мне делать, как воды испить?" - измученно прошептал добрый молодец. Сверкнул глазами старик из-под бровей седых и молвил: "Для начала тебе нужно родиться в стране семи холмов, в 7 лет пройти обряд посвящения, убить варана и съесть его его голову, затем на 20 лет уйти в отшельники, питаться только травой и постигать мудрость мира. После этого вернуться в родную страну, взять в жены самую красивую женщину, завести с ней пятерых детей, поставить свой дом, заслужить уважение Семи Старцев и лишь потом ты станешь достойным качать воду из колодца священным насосом." Заплакал добрый молодец: "Мне бы только глоток, чтоб не умереть в краю чужом. Неужели нет никаких других способов?" "Я недостаточно мудр, чтобы помочь тебе в этом" - ответил старик. "Может Один Из Семи тебе поможет?" - и показал рукой в сторону. Обернулся добрый молодец и увидел старичка, еще более сухонького и старенького, чем его собеседник, но с более глубокой мудростью в глазах. В а руке... А в руке старичка увидел добрый молодец ведро к веревке привязанной. Воспрял добрый молодец, бросился к старцу, взмолился что было силы "Помоги, старик, воды из колодца испить. Не справляюсь с насосом древним, не родился я в стране Семи холмов, не прошел обряд посвящения в семь лет, не отшельничал двадцать, не брал в жены самую красивую женщину и не рожала она мне пятерых детей. Не заслужил я уважения Семи и твоего, старик, но, ради всех богов, помоги мне воды из колодца испить!" Остановился старик, покрутил задумчиво ведро в руке и молвил: "Ведро". "Что ведро? Взять ведро? Использовать?" - добрый молодец выхватил ведро из рук старца, бросился к колодцу, забросил ведро внутрь. Струтся веревка меж рук, а ведро все еще дна не достигло. Вот уж она и кончилась. Заглянул добрый молоц в колодец - совсем чуть от ведра до воды. "Что делать, старик?" - отчаялся добрый молодец. "Одежда" - просто ответил старец. Сбросил добрый молодец с себя одежду, связал узлами, привязал к веревке и - о, чудо! - ведро зачерпнуло живительныю влагу. Потащил добрый молодец ведро наверх, предвкушая глотки прохладные, да поторопился, руки соскользнули, веревку потеряли и упала веревка с ведром и одеждой на самое дно колодца. Поднял глаза обиссилевшие добрый молодец, посмотрел на старца и упал замертво. "Я знал" - сказал старец, неторопясь подошел к насосу, снял незаметный замок, работу насоса блокирующий, двумя движениями налил себе воды в стакан, из широкого рукава извлеченный, медленно напился и пошел прочь от колодца. Темнело.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обновление модулей для пользователей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]