Программирование MsAccess, VB, VBA

  

© am 1999-2016

Добро пожаловать, незнакомец! [вход]   

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

Контроль и автоматическое обновление клиентских приложений

(обращений: 20987 с 29.05.2006)

Разделы:  Разное, Базы

 

Описание: Вариант для локальной сети, полностью заменяющий клиентскую часть

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Профиль пользователяJoss 29.05.2006

Скачать:

sd_ReleaseUpdate20.zip (120950 байт) (скачиваний: 2625 с 29.05.2006)
Немного истории. Рано или поздно любой разработчик сталкивается с проблемой обновления своей программы: обнаружены и устранены ошибки, доработаны формы, появились новые параметры. Эта проблема несколько раз поднималась на форуме, было предложино несколько решений.
Желающие могут посмотреть статью Upgrade-автомат клиентских приложений или база данных по базам данных http://am.rusimport.ru/MSAccess/topic.aspx?ID=446 , Обновление приложений (дискеткой) http://am.rusimport.ru/MSAccess/topic.aspx?ID=384
Лет шесть назад я уже решал такую проблему, но вот новая работа и эта проблема встала снова. Я покапался в своих старых разработках, кое-что подправил, улучшил и решил предложить Вашему вниманию. Может кому-нибудь это облегчит жизнь.
И так, приступим. Дано: классическая файл-серверная система, таблицы с данными находятся на сервере, часть с кодом стоит на компьютнрах пользователя. Задача: контролировать появление новых версий и автоматически обновлять их.
Алгоритм:
а) создаем на сервере специальный каталлог, куда будем помещать новые версии программы;
б) создаем на рабочем столе пользователя ярлык, который запускает вспомогательную программы, которая (тьфу, тавтология!) контролирует наличие новых версий.
В зависимости от наличия или отсутствия новой версии она выполняет следующие действия:
- новой версии нет:
г-1) запускается программа;
- новая версия есть:
г-2) удаляется старая версия, копируется новая, программа запускается на выполнение.

Есть множество других решений, например, программа сама контролирует наличие новой версии, и случае необходимости создает скрипт на обновление старой версии (удаление старой и копирование новой), запускает его, а сама закрывается.
Теперь, как контролировать появление новых версий программы. Тут тоже можно придумать несколько способов. Например, создать в программе глобальную переменную и присвоить ей номер версии, а в каталог на сервере с новыми версиями поместить текстовый файл (например: ИмяПрограммы.rev или ИмяПрограммы.rls), где будет указан номер новой версии. При запуске программы этот файл будет считан, и в случае несовпадения версий будет произведено обновление.
Я пошел по несколько иному пути. В клиенстой части создал таблицу tblRelease, в которую вношу всякую полезную информацию. Данная таблица содержит так же поле Data формата Дата/Время, причем оно заполняется автоматически при добавлении новой записи.(В режиме конструктора таблиц, для поля Data, в параметре "Значение по умолчание" установлена функция Date() ). Для контроля версий сравниваю значения полей Data в рабочей и архивной базе.

Вашему вниманию предлагается программа ReleaseUpdate, версия 2. Основное отличие от первой версии: программу можно использовать для контроля и обновления нескольких приложений, и программа позволяет создавать и обновлять ярлыки для своего запуска на рабочем столе.

Программа написана на Access для простоты и удобства корректировки. Для работы программы необходимо в клиентской части создать таблицу tblRelease с полем Data типа Date/Time и заполнить её.
Инструкция по работе с программой ReleaseUpdate.
Перед началом настройки программы ReleaseUpdate вы должны создать на сервере (или в любом доступном по сети месте) каталог для новых версий, куда надо поместить архивную версию клиентской части. Она может иметь имя отличное от имени рабочей версии (но всегда новая помещаемая версия должна иметь то же имя). На компьютере пользователя необходимо разместиь рабочую версию клиентской части БД. Затем можно переходить к настройке программы.
При запуске программы ReleaseUpdate без параметра /cmd она переходит в режим настройки. Для работы необходимо заполнить 5 полей
Рабочий каталог и файл: - заносится путь и имя клиентской части базы данных на компьютере пользователя;
Архивный каталог и файл: - заносится путь к папке для новых версий программы и имя программы;
Иконка: - иконка для ярлыка на рабочем столе (файл формата ico, можно незаполнять);
Название ярлыка: - название ярлыка на рабочем столе;
Параметры командной строки: - любой допустимый набор из букв и цифр, именно по нему будут искаться параметры для работы программы (что-то вроде индекса).
После заполнения полей нажмите кнопку "Установка ярлыка", на рабочем столе появится соответствующий ярлык. Можно посмотреть его свойства. Если вы потом захотите изменить какой либо из параметров в программе ReleaseUpdate, то после изменения нажмите кнопку "Установка ярлыка". Ярлык будет откорректирован. Если же вы изменили параметр "Название ярлыка", то будет создан новый ярлык с новым именем, а старый надо будет удалить вручную.
Вот собственно и всё. Можно приступать к работе.

[Back]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
без темы Профиль пользователяLeon   
хотелось бы услышать оценку такого варианта (хотя бы мнение):
файл-сервер
файл рабочих групп, данные и интерфейс на сервере
у пользователей только ярлыки к интерфейсу
01.06.2006 14:57

to Leon Профиль пользователяJoss   
"Это не есть карашо." Если только вы не работаете в терминальном режиме. (это когда твой компьютер является по-просту терминалом сервера. Кто работал на СМ и ЕС, те поймут. (Ну и кто не работал - тоже)). Иначе нагрузка на сеть только увеличивается. Да и в этом случае есть трудности с реализацией многопользовательской работы. Если только не разместите клиентские части для каждого пользователя в отдельную папочку.
01.06.2006 15:09

Re:to Leon V.Kim   
В поддержку Joss'у
(для многопользовательского режима)
Отдельное клиентское приложение значительно гибче и дает больше возможностей особенно, если у Вас сложные алгоритмы обработки данных.
Например, не надо заморачиваться с уникальными именами при создании временных таблиц.

Подход, на который указал Leon, эффективен только в редких и несложных приложениях.

01.06.2006 16:08

Простейший способ Профиль пользователяgrey_rat   
контроля версии - добавить клиентской части свойство, скажем, ReleaseDate и сравнивать его при старте со свойством эталонной, лежащей на сервере. Безо всяких служебных таблиц.
И касательно временных таблиц. Если генерировать для них случайные имена длиной символов хотя бы в пять, то никакая толпа юзеров при всем усердии не добьется совпадения...
01.06.2006 17:04

вдогонку Профиль пользователяJoss   
to Leon
Кроме того вам нужен хороший сервер. У меня Sempron 2600+ и ОЗУ 512 Мб, некоторые мои выборки на 2-4 минуты загружают проц на 100%. Теперь прикиньте Ваше предложение и сеть из 20-ти машин, При Вашем подходе вычислительные мощьности рабочих станций использоваться не будут, всё ляжет на сервер. Хотя с другой стороны, в качестве рабочих станций можно использовать машины типа Celeron 400 со 128 Мб под Win 98, или Durron 750 с 256 Мб под Win XP, или что-то среднее под Win 2000.
to V.Kim
Проблему с временными таблицами я решал таким путем: при вызове программы каждый пользователь должен был идентифицыровать себя (что-то вроде парольной защиты), при этом подключалась дополнительная база, где и находились временные таблицы. Для каждого пользователя была своя база с временными таблицами, так что насчет их названий я голову не ломал. Причем, эти базы с временными таблицами по окончанию работы автоматически очищались и сжимались. Удобно.
01.06.2006 17:38

to gray_rat Профиль пользователяJoss   
Покажи, как к клиентскому приложению можно добавить свойство, и как его считать. Я никогда этого не делал. А давать разные имена временным таблицам я не хочу. У меня на низ основана куча запросов, как хранимых, кат и из VBA.
01.06.2006 17:50

без темы Профиль пользователяLeon   
спасибо за отклики. я примерно так и думал, но тем не менее попробую. база предельно простая - по сути файловый архив. основная задача - предотвратить случайное удаление/изменение. не хочется настраивать пути для каждого клиента и хочется иметь один общий файл рабочих групп. если будут "грабли", поделюсь.
02.06.2006 10:32

Ещё один вариант обновления клиентских приложений. Профиль пользователяJoss   
Набрел в интернете на ещё один вариант обновления клиентских приложений на сайте Алексея Козина. Правда там используется скрипт. А контроль версий происходит через реестр.
http://www.msdatabase.ru/
15.06.2006 11:31

Ну тогда еще один вариант Профиль пользователяSRG   
MDBStarter

http://mdbprogs.narod.ru/mdbstart.html

Не использует реестр.
Не использует настроечные таблицы типа tblRelease в клиентской части.
Для обновления контролирует дату-время файла.
Устанавливает/обновляет не только MDB (MDE) - клиента, но и любые другие файлы (например документацию DOC).
Устанавливает и регистрирует компоненты ActiveX, надстройки MDA.
Настраивается для работы со своими файлами рабочих групп MDW.
Настраивается на работу с архиваторами, поддерживающими командную строку (arj, rar, 7za ...)
Работает в любой версии MSA (97, 2k, XP, 2003)
И еще некоторые возможности (см. документацию)

Для работы/запуска необходимо настроить список устанавливаемых компонентов в настроечной форме-списке и общие параметры в файле SETUP.INI
15.06.2006 20:16

без темы MikeLED   
Долго шел по пути контроля версий.
Но отказался.
Исходим из того, что кудато выкладывается и постоянно лежит самая свежая версия.
Вопрос - зачем контролировать версии, если можно менять всегда?
Речь конечно же о настоящих клиентских приложениях в которых нет данных.
Вот внутри приложения проверку версий можно вставлять, мало ли какие экстренные изменения произошли и надо блокировать работу старой версии. Например, в Form.Activate вставить функцию проверки версий, которая проверяет, сообщает и выкидывает.
27.07.2008 10:26

Копировать или контролировать? Профиль пользователяJoss   
На сайте SQL.RU в связи с обновлением клиентских приложений много раз поднимался вопрос, что лучше: контролировать или копировать? К единому мнению так и не пришли. Всё зависит от конкретных условий. В одних случаях лучше копировать, в других - контролировать. Пример: 20 пользователей, 15 Мб клиент, задача запускается минут на 20-30 несколько раз в день каждым пользователем. И что, каждый раз её надо будет копировать? Гигабайтные сети пока ещё редкость. А свою программку я разрабатывал, когда сеточка была всего 10 Мб.
Даже если менять всегда, то куда-то всё равно надо выкладывать последнюю версию клиента. И всё равно нужна какая-то примочка (командный файл, скрипт или программа), которая бы эту версию скопировала из хранилища и запустила.
28.07.2008 10:12

без темы marik-nv   
Возможно ли добавить такие функции как:
1. Копирование строки подключения из старой версии в новую (старая формата .ade, новая формата .ade или .adp).
2. Копирование макросов из старой версии в новую.
18.08.2008 13:04

Ответ Профиль пользователяJoss   
to marik-nv

автор писал:
1. Копирование строки подключения из старой версии в новую (старая формата .ade, новая формата .ade или .adp).
Я использую разработку Алексея Козина. Демонстрация диалога подключения к MSSQL Он предлагает хранить строку подключения в реестре. Разберите пример и адаптируйте его под свои нужды.
автор писал:
2. Копирование макросов из старой версии в новую.
А зачем? Макросы создает разработчик и они находятся в базе. Или Вы даете пользователям право самим разрабатывать макросы? Вообще-то это возможно. Но я над этим не заморачивался. Нечего нагружать программу ненужными функциями.
20.08.2008 09:39

Новая версия. Профиль пользователяJoss   
Новая версия 2.1 программы контроля и обновления клиентских приложений. Добавлена возможность использовать параметры командной строки при запуске клиентских приложений. Версия выполнена в формате Access 2000.
Присоединенный файл:sd_ReleaseUpdate21_2k.rar (Размер: 110462 байт, Скачиваний:728)
25.11.2008 13:14

О новой версии Профиль пользователяJoss   
Прошу прощения. Прикрепил не ту версию файла. Если не было параметров, то база не запускалась. Теперь ту, что надо.
Присоединенный файл:sd_ReleaseUpdate21m_2k.rar (Размер: 110019 байт, Скачиваний:801)
25.11.2008 17:23

Re:О новой версии Профиль пользователяxbz   
поправил базу, чтобы запускалась если путь длинный с пробелами и протестировал под акс2007
Присоединенный файл:ReleaseUpdate22.rar (Размер: 108909 байт, Скачиваний:771)
26.06.2009 04:51 (последнее изменение - 26.06.2009 05:02) 

О новой версии. Профиль пользователяJoss   
Увы, но пример в формате Access 2007. Вы хоть конвертируйте его в формат Access 2000. А то никто кроме владельцев A 2007 им воспользоваться не сможет
01.07.2009 00:32

Re:О новой версии. Профиль пользователяxbz   
извиняюсь, выкладывал под 2007 т.к. сам им пользуюсь...
преобразовал в 2000
Присоединенный файл:sd_ReleaseUpdate22 2k.rar (Размер: 116193 байт, Скачиваний:782)
06.07.2009 05:55

Re:Ну тогда еще один вариант Nuclearfrost   
SRG, спасибо за программу! Очень помогла! :)
20.07.2009 14:09

Без темы Сергей   
Версия 2.2 требует файл msadox.dll версии 6.0
Версия 2.0 не работает с *.mde и папками с пробелами.
28.07.2009 13:04

Ещё один скрипт для обновления клиента. Профиль пользователяJoss   
На сайте SQL.RU в топике Обновление mdb-файла участник форума CoolMind выложил вот такой скрипт для обновления клиентской части

...Решил попробовать улучшить обновление клиентских программ. Делаю следующим образом:
1. На сервере лежит оригинальный файл, который по мере надобности копируется на клиентскую машину. Надобность возникает, когда:
а) пользователь запустил ярлык с этой программой,
б) при этом дата/время изменений файла на клиенте и на сервере различны.
Конечно, теоретически возможно, что файл поменялся на сервере и одновременно поменялся на клиенте, но при этом это разные файлы, но такой случай рассматривать не будем.
2. Если даты файлов разные, копируем.
3. Запускаем полученный клиентский файл и ждём. (Сообщение №2 ссылки)
4. После окончания работы клиентской программы снова копируем файл с сервера на клиент.

При этом пытаемся устранить временной промежуток между запуском ярлыка и открытием клиентской программы. К сожалению, на практике это удаётся далеко не всегда (шаг проверки дат файлов очень медленный).
А вот и сам скрипт. Сохраняем как vbs-файл и делаем на него ярлык. При помощи него я избавился от bat- и exe-файла.

Const ServerFile = "\\Server\База\program.mdb"
Const ClientFile = "C:\База\program.mdb"

'*** 1. Проверим, надо ли обновлять программу на клиенте ***
Dim fName
Dim fso
Dim f
Dim df 'дата изменений файла
Dim update

update = True
Set fso = CreateObject("Scripting.FileSystemObject")
fName = ClientFile
If fso.FileExists(fName) Then 'если на клиенте нет файла, обновляем однозначно
  Set f = fso.GetFile(fName)
  df = f.DateLastModified 'дата изменений в клиентском файле
  fName = ServerFile
  If fso.FileExists(fName) Then 'если на сервере нет файла, не обновляем
    Set f = fso.GetFile(fName)
    If f.DateLastModified = df Then update = False
  Else
    update = False
  End If
End If
Set f = Nothing

'Скопируем файл с сервера на клиент
If update Then fso.copyFile ServerFile, ClientFile, True

'*** 2. Запустим клиентскую программу ***
Dim oShell
Set oShell= WScript.CreateObject("WScript.Shell")
oShell.Run ClientFile, , True
Set oShell = Nothing

'*** 3. По окончании скопируем файл с сервера на клиент ***
If fso.FileExists(ServerFile) Then fso.copyFile ServerFile, ClientFile, True
Set fso = Nothing
Мои замечания к примеру:
Один из самых простых способов обновления клиента.

Достоинства:
- всегда свежий клиент без мусора внутри.
- простая (можно сказать даже ... э-э-э не-е не буду) система обновления, зато должна железно работать.
- работает для всех типов файлов (mdb, mde, adp, ade)

недостатки:
- каждый раз происходит копирование клиента на компьютер. У меня клиент под 25 Мб. 10 клиентов, 4 запуска в день - уже 1 Гиг. Гонять по сети большой объем информации, как-то некрасиво.

Предложения:
Можно написать модуль генерации скрипта, который можно включать в программу.
Вызвал из программы функцию, задал место расположения архива на сервере, нажал кнопочку, а он тебе готовый скрипт и ярлык для его запуска на рабочий стол. Делается этот модуль за 30-40 минут. Или быстрее. Если есть наработки. Зато как красиво получается.
И ещё:
Я бы поместил бы рядом с клиентом на сервере и на рабочей машине маленький текстовый файлик (например, с номером версии) с именем Имя_Базы.txt и проверял бы дату не у access-овского файла, а у текстового. и копировал бы текстовый файл вместе с базой. И правил бы его вместе с базой. Тогда бы не было лишнего копирования больших объемов информации.
13.01.2010 09:53

без темы Профиль пользователяxbz   
добавил таблицу в архивную базу, теперь файл копирует помимо самой базы, все то что лежит по путям описанным в архивной копии в таблице tabFiles, плюс немного переделал копирование
копирует только при изменении файла на более свежий
недостатки:
не снимаются права с файлов только чтение - замена таких фалов и папок в программе не возможна
вариант для 2007 акса, переделать для остальных можно вариант останется рабочим полностью

Присоединенный файл:releaseUpdate.rar (Размер: 123484 байт, Скачиваний:669)
23.04.2010 10:13

DBUpdate - Frontend - Updater Профиль пользователяJoss   
Вот дали ссылку на полезный сайт "Avenius Gunter". А там есть вот такая статья и программа DBUpdate - Frontend - Updater (см. в разделе Produkte)

DBUpdate - Frontend - Updater

DBUpdate - Front-end-Updater, который не только копирует отдельные файлы клиенту, но также способен создать папки, скопировать и установить шрифты, COM сервер (элементы ActiveX и библиотеки DLLs). Кроме того DBUpdate.exe способен закрыть или перегрузить клиент после установки.

DBUpdate.exe был разработан в VB6.

Files:

* Installation (pdf, 36 KB)
* Ablaufplan (German pdf, 61 KB)
* Ini-Installer (Installationsfile, 3,5 MB)
* DBUpdate Client Files (24 KB)

Документация на английском
Присоединенный файл:InstallationEnglishDBUpdate.pdf (Размер: 33964 байт, Скачиваний:899)
26.12.2011 10:32

Access 2007 Runtime Vladimir   
Программа просто класс! Можно её использовать с Access 2007 Runtime...?
29.01.2012 15:54

без темы Anonimous   
О какой именно программе идёт речь? Тут их несколько выложено.
29.01.2012 22:17

Re:без темы Vladimir   
Имеется ввиду программа :sd_ReleaseUpdate21m_2k.rar
Да, ещё есть проблема, если приложение уже открыто, то программа выдаёт ошибку. И более того приложение, которое должно было обновиться становится повреждённым. Поэтому хорошо бы перед запуском программы делать проверку открыта ли приложение или нет....
08.02.2012 19:47

без темы Профиль пользователяNeAs   
Долго искал где бы разместить ссылку на очень интересную статью по программированию. Решил, что лучше всего здесь.
Итак, что лучше "Дорабатывать или переписывать"?
http://www.rusdoc.ru/articles/dorabatyvat_ili_perepisyvat/20005/
27.03.2012 12:10