powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Автообновление приложения
24 сообщений из 24, страница 1 из 1
Автообновление приложения
    #39409146
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Надоело каждый раз вручную заменять приложение. Надо автоматизировать.
Вообщем программа состоит из трех частей:
1) приложение у клиента,
2) база локальная у клиента (находится рядом с приложением),
3) база на сервере MySQL (после каждого рабочего дня клиент отправляет свои свежие данные с локальной базы на сервер).

Хочу сделать в локальной базе специальную таблицу, где в одном ее поле будет храниться зипованный файл приложения (около 500 КБ), в другом поле - номер версии (формат integer).
Также необходимо сделать форму в этом же файле (в файле локальной базы), чтобы при запуске этой формы выполнялась распаковка зипованного файла из таблицы в ту же папку где и база.

Вопрос:
1) Есть ли в аксесе формат поля куда можно будет хранить файл?
2) Возможно ли создать форму в файле базы из файла приложения?
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409192
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
форму мне приходится создать в файле базы, но с файла приложение. Потому что в файле базы я вообще не должен вручную ничего трогать.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409195
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или надо будет сделать готовую форму в файле приложение как обычно через конструктор, и при запуске определенного события программно экспортировать ее в файл базы.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409229
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно будет сделать четвертую часть - "Пускач" для приложения, который проверяет версию клиента, сравнивает ее с версией файл в локальной базе, если не совпадают, то распаковывает новый файл поверх старого клиента, после чего запускает клиента и закрывается.

Адеке1) Есть ли в аксесе формат поля куда можно будет хранить файл?
Если Акс 2007 или старше, то тип данных называется Attachment, очень удобно работать. Там нужно будет открыть два рекордсета типа Recordset2, после чего можно будет выгрузить тело файла по указанному пути
Под катом функция, которую я использую для аналогичных целей - файлы темплейтов храню в базе, чтобы не мучаться с версиями.


Public Function SaveTemplateFile(lngFileID) As String
Dim strTemplatePath As String
Dim rstFiles As DAO.Recordset2
Dim rstAttachments As DAO.Recordset2
Dim strTemplateFileName As String

On Error GoTo ErrorHandler

strTemplatePath = CurrentProject.Path & "\" & gstrTEMPLATE_PATH
If Right(strTemplatePath, 1) <> "\" Then
strTemplatePath = strTemplatePath & "\"
End If
If Dir(strTemplatePath) = "" Then
MkDir strTemplatePath
End If

Set rstFiles = dbLocal.OpenRecordset("select * from tbl_Files where FileID=" & lngFileID)
If rstFiles.RecordCount = 0 Then
Err.Raise gcUSER_DEF_ERROR_BASE + 4, "SaveTemplateFile of bas_Utilites", "Attachent record not found for FileID=" & lngFileID
End If

Set rstAttachments = rstFiles.Fields("File").Value

If Not rstAttachments.EOF Then
strTemplateFileName = strTemplatePath & rstAttachments.Fields("FileName").Value
If Dir(strTemplateFileName) <> "" Then
Kill strTemplateFileName
End If
rstAttachments.Fields("FileData").SaveToFile strTemplatePath
Else
Err.Raise gcUSER_DEF_ERROR_BASE + 3, "SaveTemplateFile of bas_Utilites", "Template file attachment not found in database for FileID=" & lngFileID
End If

SaveTemplateFile = strTemplateFileName
ExitHere:
On Error Resume Next
rstAttachments.Close
Set rstAttachments = Nothing
rstFiles.Close
Set rstFiles = Nothing
Exit Function

ErrorHandler:
Select Case Err
Case 0
Resume Next
Case Else
LogError Err.Number, Err.Description, Erl, "SaveTemplateFile", "bas_Utilites"
Resume ExitHere
End Select
End Function



Адеке2) Возможно ли создать форму в файле базы из файла приложения?
Не совсем понятен вопрос. Нужно создавать именно форму из текстового файла? Да без проблем - текстовый файл с выгрузкой формы сохраняем в локальной базе, потом выгружаем его на диск и загружаем в клиента.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409236
АдекеЕсть ли в аксесе формат поля куда можно будет хранить файл? Тип OLE объект (т.е. длинное двоичное). Не знаю, можно ли в нем хранить архив как объект, но загрузить туда тело файла как набор байтов, а затем выгрузить на диск - легко.
АдекеВозможно ли создать ( открыть? ) форму в файле базы из файла приложения? Здесь возникает куча вопросов.
Что из себя представляет "приложение"? Если не БД Access, то форму оттуда ни открыть, ни импортировать не получится.
Как в "база локальная" появится архив со свежей версией и с чем вы будете сравнивать номер версии? И вообще, если для обновления "приложение" нужно запустить "база локальная", которую обычно не запускается, то как вы узнаете, что момент настал?
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409281
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот именно, не хочу 4-ую часть создавать. Должна быть форма в файле "локальной базы", которая при открытии через секунд 3 например вытаскивает архивный файл из таблицы и распаковывает рядом и запустив его сама закрывается.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409382
Владимир2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адеке, Вам предлагается простой способ обновления.

Пакетный файл LoadMyApp.cmd

@echo off

echo Инициализация обновления Приложения

rem --- секция настроек ---

rem подключение сетевого тома W:

if exist W: goto set_folders
net use W: \\100.0.0.1\MyAppFolder password /USER:MyAppUser

:set_folders

rem папка "клиентского места"
if exist D: goto set_D
SET APP_DIR=C:\MyAppFolder
:set_D
SET APP_DIR=D:\MyAppFolder

rem папка обновлений
SET APP_UPD=W:\UPDATE\MyAppFolder

rem клиентское место
SET APP_MDEF=MyApp.accde

rem файл контроля версий
SET APP_VERF=version.txt

SET APP_MDE=%APP_UPD%\%APP_MDEF%
SET APP_VERS=%APP_UPD%\%APP_VERF%
SET APP_VERC=%APP_DIR%\%APP_VERF%

rem --- конец настроек ---

if exist %APP_UPD% goto chk_APP_dir
echo ОШИБКА: не найдена папка %APP_UPD%
echo Обновление прервано.
pause
goto end

:chk_APP_dir
if not exist %APP_DIR% goto upd
if exist %APP_VERS% goto check_verf
echo ОШИБКА: не найден файл %APP_VERC%
echo Обновление прервано.
pause
goto end

:check_verf
if exist %APP_VERS% goto check_version
echo ОШИБКА: не найден файл %APP_VERS%
echo Обновление прервано.
pause
goto end

:check_version
fc /a %APP_VERC% %APP_VERS%|find "*****"
if errorlevel=1 goto startapp

:upd
echo Обновление

if not exist %APP_DIR% md %APP_DIR%
copy /Y %APP_UPD%\*.* %APP_DIR%\*.*

:updmsg
echo Обновление успешно завершено
cd %APP_DIR%

:startapp
SET APP_MDE=%APP_DIR%\%APP_MDEF%

echo Поиск MS Access ...

SET ACCESS_EXE=\Program Files\Microsoft Office\Office15\MSACCESS.EXE

if exist "C:%ACCESS_EXE%" goto acc_c
if exist "D:%ACCESS_EXE%" goto acc_d


SET ACCESS_EXE=\Program Files (x86)\Microsoft Office\Office15\MSACCESS.EXE

if exist "C:%ACCESS_EXE%" goto acc_c
if exist "D:%ACCESS_EXE%" goto acc_d

SET ACCESS_EXE=\Program Files\Microsoft Office\Office14\MSACCESS.EXE

if exist "C:%ACCESS_EXE%" goto acc_c
if exist "D:%ACCESS_EXE%" goto acc_d


SET ACCESS_EXE=\Program Files (x86)\Microsoft Office\Office14\MSACCESS.EXE

if exist "C:%ACCESS_EXE%" goto acc_c
if exist "D:%ACCESS_EXE%" goto acc_d

echo Не найден MS ACCESS
pause
goto end

:acc_c
SET ACCESS_EXE="C:%ACCESS_EXE%"
goto run

:acc_d
SET ACCESS_EXE="D:%ACCESS_EXE%"
goto run

:run

echo Запуск Приложения...
cd %APP_DIR%
if %OS%.==Windows_NT. goto run_nt

start /max %ACCESS_EXE% %APP_MDE%
goto end

:run_nt
start "" /max %ACCESS_EXE% %APP_MDE%

:end
SET APP_DIR=
SET APP_UPD=
SET APP_MDEF=
SET APP_VERF=
SET APP_MDE=
SET APP_VERS=
SET APP_VERC=
SET ACCESS_EXE=


Ярлык запуска приложения настраивается на запуск пакетного файла.
Если что не ясно с идентификаторами - пишите.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409387
Владимир2017
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
version.txt - текстовый файл. содержимое - любое. для неолбходимости обьновления перед запуском приложения сожержимое текущего файла в папке приложения сравнивается с содержимым одноименного файла в папке UPDATE.
проверка необходимости обновления выполняется при всяком запуске стартового командного (пакетнрого) файла
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409409
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АдекеВот именно, не хочу 4-ую часть создавать. Должна быть форма в файле "локальной базы", которая при открытии через секунд 3 например вытаскивает архивный файл из таблицы и распаковывает рядом и запустив его сама закрывается.

Логически (жирным важное):
1. Есть ярлык на рабочем столе, который запускает файл программы с именем А ( другой файл этот ярлык запустить не может ).
2. Запущенный файл А находит и кладет рядом новую версию - файл Б, запускает его, а сам закрывается.
3. Теперь вторую часть обновления должен завершить файл Б :
- при старте обнаружить и убить старый файл А.
- исправить или заменить ярлык на рабочем столе на себя.

В принципе теоретически это возможно (при условии, что имя приложения и ярлыка связано с версией ПО):
Например: имя Программа_2 и имя Программа_1....
- В принципе реально Программе_2 понять при старте, что Программу_1 рядом нужно убить, нужно изменить и ярлык на рабочем столе на саму себя...
- В принципе реально и Программе_1 понять при старте, что рядом есть новая Программа_2 и завершиться или запустить новую версию и завершиться (это на случай сбоя при обновлении)...

В общем теперь ПО каждый раз при старте должно (чтоб не было путаницы) :
- проверять в каталоге наличие новой версии, запускать её, а самой завершаться.
- проверять при старте наличие новой версии, сохранять её в каталог, запускать и завершаться.
- проверять наличие старых версий в каталоге, удалять их и переделывать если чо - ярлык запуска под себя...
В принципе и наглядно... бац на рабочем столе ярлык стал Программа_40 вместо Программа_39, ага - новая версия...

На ходу придумал.... может где просчитался... но идея в том, что программа не может быть удалена или переименована, пока она запущена, но эту проблему решает плавающее имя...
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409442
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то вы усложняете, ребята. Зачем через ярлык запускать, зачем менять имя приложения. Не надо все это. Попробую еще раз объяснить свою версию.

Есть файл App.mdb (приложение). Есть файл Base.mdb (база). В файле Base только таблицы, в том числе таблица tblVers, где в поле Vers (integer) - номер версии, в поле File (OLE) - зипованный файл новой версии App. Также в этом же файле Base есть одна единственная форма frmПускач, которая после открытия по таймеру через 3 секунд выполняет функцию "пускача" - извлекает зипованный файл из tblFile.File и распаковывает рядом с собой (с заменой старого приложения естественно), запускает его, и закрывает себя.

В файле App на главной форме есть Me.labelVers.Caption, где написано его версия. Также здесь есть линк таблицы (Base)tblVers. Временами проверяет равенство Me.labelVers.Caption=(Base)tblVers.Vers. Если не равны, то запускает форму Base.frmПускач, а себя закрывает.
А открывшаяся форма Base.frmПускач через 3 секунд извлекает зипованный файл новой версии приложения App из tblFile.File, распаковывает рядом с собой (с заменой старого приложения), запускает его, а себя закрывает.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409448
Александр Маркин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адеке,

Анатолий ( Киев ) тебя спросил:
Как в "база локальная" появится архив со свежей версией?
-------------------------------------------------------------
Это главное.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409466
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр МаркинКак в "база локальная" появится архив со свежей версией?
Ну, я так понимаю, что под "локальной" базой понимается все-таки файл в локальной сети, которым пользуются все локальные пользователи и админу можно будет обновлять версию простыми действиями. Если это так, то я не понимаю, что мешает автору реализовать свою идею. Я уже и рабочий код дал, нужно только немного модифицировать и добавить запуск основного приложения.

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

Это вы всех путаете...

Адеке1) приложение у клиента,
2) база локальная у клиента (находится рядом с приложением),
3) база на сервере MySQL (после каждого рабочего дня клиент отправляет свои свежие данные с локальной базы на сервер).

Хочу сделать в локальной базе специальную таблицу, где в одном ее поле будет храниться зипованный файл приложения (около 500 КБ), в другом поле - номер версии (формат integer).
Также необходимо сделать форму в этом же файле (в файле локальной базы), чтобы при запуске этой формы выполнялась распаковка зипованного файла из таблицы в ту же папку где и база.

Вам чуть ли не в первом посте дали адекватный ответ...

MrShinНужно будет сделать четвертую часть - "Пускач"

На что вы ответили...

АдекеВот именно, не хочу 4-ую часть создавать. Должна быть форма в файле "локальной базы"

Потом, когда до вас дошло, что в одной папке не может быть файлов с одинаковым именем, а запущенный переименовать нельзя, вы стали пускач выдавать уже за свое....

Адеке. Также в этом же файле Base есть одна единственная форма frmПускач, которая после открытия по таймеру через 3 секунд выполняет функцию "пускача"

Вы уж определитесь сами с собой сначала...
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409562
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр МаркинАдеке,

Анатолий ( Киев ) тебя спросил:
Как в "база локальная" появится архив со свежей версией?
-------------------------------------------------------------
Это главное.

Если заметили я в начале писал что есть 3-я часть программы - база MySQL на сервере, куда они ежедневно после рабочего времени соединяются для выгрузки своих свежих данных. Воспользуясь этим, сделаю так что одновременно им скачается новый выпуск приложения в ввиде данной таблицы. Наверняка в MySQL есть тоже такой формат таблицы как OLE куда можно будет хранить файл.
А в MySQL естественно я буду закачивать свежую версию приложения.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409567
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinАлександр МаркинКак в "база локальная" появится архив со свежей версией?
Ну, я так понимаю, что под "локальной" базой понимается все-таки файл в локальной сети, которым пользуются все локальные пользователи и админу можно будет обновлять версию простыми действиями.
Что имеете ввиду под "простыми действиями"? Вручную что ли? Когда клиентов не 5 и не 10, а в несколько раз больше, то нет желания лазить в каждые ихние компы руками.
Я до сегодняшнего дня когда готовил новую версию, кидал в облако с доступом на скачку и давал пользователям чтобы они скачали, удалили старое приложение, а вместо него поставили новую версию.
Но были и такие криворукие пользователи, которые вместе со старым приложение удалили и базу, еще и умудрились удалить из корзины!!! Хорошо что перед этим сделали выгрузку своих свежих данных на сервер, я с сервера восстановил для них локальную базу.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409572
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АдекеЧто имеете ввиду под "простыми действиями"? Вручную что ли?
Я вообще-то предположил, что этот файл находится не на локальном компьютере пользователя, а на сервере в локальной сети и им пользуется несколько пользователей, находящихся в этой же локальной сети, иначе ваша идея насчет скачивания свежей версии из локальной базы просто не имеет смысла.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409574
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagАдекеЧто-то вы усложняете, ребята.

MrShinНужно будет сделать четвертую часть - "Пускач"

На что вы ответили...

АдекеВот именно, не хочу 4-ую часть создавать. Должна быть форма в файле "локальной базы"

Потом, когда до вас дошло, что в одной папке не может быть файлов с одинаковым именем, а запущенный переименовать нельзя, вы стали пускач выдавать уже за свое....

Адеке. Также в этом же файле Base есть одна единственная форма frmПускач, которая после открытия по таймеру через 3 секунд выполняет функцию "пускача"

Вы уж определитесь сами с собой сначала...

Я "пускач" понял как запуск только процесса обновления, а не само приложение как стартовое. Тогда назову форму не frmПускач , а frmUpdate чтобы вас не путать.

Для меня надо чтобы обычная работа начиналась как обычно со старта самого приложение App.mdb, а не через посреднический файл.
Открывшись App.mdb проверяет свой Me.labelVers.Caption на равенство со значением в линкованной таблице поля tblVers.Vers. Если они не равны, то запускает форму frmUpdate файла Base.mdb, а себя закрывает.
А открывшаяся форма frmUpdate через 3 секунд извлекает зипованный файл новой версии приложения App.mdb из tblFile.File, распаковывает рядом с собой (с заменой старого приложения), запускает его, а себя закрывает.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409578
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinАдекеЧто имеете ввиду под "простыми действиями"? Вручную что ли?
Я вообще-то предположил, что этот файл находится не на локальном компьютере пользователя, а на сервере в локальной сети и им пользуется несколько пользователей, находящихся в этой же локальной сети, иначе ваша идея насчет скачивания свежей версии из локальной базы просто не имеет смысла.
Клиенты работают не в сети, а сами по себе, удаленно, в разных городах. Вечером подключаются к интернету для выгрузки свежих данных на удаленный сервер.
В этот момент автоматически должно скачиваться с удаленного сервера зипованный файл свежей версии App.mdb.zip к ним в поле Base.mdb->tblVers->[File]
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409582
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то пришлось решать похожую проблему Контроль и автоматическое обновление клиентских приложений Тут собраны мои поиски решения. Возможно пригодится.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409588
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АдекеЕсли они не равны, то запускает форму frmUpdate файла Base.mdb, а себя закрывает.
А открывшаяся форма frmUpdate через 3 секунд извлекает зипованный файл новой версии приложения App.mdb из tblFile.File, распаковывает рядом с собой (с заменой старого приложения), запускает его, а себя закрывает.
Не будет это надежно работать, поверьте. Не понимаю, что мешает обозвать приложение, которое обновляет клиента App.mdb и заставлять пользователей запускать его? А дальше оно может сохранять запускать, например, файл с названием app.dat - чтобы у пользователя не было соблазна запустить приложение напрямую, без обновления
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409589
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АдекеЕсли они не равны, то запускает форму frmUpdate файла Base.mdb, а себя закрывает.
А открывшаяся форма frmUpdate через 3 секунд извлекает зипованный файл новой версии приложения App.mdb из tblFile.File, распаковывает рядом с собой (с заменой старого приложения), запускает его, а себя закрывает.
Не будет это надежно работать, поверьте. Не понимаю, что мешает обозвать приложение, которое обновляет клиента App.mdb и заставлять пользователей запускать его? А дальше оно может сохранять запускать, например, файл с названием app.dat - чтобы у пользователя не было соблазна запустить приложение напрямую, без обновления
...
Рейтинг: 0 / 0
Автообновление приложения
    #39409594
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinНе понимаю, что мешает обозвать приложение, которое обновляет клиента App.mdb и заставлять пользователей запускать его?
Множество файлов. И при перемещении файла базы надо будет вместе с ним таскать еще и несколько файлов.

А в моем случае можно будет начинать работу с любого файла. А при переносе достаточно будет перенести файл базы, так как при запуске его он автоматически распаковывает рядом с собой файл апликейшн.
...
Рейтинг: 0 / 0
Автообновление приложения
    #39414231
Адеке
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как программно извлечь файл из поля OLE в текущую папку?
...
Рейтинг: 0 / 0
Автообновление приложения
    #39414596
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь Хранение изображений в базе данных расположена старая статья о хранении изображений в базе данных. С примерам. Есть и примеры загрузки-выгрузки изображений из базы данных в поле OLE. Удачи.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Автообновление приложения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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