powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Помогите советом
21 сообщений из 21, страница 1 из 1
Помогите советом
    #39416168
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день многоуважаемые форумчане!
Помогите советом, может кто-то сталкивался....
Суть вопроса: конечный пользователь пожелал работать с базой данных Access, но (видать как обычно) не может сформулировать четко свои требования и пожелания относительно работы приложения. Бывает по несколько раз в день необходимо вносить корректировки в дизайн форм и в исполняемый код.
Отсюда возникла необходимость каким либо способом отойти от варианта копирования клиентской части на флешку и обратно, так как это крайне не удобно...
Подскажите, в сторону какой технологии копнуть, что-бы заиметь возможность обновлять элементы базы средствами самого Access .
Клиентская часть БД на Access 2010, серверная на SQL. Конечный пользователь работает под Runtime.
Заранее спасибо за любые ответы (пусть даже не по сути вопроса).
...
Рейтинг: 0 / 0
Помогите советом
    #39416173
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запихивай последнюю версию интерфейса (БД) в блоб служебной таблицы (вместе с номером билда). А БД пусть сверяет свой билд с находящимся на сервере, а при неравенстве пусть выгружает с сервера на диск новую версию и стартует её.
...
Рейтинг: 0 / 0
Помогите советом
    #39416174
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничто не мешает клиентские части хранить в Ядиске, на р.столе ярлык. доступ у Вас и клиента. при работе ему лучше синхронизацию выключать - после работы включать. но можно и так - но иногда возникают конфликты.
...
Рейтинг: 0 / 0
Помогите советом
    #39416198
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alecko,
Спасибо, но боюсь что пользователь (который сам не знает что хочет) побоится пользоваться Вашим вариантом. Ну, вообщем, сильно закомплексованный он, ну очень не повезло мне :)
...
Рейтинг: 0 / 0
Помогите советом
    #39416200
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
авторпри неравенстве пусть выгружает с сервера на диск новую версию и стартует её
Начинал выкладывать последний билд на ФТП.... Поначалу - работало. Потом у пользователя отвалился ФТП.... он находится очень далеко. Отсюда, собственно, и возник мой вопрос.
...
Рейтинг: 0 / 0
Помогите советом
    #39416215
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор обновлять элементы базы средствами самого Access.
Делал во времена модемных сетей))
Суть - все обновленные объекты копируются в файл update.mdb, который, каким-то образом доставляется клиенту в каталог \update. Сам клиент, при запуске смотрит этот каталог и обновляет у себя все, что есть в update.mdb.
Сейчас, когда по сетям гоняется 4к видео, это уже не актуально.
Посылайте по мылу, если уж у него проблемы с фтп. :-)
...
Рейтинг: 0 / 0
Помогите советом
    #39416219
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vixxaон находится очень далеко
И, как я понимаю, постоянного сетевого канала или общедоступного места (облако и т.п.) у вас с ним нет?
Кстати, понять бы, как с этим соотносится возможность
vixxaкопирования клиентской части на флешку

В общем, давайте-ка рассказывайте всё-всё, да поподробнее. А то ХШ в ремонте, а гадать лень.
...
Рейтинг: 0 / 0
Помогите советом
    #39416223
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bubuchaвсе обновленные объекты копируются в файл update.mdb, который, каким-то образом доставляется клиенту в каталог \update. Сам клиент, при запуске смотрит этот каталог и обновляет у себя все, что есть в update.mdb
Огромное спасибо! Приму как рабочий вариант (ну если не посоветуют добрые люди что-нибудь другое)
...
Рейтинг: 0 / 0
Помогите советом
    #39416227
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bubuchaвсе обновленные объекты копируются в файл update.mdb, который, каким-то образом доставляется клиенту в каталог \update. Сам клиент, при запуске смотрит этот каталог и обновляет у себя все, что есть в update.mdb.Имеет смысл только если клиент именно что на модеме сидит. Иначе проще доставлять актуальную версию БД, всю целиком. После сжатия и зипования там не так уж и много останется. А текущему клиенту как раз проще завершиться и запустить раззиповку поверх себя.
...
Рейтинг: 0 / 0
Помогите советом
    #39416257
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
В общем, давайте-ка рассказывайте всё-всё, да поподробнее. А то ХШ в ремонте, а гадать лень.
НИКАКИХ СЕКРЕТОВ И ТАЙН!!!
Заказчик, вполне адекватный и вполне разбирающийся в технологиях и в методах работы с компьютером, находится в другом государстве. Он также работает с созданной БД, но только просматривает результаты и непосредственно не осуществляет ввод и корректировку данных.
Непосредственный пользователь находится, обычно, в 5-10 минутах ходьбы... Но этот пользователь - женщина.... А Вы пробовали когда-нибудь что либо сделать для (простите милые дамы, читающие данный пост, я не со зла) идейного(!) эникейщика женского пола, который не только не может сформулировать свои пожелания, но и категорически отказывается запомнить элементарные вещи, типа Cnrl+C и подобное? Плюс, после почти любого действия с БД требующего что-нибудь изменить, исправить, переделать???
Флешка была упомянута в образных целях. Всегда в таком случае пользовался пересылкой готового приложения по скайпу. Но, повторюсь, пользователю-эникейщику надо было минут десять рассказывать (и не один раз в день!) как скачать архив, куда распаковать ... ну и так далее :(
Вот как-то так....
...
Рейтинг: 0 / 0
Помогите советом
    #39416376
хм-м-м
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Душещипательная история.)))
Хорошо бы, чтоб разработчик предвидел пожелания пользователя,
даже те, о которых этот пользователь сам не догадывается.
И предъявлял реализацию этих пожеланий в таком виде, что
пользователь не мог бы отказаться,
а только говорил: "Как я люблю работать в этой программе!".
)))
...
Рейтинг: 0 / 0
Помогите советом
    #39416483
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм-м-м,
Душещипательная история.)))
Нуууу, какая есть
разработчик предвидел пожелания пользователя, даже те, о которых этот пользователь сам не догадывается. И предъявлял реализацию этих пожеланий в таком виде, что пользователь не мог бы отказаться
А я и не говорил, что пожелания пользователя разработчик не предвидел. Все учтено, схвачено и все работает. Вопрос стоит в том, что у меня просто не было опыта работы с клиентом, который
говориТ: "Как я люблю работать в этой программе!".
, но при этом как-бы намекает, а вот если бы можно было бы изменить кое-что так, что бы было удобно МНЕ (пользователю), то ВААЩЕ.... (Вдогонку, пользователю ОЧЕНЬ удобно, когда приложение начинает выполнять такие функции, которые даже при детальном рассмотрении в период планирования не упоминались).
Да, и для общего, так сказать, развития хотелось узнать мнение общества по сути проблемы.
Но, как и обещал, Спасибо... за доброе слово и дельный совет.
...
Рейтинг: 0 / 0
Помогите советом
    #39416563
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве канала доставки в вашем тяжелом случае я бы рассмотрел сервисы типа Дропбокс. Программа запуска (проще всего VBS скрипт) смотрит наличие обновления в папке, при обнаружении распаковывает обновление поверх имеющейся программы, переименовывает архив и запускает программу. Все что требуется пользователю - перезапустить приложение. Естественно, ярлык запуска должен указывать на VBS скрипт, а не на саму программу. Скрипт элементарный, язык тот же VBA.
Вы всегда будете видеть, что обновление прошло и перестанете мучать бедного пользователя :) Если требуется обновлять на более чем одном компьютере, процедуру нужно будет несколько усложнить, файл не переименовывать, а оставлять.
...
Рейтинг: 0 / 0
Помогите советом
    #39416608
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vixxa,

ИМХО все ваши проблемы с заказчиками (эникейщик женского пола + застенчивый иностранец) решаются элементарно:

1. Все постановки задач должны быть задокументированы и подписаны заказчиками (и от того кто смотрит, и от того кто вводит).
- распечатать, подписать и отправить скан сейчас без проблем.
- даже достаточно хранить у себя в аутлуке папку ТЗ, в которую складывать письма с ТЗ и изменения к нему, в любой момент можно нужным письмом заказчика поставить на место.

2. Больше чем уверен, что вы женщине эникейщику и вообще никому не написали ни одной инструкции и не сделали ни одного видео урока.
- мне обычно звонят не все и те кто да - звонят максимум 1-2 раза с вопросами. И каждый раз я отвечаю - смотрите пункт инструкции № ...

Всё остальное - вторично, при условии, что вами выполнено ТЗ, выполнено не через Ж..., и есть четкие инструкции с вашей стороны.

По сути обновлений из уже вышесказанного мне понравился блоб в SQL + загрузчик ....
...
Рейтинг: 0 / 0
Помогите советом
    #39416812
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag,
(эникейщик женского пола + застенчивый иностранец)
спасибо, улыбнуло :)
вообще никому не написали ни одной инструкции и не сделали ни одного видео урока
истинная правда, потому как:
1. работа была выполнена бесплатно
2. алгоритмы работы были продуманы только мной, так как ни заказчик ни пользователи не захотели эти нюансы даже обсуждать(!)
3. работа была выполнена для "своих" (постановка задачи сводилась к вопросу "как сделать что-то хорошо"). Сразу после выдачи ПО на руки - все нормально работало в течении полугода. Потом захотели большего "чего-то хорошего"... Ну а дальше - выше по тексту.

Всем откликнувшимся - ОГРОМНОЕ спасибо!
Будем дальше договариваться с заказчиком о способах передачи актуальных версий.
...
Рейтинг: 0 / 0
Помогите советом
    #39417227
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, vmag,
во дни после сомнений, во дни после тягостных раздумий (ну почти по Тургеневу ©) решил все таки остановиться на предложенном (и одобренном) варианте BLOB - SQL - загрузчик. Заказчику с пользователями как обычно - по барабану, а мне хоть немножко муторно, но приятно.
Еще раз спасибо всем участникам и хвала коллективному разуму!!!
...
Рейтинг: 0 / 0
Помогите советом
    #39417293
Фотография гурД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторбоюсь что пользователь (который сам не знает что хочет)
побоится пользоваться Вашим вариантом.
Ну, вообщем, сильно закомплексованный он, ну очень не повезло мне :)
Да нее, сильно заколдованный.

Если бы другие вокруг с компьютерами не сидели,
то и он бы целыми днями в носу ковырялся...

Согласия такого чела можно добиться, только если
он каким-л образом будет понимать, как всё устроено и работает.

Либо вы ему разжуёте. Но это нереально,
из обл фантастики.

Он если и не обезьяна с гранатой,
то нормального заботливого обращения с оружием(компом),
регулярного его перезаряжания и надлежащего хранения
(осмысленного истользования бд
и упрощения жизни себе и окружающим) -
ждать смысла нет .

Ну не будет никакой абрамгутАн
чистить дуло и отводить ствол от человека!..

Он просто не понмает, для чего это всё нужно
и для чего комп необходим в первую очередь
.
Он ему так, потыкаться...
Обезьяна с гранатой!!!

Для него что бампер поменять, что структуру базы.
Он течёт, куда все, и говорит, как все, не понимая, о чёь,
и капризничает, как девка впервые с планшетом в руках,
и требует с подчинённых всякую ерунду.
Не ведает, как говорят, что творит.
Вся нелепось будет налицо, если в вашем тексте
просто заменить одни слова на другие.

Например, простая замена предмета труда (с компьютера на трубу)
и источника регламентации действий с объектом
(вместо программного кода код юридико-технич норм)
сразу скажет, что с такими лучше не спорить.
(Но и на поводу у дилетант также blnb нельзя^
ещё раз, просто он не верно понимает, что вокруг происходит...)

vixxaконечный пользователь пожелал работать с базой данных Access,
но (видать как обычно) не может сформулировать четко
свои требования и пожелания относительно работы приложения.
Бывает, по несколько раз в день необходимо вносить корректировки
в дизайн форм и в исполняемый код


(лёгким движением руки брюки превращаются... в элегантные шорты )
специалист геодезист намерен применить для топографической разметки
теодолит и\или нивелир, но не может (странно, что пока без разрушений)
четко сформулировать свои требования и пожелания относительно
требований ГОСТ (10529-96) к их устройству и применяемых к ним
конструктивным особенностям.
Бывает, по несколько раз в день
необходимо вносить корректировки в расположение основных узлов,
а также изменять правила поверки точности приборов, их юстировки,
корректировки для получения правдоподобных результатов измерений

vixxaЗаказчик, вполне адекватный и вполне разбирающийся
в технологиях и в методах работы с компьютером
Контраддикшн детектид!!!

Или вы это изначально про неё?
(Всё мною сказанное применимо и к женскому полу... ))) )
vixxaНепосредственный пользователь находится,
обычно, в 5-10 минутах ходьбы... Но этот пользователь - женщина....
А Вы пробовали когда-нибудь что либо сделать для
(простите милые дамы, читающие данный пост, я не со зла)
идейного(!) эникейщика женского пола, который не только не может
сформулировать свои пожелания, но и категорически отказывается запомнить
элементарные вещи, типа Cnrl+C и подобное?
Плюс, после почти любого действия с БД требующего что-нибудь изменить, исправить, переделать???
Флешка была упомянута в образных целях.
Всегда в таком случае пользовался пересылкой готового приложения по скайпу.
Но, повторюсь, пользователю-эникейщику надо было минут десять рассказывать
(и не один раз в день!) как скачать архив, куда распаковать ... ну и так далее :(


Репликация не подойдёт?

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

гурДРепликация не подойдёт?
vixxaКлиентская часть БД на Access 2010 , серверная на SQL. Конечный пользователь работает под Runtime.
простите, я не встречал в хелпе MS упоминания о поддержке репликаций в accdb.
...
Рейтинг: 0 / 0
Помогите советом
    #39420141
vixxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для заинтересовавшихся:
информацию и код по обработке блоб(ов) почерпнул от сюда https://support.microsoft.com/en-us/help/103257/acc-reading,-storing,-writing-binary-large-objects-blobs
на всякий случай приложу код:
Код: 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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
      '**************************************************************
      ' FUNCTION: ReadBLOB()
      '
      ' PURPOSE:
      '   Reads a BLOB from a disk file and stores the contents in the
      '   specified table and field.
      '
      ' PREREQUISITES:
      '   The specified table with the OLE object field to contain the
      '   binary data must be opened in Visual Basic code (Access Basic
      '   code in Microsoft Access 2.0 and earlier) and the correct record
      '   navigated to prior to calling the ReadBLOB() function.
      '
      ' ARGUMENTS:
      '   Source - The path and filename of the binary information
      '            to be read and stored.
      '   T      - The table object to store the data in.
      '   Field  - The OLE object field in table T to store the data in.
      '
      ' RETURN:
      '   The number of bytes read from the Source file.
      '**************************************************************
      Function ReadBLOB(Source As String, T As Recordset, _
      sField As String)
          Dim NumBlocks As Integer, SourceFile As Integer, i As Integer
          Dim FileLength As Long, LeftOver As Long
          Dim FileData As String
          Dim RetVal As Variant

          On Error GoTo Err_ReadBLOB

          ' Open the source file.
          SourceFile = FreeFile
          Open Source For Binary Access Read As SourceFile

          ' Get the length of the file.
          FileLength = LOF(SourceFile)
          If FileLength = 0 Then
              ReadBLOB = 0
              Exit Function
          End If

          ' Calculate the number of blocks to read and leftover bytes.
          NumBlocks = FileLength \ BlockSize
          LeftOver = FileLength Mod BlockSize

          ' SysCmd is used to manipulate status bar meter.
          RetVal = SysCmd(acSysCmdInitMeter, "Reading BLOB", _
                   FileLength \ 1000)

          ' Put the record in edit mode.
          T.Edit

          ' Read the leftover data, writing it to the table.
          FileData = String$(LeftOver, 32)
          Get SourceFile, , FileData
          T(sField).AppendChunk (FileData)

          RetVal = SysCmd(acSysCmdUpdateMeter, LeftOver / 1000)

          ' Read the remaining blocks of data, writing them to the table.
          FileData = String$(BlockSize, 32)
          For i = 1 To NumBlocks
              Get SourceFile, , FileData
              T(sField).AppendChunk (FileData)

              RetVal = SysCmd(acSysCmdUpdateMeter, BlockSize * i / 1000)
          Next i

          ' Update the record and terminate function.
          T.Update
          RetVal = SysCmd(acSysCmdRemoveMeter)
          Close SourceFile
          ReadBLOB = FileLength
          Exit Function

      Err_ReadBLOB:
          ReadBLOB = -Err
          Exit Function

      End Function

      '**************************************************************
      ' FUNCTION: WriteBLOB()
      '
      ' PURPOSE:
      '   Writes BLOB information stored in the specified table and field
      '   to the specified disk file.
      '
      ' PREREQUISITES:
      '   The specified table with the OLE object field containing the
      '   binary data must be opened in Visual Basic code (Access Basic
      '   code in Microsoft Access 2.0 or earlier) and the correct
      '   record navigated to prior to calling the WriteBLOB() function.
      '
      ' ARGUMENTS:
      '   T           - The table object containing the binary information.
      '   sField      - The OLE object field in table T containing the
      '                 binary information to write.
      '   Destination - The path and filename to write the binary
      '                 information to.
      '
      ' RETURN:
      '   The number of bytes written to the destination file.
      '**************************************************************
      Function WriteBLOB(T As Recordset, sField As String, _
      Destination As String)
          Dim NumBlocks As Integer, DestFile As Integer, i As Integer
          Dim FileLength As Long, LeftOver As Long
          Dim FileData As String
          Dim RetVal As Variant

          On Error GoTo Err_WriteBLOB

          ' Get the size of the field.
          FileLength = T(sField).FieldSize()
          If FileLength = 0 Then
              WriteBLOB = 0
              Exit Function
          End If

          ' Calculate number of blocks to write and leftover bytes.
          NumBlocks = FileLength \ BlockSize
          LeftOver = FileLength Mod BlockSize

          ' Remove any existing destination file.
          DestFile = FreeFile
          Open Destination For Output As DestFile
          Close DestFile

          ' Open the destination file.
          Open Destination For Binary As DestFile

          ' SysCmd is used to manipulate the status bar meter.
          RetVal = SysCmd(acSysCmdInitMeter, _
          "Writing BLOB", FileLength / 1000)

          ' Write the leftover data to the output file.
          FileData = T(sField).GetChunk(0, LeftOver)
          Put DestFile, , FileData

          ' Update the status bar meter.
          RetVal = SysCmd(acSysCmdUpdateMeter, LeftOver / 1000)

          ' Write the remaining blocks of data to the output file.
          For i = 1 To NumBlocks
              ' Reads a chunk and writes it to output file.
              FileData = T(sField).GetChunk((i - 1) * BlockSize _
                 + LeftOver, BlockSize)
              Put DestFile, , FileData

              RetVal = SysCmd(acSysCmdUpdateMeter, _
              ((i - 1) * BlockSize + LeftOver) / 1000)
          Next i

          ' Terminates function
          RetVal = SysCmd(acSysCmdRemoveMeter)
          Close DestFile
          WriteBLOB = FileLength
          Exit Function

      Err_WriteBLOB:
          WriteBLOB = -Err
          Exit Function

      End Function

      '**************************************************************
      ' SUB: CopyFile
      '
      ' PURPOSE:
      '   Demonstrates how to use ReadBLOB() and WriteBLOB().
      '
      ' PREREQUISITES:
      '   A table called BLOB that contains an OLE Object field called
      '   Blob.
      '
      ' ARGUMENTS:
      '   Source - The path and filename of the information to copy.
      '   Destination - The path and filename of the file to write
      '                 the binary information to.
      '
      ' EXAMPLE:
      '   CopyFile "c:\windows\winfile.hlp", "c:\windows\winfil_1.hlp"
      '**************************************************************
      Sub CopyFile(Source As String, Destination As String)
          Dim BytesRead As Variant, BytesWritten As Variant
          Dim Msg As String
          Dim db As Database
          Dim T As Recordset

          ' Open the BLOB table.
          Set db = CurrentDb()
          Set T = db.OpenRecordset("BLOB", dbOpenTable)

          ' Create a new record and move to it.
          T.AddNew
          T.Update
          T.MoveLast

          BytesRead = ReadBLOB(Source, T, "Blob")

          Msg = "Finished reading """ & Source & """"
          Msg = Msg & Chr$(13) & ".. " & BytesRead & " bytes read."
          MsgBox Msg, 64, "Copy File"

          BytesWritten = WriteBLOB(T, "Blob", Destination)

          Msg = "Finished writing """ & Destination & """"
          Msg = Msg & Chr$(13) & ".. " & BytesWritten & " bytes written."
          MsgBox Msg, 64, "Copy File"
      End Sub


Еще раз всем спасибо.
...
Рейтинг: 0 / 0
Помогите советом
    #39590629
ldfanate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в adp-шке задачу самообновления версии (при запуске задачи решали примерно так):

На SQL-сервере таблица хранящая бинарики версий клиенского ADP-файла (он туда заливается целиком, и номеру версии присваивается нарастающий ID).

Код: sql
1.
2.
3.
ID int4
Version varchar 30  - номер версии (билда) для вывода на экран/в сообщения пользователю/в инструкции пользователя и т.п.
dbFile varbinary    




Код: 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.
Function NewVersionToDisk()
'скачивание и автоинсталляция новой версии ADP-клиента с сервера
'(вызывает CMD-файл upgrade_version.cmd который должен находиться в каталоге, где находится ADP-клиент)
    On Error GoTo er
    Dim rs As New ADODB.Recordset
    Dim strSql As String
    Dim newFileName As String
    'формируем имя файла обновленной версии (временный файл, куда будет скачана новая версия)
    'сразу в ADP записывать нельзя, т.к. проект открыт и соответственно система блокирует его перезапись
    newFileName = CurrentProject.Path & "\client.adp.new"
    'Получаем запись таблицы, хранящие блоб с последней версией ADP-клиента (т.е. с максимальным id)
    strSql = "select top 1 * from dbo.Version order by id desc"
    rs.Open strSql, CurrentProject.Connection, adOpenDynamic

    Dim mstream As New ADODB.Stream
    mstream.Type = adTypeBinary
    'открываем поток
    mstream.Open
    If Not (rs.BOF And rs.EOF) Then
        mstream.Write rs("dbFile").Value   'записываем в поток блоб
        mstream.SaveToFile newFileName, adSaveCreateOverWrite    'сохраняем во временный файл
        mstream.Close
        rs.Close
    End If
    'вызываем CMD-батник (текущий ADP-проект будет уже к этому времени закрыт, т.е. блокировка перезаписи ADP - снята)
    'батник перезапишет временный файл поверх текущей версии ADP и запустит его
    'PAUSE в батнике обеспечивает, что текущий ADP-проект успеет закрыться до начала перезаписи файла
    '
    'содержимое батника:
    '@echo off
    ' pause 10
    ' copy /B /Y .\client.adp.new .\client.adp
    ' del /Q .\client.adp.new
    ' pause 0
    'start dbOPO.adp
    '
    Call ShellExecute(0, "open", CurrentProject.Path & "\upgrade_version.cmd", "", "", 1)
ex:     Exit Function
er:     MsgBox Err.description, vbCritical, Err.Number
End Function




соответственно вызов контроля версий происходит при открытии главной формы (ну или в Autoexec можно засунуть):

Код: 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.
Private Sub Form_Open(Cancel As Integer)
'При старте главной формы (из Autoexec) проверяется появление новых версий ADP-клиента и выполняется их автоустановка
    Dim sqlFindKod As String
    Dim kod As String
    Dim rs As New ADODB.Recordset
    Dim nameUser As String

    'проверка на версию клиента
    sqlFindKod = "select top 1 id, version from dbo.Version order by id desc"
    rs.Open sqlFindKod, CurrentProject.Connection, adOpenStatic, adLockOptimistic, adCmdText       'strSQL Data Source
    kod = rs.Fields("version").Value
    rs.Close
    If Me!versionBD.Caption = kod Then
         'совпадает - обновлять клиент не надо
    Else
        'версия отличается от последней залитой в блоб на сервер - обновляем
        '
        'проверяем наличие необходимого CMD-батника, обеспечивающего автоустановку новых версий клиента
        If Dir(CurrentProject.Path & "\upgrade_version.cmd") = "" Then
            MsgBox "Для обновления базы скачайте файл upgrade_version.cmd" & vbCrLf & _
                   "и скопируйте к себе в каталог " & CurrentProject.Path
            Application.Quit
        End If

        'копируем новую ADP с сервера
        MsgBox "Текущая версия ADP-клиента базы данных. Версия будет обновлена автоматически.", vbInformation
        Call NewVersionToDisk
        DoCmd.Close acForm, "MainForm"

        'выходим из БД, чтобы закрыть текущий ADP-проект (снять блокировку перезаписи - см.Call NewVersionToDisk)
        Application.Quit
    End If


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


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