Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обновление модулей для пользователей / 25 сообщений из 52, страница 1 из 3
10.03.2016, 10:36
    #39188820
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Комрады, приветствую!
Имеется разделенная БД Access (локально формы и запросы для каждого юзера, в сети - таблицы). Файл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Раньше, когда базой только начали пользоваться и у юзеров было мало (или совсем отсутствовали свои запросы) обновление заключалось в простом удалении файла с формами и заменой его на новый. Сейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои.
Вопрос: как реализовать отдельное обновление модулей и форм внутри accdb так, чтобы со стороны юзера было меньше всего телодвижений?
_____________________
А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым.
...
Рейтинг: 0 / 0
10.03.2016, 10:41
    #39188826
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Frost_Imp, хранить настройки в другой БД. Или организовать автоматическое обновление пользовательских данных.
...
Рейтинг: 0 / 0
10.03.2016, 10:43
    #39188830
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
\\\\, настройки совсем отдельно - уже, наверное, поздно, переделки того не стоят.
А автоматическое обновление - это, извините, как?
...
Рейтинг: 0 / 0
10.03.2016, 10:48
    #39188833
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Frost_Imp, у меня есть БД, которая обновляется стандартно с заданного места. Пользователь запускает "пускатель", а тот проверяет актуальность версии и если надо обновляет и переписывает настройки пользователя, и/или просто запускает основную БД.
...
Рейтинг: 0 / 0
10.03.2016, 10:50
    #39188834
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
\\\\, поделитесь примером?
...
Рейтинг: 0 / 0
10.03.2016, 11:08
    #39188857
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Frost_Imp, свой рабочий вариант выкладывать не буду, в размер не укладываюсь, да и решает он специфические задачи (а править некогда).
Но вот несколько возможных вариантов решения
Как хранить версию базы?
OpenDatabase
...
Рейтинг: 0 / 0
10.03.2016, 11:11
    #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
10.03.2016, 11:15
    #39188864
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Frost_ImpСейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои

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

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

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

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


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

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

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

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

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

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

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

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

Удачки вам
100500
...
Рейтинг: 0 / 0
11.03.2016, 10:01
    #39189675
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Комрады, я очень рад, что мой вопрос вызвал такое бурное обсуждение. К сожалению, мне н ехватает профессиональных знаний, чтобы объяснить вам на понятном (и однозначно понимаемом) языке, почему я не хочу сейчас разделять базу для того, чтобы решить точечную задачу. В очередной раз попрошу ответить на вопрос - как средствами VBA без диалоговых окон импортировать модуль (*.bas) из внешнего файла? Если угодно - я соглашусь со всеми вашими "обвинениями", посыплю голову пеплом и приму факт, что я безрукая обезьяна, если это поможет в решении моей задачи.
Спасибо.
...
Рейтинг: 0 / 0
11.03.2016, 10:19
    #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
11.03.2016, 10:41
    #39189720
Frost_Imp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление модулей для пользователей
Мухи-Котлетыне верю, что я это делаю...Но вы действительно это делаете, за что вам респект и лучи добра.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Обновление модулей для пользователей / 25 сообщений из 52, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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