|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Комрады, приветствую! Имеется разделенная БД Access (локально формы и запросы для каждого юзера, в сети - таблицы). Файл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Раньше, когда базой только начали пользоваться и у юзеров было мало (или совсем отсутствовали свои запросы) обновление заключалось в простом удалении файла с формами и заменой его на новый. Сейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои. Вопрос: как реализовать отдельное обновление модулей и форм внутри accdb так, чтобы со стороны юзера было меньше всего телодвижений? _____________________ А что на самом деле хотел сказать "Frost_Imp" никто не знает, так как администрация форума попросила его быть вежливым. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:36 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_Imp, хранить настройки в другой БД. Или организовать автоматическое обновление пользовательских данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:41 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
\\\\, настройки совсем отдельно - уже, наверное, поздно, переделки того не стоят. А автоматическое обновление - это, извините, как? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:43 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_Imp, у меня есть БД, которая обновляется стандартно с заданного места. Пользователь запускает "пускатель", а тот проверяет актуальность версии и если надо обновляет и переписывает настройки пользователя, и/или просто запускает основную БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:48 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
\\\\, поделитесь примером? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 10:50 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_Imp, свой рабочий вариант выкладывать не буду, в размер не укладываюсь, да и решает он специфические задачи (а править некогда). Но вот несколько возможных вариантов решения Как хранить версию базы? OpenDatabase ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:08 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Если фантазировать, как это могло бы быть... 1. В сетевом файле есть таблица, в которой лежит номер актуальной версии. Либо id обновления. 2. При каждом открытии пользовательского файла средствами VBA происходит запрос в эту таблицу и извлечение единственного либо последнего (соответственно) значения. 3. Это значение сравнивается со значением в модуле пользовательского файла, например "update_history". Если значения совпадают - ничего не происходит (ну или запускается обычная последовательность процедур). Если значения не совпадают - происходит запрос в таблицу примерно следующего вида: № обновления заменить2 main.bas3 main.bas3 Form_frmResp.clc Находим номер обновления (п.1), средствами VBA удаляем файл, имя которого указано в поле "заменить", экспортируем новое, которое лежит по заранее определенному пути. Сохраняем файл проекта. При необходимости повторяем процедуру. 4. В модуль "update_history" записываем номер обновления. Коряво? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:11 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_ImpСейчас это сделать проблематично без ручного пересохранения большого количества запросов, которые у каждого юзера свои Это как? Еще ни разу не видел приложения в котором для каждого юзера свои запросы... Это нужно всем отдать только таблицы и сказать типа - ребята, а запросы каждый себе делайте сами ? Обычно запросы, формы, отчеты и модули для всех одинаковые и всё это вместе называется интерфейсом, который потом и обновляется на ура путем замены только одного файла (интерфейса). По нормальному, юзеры кроме форм и отчетов больше ничего и видеть то не должны, а если давать всем вольную на то, чтобы самому что-то ваять - то никакой речи об автоматическом обновлении интерфейса уже и быть то не может... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:15 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
vmag, смотрите, для работы форм у меня все запросы либо в рекордсоурсах форм, либо в VBA. Сохраненные запросы - это когда в сети лежит файл на десяток миллионов записей, а юзеру нужна аналитика. Какая-то своя. Которая не нужна соседу справа и соседу слева. Он делает запрос и периодически к нему обращается. Или 20 запросов. То же самое делают соседи справа и соседи слева. То есть мой Access делает 2 вещи: 1. Выполняет заранее запрограммированные функции 2. Служит хранилищем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:21 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_ImpКоряво?Очень. Первую ссылку не смотрел. Версия хранится в свойствах бд. Файл front-end копируется к пользователю с временным названием, туда программно добавляются/копируются пользовательские данные, старый front-end удаляется, новый переименовывается и запускается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:22 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_ImpКоряво? Есть немного. Служебная таблица по п. 1 - такие же данные, как и остальные, обрабатываемые приложением. Так что место ей - в БД с данными. Сведения об обновлении блоков по п. 3 - должны имхо храниться как в БД локального интерфейса (custom properties), так и в общей БД с данными в служебной таблице. Более того, БД с данными должны хранить, вероятно, и историю обновления, и даже прогресс текущего обновления. Frost_ImpНаходим номер обновления (п.1), средствами VBA удаляем файл, имя которого указано в поле "заменить", экспортируем новое, которое лежит по заранее определенному пути. Сохраняем файл проекта. При необходимости повторяем процедуру. Основная проблема предлагаемой схемы - её неустойчивость. Во-первых, совершенно непонятно, что делать, если в процессе обновления произошла ошибка. Во-вторых, неясно, как в этой схеме обновлять модуль обновления. Гораздо разумнее такая схема: 1) При запуске модулем интерфейса выполняется версионный контроль. Если текущая версия равна актуальной - начинается сеанс работы. Если версионная информация недоступна - разумнее аварийно завершить работу, чем запустить интерфейс, рискуя порушить данные. 2) Если текущая версия младше (или просто не равна - но вот тут надо много думать) актуальной - выполняется защищённое (от сбоев и искажений) копирование с общего ресурса двух модулей. Первый - модуль обновления. Второй - актуальная версия интерфейса. Если имеются предыдущие копии (проверка выполняется перед копированием) - сперва они проверяются на целостность и актуальность версии, разрушенные и неактуальные - удаляются и загружаются новые. Если в процессе копирования обнаружено повреждение копируемых модулей - выполняется аварийное завершение с выводом диагностики. 3) Если копирование прошло нормально - асинхронно запускается модуль обновления, ему передаётся необходимая информация о текущем процессе, и работа основного модуля завершается. 4) Модуль обновления ожидает завершения работы основного приложения (по переданным ему данным), после чего выполняет переименование модулей (current -> bak, new -> current). Если оно неудачно - диагностика и аварийное завершение. 5) Если переименование прошло удачно - модуль обновления асинхронно запускает обновлённый интерфейс и завершает работу. Вопрос удаления старых версий надо решать дополнительно. Я бы оставил его на чисто удаление вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:33 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_ImpФайл с формами я иногда обновляю: где-то код допишу, где-то форму исправлю). Для общего развития - DoCmd.TransferDatabase может импортировать любой объект. Существующий перед этим можно удалить (DoCmd.DeleteObject) или переименовать (DoCmd.Rename). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:38 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Для общего развития - DoCmd.TransferDatabase может импортировать любой объект.Включая объект (модуль или макрос), в котором располагается этот самый выполняемый в текущий момент DoCmd.TransferDatabase? чёта я засомневался... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 11:40 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
\\\\, не разберусь в прилагаемом вами примере. В нем говорится следующее авторFile>Database Properties вкладка Custom, в поле Name пишем "DB Version" ставим тип "Number" и всякий раз увеличиваем это значение. В 7 VBA нет Database Properties, есть Project Properties. Не понимаю, как там добавить поле с произвольным типом, куда сохранять значение версии? Есть некое поле Conditional compilation arguments. Это оно? Как вызвать его значение из VBA? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:11 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_Imp, ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 12:35 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Для общего развития - DoCmd.TransferDatabase может импортировать любой объект. Существующий перед этим можно удалить (DoCmd.DeleteObject) или переименовать (DoCmd.Rename). авторDoCmd.TransferDatabase Осуществляет экспорт/импорт данных между открытой базой данных (или проектом Microsoft Access) и другой (внешней) базой данных. А мне нужно, например, *.bas импортировать в открытую базу данных просто с жесткого диска, эта макрокоманда не подходит. А что подойдет? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 18:18 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
То есть сейчас задачу сузилась до: импортировать файл *.bas или *.cls в текущую базу данных без диалоговых окон. Имена файлов знаю, пути знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 19:18 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Простая замена файла-библиотеки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 19:22 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Отделите мух от котлет, отделите БД с данными и вашу интерфейсную часть от файла БД с индивидуально-пользовательской частью, где каждый может делать какие угодно запросы. Для поддержки ощущения целостности системы сделайте в своей интерфейсной БД кнопку "Открыть мои запросы".. Всё что ваше - это ваше и не надо туда пускать пользователей НЕ через ваш интерфейс, а в своем файле пользователи пусть веселятся без вас. При такой схеме задача сводится к типовой - как подменить файл на более новый. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2016, 19:36 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
PredeclaredПростая замена файла-библиотеки.не понимаю Мухи-КотлетыОтделите мух от котлет, отделите БД с данными и вашу интерфейсную часть от файла БД с индивидуально-пользовательской частью, где каждый может делать какие угодно запросы. Для поддержки ощущения целостности системы сделайте в своей интерфейсной БД кнопку "Открыть мои запросы".. Всё что ваше - это ваше и не надо туда пускать пользователей НЕ через ваш интерфейс, а в своем файле пользователи пусть веселятся без вас. При такой схеме задача сводится к типовой - как подменить файл на более новый. Я уже писал в самом начале, что если бы все было по описанной вами схеме - проблем бы не было. Проблема возникла сейчас на уже готовой базе. Мухокотлеты это или нет - решать, уж извините, в конечном итоге юзерам на местах. Я не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я). Меня (и поставленные бизнес-задачи) на все сто устраивает текущая схема. Отдавать дань красоте я не хочу: для этого нет ни ресурсов, ни необходимости. Поэтому, если вам не сложно, давайте вернемся не к обсуждению правильности структуры моей БД, а к конкретному вопросу: как средствами VBA без диалоговых окон импортировать модуль (*.bas) из внешнего файла? Прежний файл я удаляю без проблем Код: vbnet 1.
а вот с импортом разобраться не могу ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 09:05 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Frost_ImpЯ не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я).Я тоже ничего критического не вижу, не пойму с чего вы об этом заговорили. Предложенный мной вариант никак не исключает "мой функционал через формы, а также сами ведут аналитическую работу". Frost_ImpМеня (и поставленные бизнес-задачи) на все сто устраивает текущая схема.Вы лукавите. Данный топик тому подтверждение. Но то ли еще будет.. Frost_ImpОтдавать дань красоте я не хочу: для этого нет ни ресурсов, ни необходимости.И ресурсов станет еще меньше, поскольку вы будете возвращаться сюда с вопросами "Как обновить лишь часть модулей (пользователи пишут свои модули)?", "Как обновить лишь часть модуля (пользователи дописывают мои модули)?", "Как обновить лишь часть функций (пользователи переписывают мои функции)?". А уж сколько ресурсов будет уходить на каждого (!) пользователя после очередного апдейта, ибо что-то не заработало в индивидуальной уникальной (у каждого пользователя своя личная версия) системе. Не буду говорить о зажатости в изменении дизайна (это вообще будет чем-то непонятным) и прочих граблях. Но вы правы в одном - мои посты являются оффтопом в данной теме, за что извиняюсь. Удачки вам ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 09:43 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Мухи-КотлетыFrost_ImpЯ не вижу ничего критичного в том, что юзеры используют мой функционал через формы, а также сами ведут аналитическую работу (они, а не я).Я тоже ничего критического не вижу, не пойму с чего вы об этом заговорили. Предложенный мной вариант никак не исключает "мой функционал через формы, а также сами ведут аналитическую работу". Frost_ImpМеня (и поставленные бизнес-задачи) на все сто устраивает текущая схема.Вы лукавите. Данный топик тому подтверждение. Но то ли еще будет.. Frost_ImpОтдавать дань красоте я не хочу: для этого нет ни ресурсов, ни необходимости.И ресурсов станет еще меньше, поскольку вы будете возвращаться сюда с вопросами "Как обновить лишь часть модулей (пользователи пишут свои модули)?", "Как обновить лишь часть модуля (пользователи дописывают мои модули)?", "Как обновить лишь часть функций (пользователи переписывают мои функции)?". А уж сколько ресурсов будет уходить на каждого (!) пользователя после очередного апдейта, ибо что-то не заработало в индивидуальной уникальной (у каждого пользователя своя личная версия) системе. Не буду говорить о зажатости в изменении дизайна (это вообще будет чем-то непонятным) и прочих граблях. Но вы правы в одном - мои посты являются оффтопом в данной теме, за что извиняюсь. Удачки вам 100500 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 09:55 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
Комрады, я очень рад, что мой вопрос вызвал такое бурное обсуждение. К сожалению, мне н ехватает профессиональных знаний, чтобы объяснить вам на понятном (и однозначно понимаемом) языке, почему я не хочу сейчас разделять базу для того, чтобы решить точечную задачу. В очередной раз попрошу ответить на вопрос - как средствами VBA без диалоговых окон импортировать модуль (*.bas) из внешнего файла? Если угодно - я соглашусь со всеми вашими "обвинениями", посыплю голову пеплом и приму факт, что я безрукая обезьяна, если это поможет в решении моей задачи. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 10:01 |
|
Обновление модулей для пользователей
|
|||
---|---|---|---|
#18+
не верю, что я это делаю... пара разных решений тут: http://stackoverflow.com/questions/31596339/importing-a-module-into-access-programmatically-from-a-cls-or-similar-file если не устроит, то гуглить по "ms access VBProject.VBComponents import" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2016, 10:19 |
|
|
start [/forum/topic.php?fid=45&msg=39188922&tid=1613818]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 178ms |
0 / 0 |