Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
176 / 61 / 3
Регистрация: 17.11.2011
Сообщений: 318
1

Распаралелить работу с базой (фоновый процесс)

10.01.2012, 13:52. Показов 995. Ответов 8
Метки нет (Все метки)

Проблема состоит в следующем.
Когда пользователь запускает рассылку, то может идти пить чай -- весь процесс рассылки занимает 15-20 минут, иногда до 30-40 минут. Отдых -- это конечно хорошо, но о дальнейшей работе пользователя с базой в это время не может идти речи.

1) Как сделать, чтоб рассылка шла в фоновом режиме?
2) как прервать и/или поставить в паузу запущенный процесс, если возникла такая необходимость?
3) какие при этом могут быть проблемы (например нарушение целостности данных)?
4) как предотвратить возможные проблемы?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2012, 13:52
Ответы с готовыми решениями:

Фоновый процесс
Здравствуйте. Как сделать так, чтобы приложение после сворачивания в трей (само сворачивание уже...

Фоновый процесс в bitrix
САБЖ, хотелось бы узнать как реализовать сие в битриксе.

Основной и фоновый процесс
Есть основной процесс, который работает в интерфейсе программы (WinForms), и есть фоновый...

Перевести процесс в фоновый режим
Задание у меня такое: Первый файл sin.out второй cos.out. Делаю по шагам: Запускаю первый...

8
Эксперт MS Access
6794 / 4383 / 282
Регистрация: 12.08.2011
Сообщений: 12,971
10.01.2012, 16:11 2
вынести рассылку в отдельный mdb и пусть там копошится?
0
176 / 61 / 3
Регистрация: 17.11.2011
Сообщений: 318
10.01.2012, 18:17  [ТС] 3
Цитата Сообщение от alvk Посмотреть сообщение
вынести рассылку в отдельный mdb и пусть там копошится?
Что именно вынести?
Таблицы?
Формы?

Если таблицы, то я так понимаю одна база будет физически жить в нескольких файлах.
Но некоторые таблицы имеют множественные связей и их нельзя просто отрезать как кусок, значит нужно будет синхронизировать. Сюда ещё добавьте удалённую работу нескольких пользователей и между ними тоже нужно синхронизироваться. Вы представляете в какой это кошмар превращается? В таком случае данным точно будет капут. По этому все таблицы должны жить в одном файле.
По хорошему под таблицы нужен отдельный серв и нормальная СУБД, но на это счастье ещё нужно заработать и появиться оно может (вместе с нормальным нетом), в лучшем случае, через пол года, а работать нужно сейчас.

Возможно есть смысл вынести формы управления рассылкой из общего файла форм (от таблиц они давно отделены)?
Запускать тогда рассылку в обычном режиме и не вошкаться с фоновыми процессами.
Но не заблокирует ли Access вторую открытую базу на в время рассылки? По опыту работы с офисом, на 99% уверен, что заблокирует. Значит это тоже не решение.

Если я в чём-то неправ, то поправьте.
0
77 / 77 / 1
Регистрация: 22.08.2010
Сообщений: 208
11.01.2012, 00:15 4
Выложите код програмы отвечающий за рассылку (подозреваю что бок там)

добавте в код рассылки DoEvents
куда именно можно сказать только увидев код, но я предполагаю, что это должно стоять в цикле обаботки рассылки
0
Эксперт MS Access
6794 / 4383 / 282
Регистрация: 12.08.2011
Сообщений: 12,971
11.01.2012, 03:58 5
Цитата Сообщение от Aeliot Посмотреть сообщение
Но не заблокирует ли Access вторую открытую базу на в время рассылки?
Я же не знаю как у вас настроены доступы и т.д. У меня не заблокирует точно, уверен на 100%
0
176 / 61 / 3
Регистрация: 17.11.2011
Сообщений: 318
11.01.2012, 23:23  [ТС] 6
Цитата Сообщение от alvk Посмотреть сообщение
Я же не знаю как у вас настроены доступы и т.д. У меня не заблокирует точно, уверен на 100%
Здесь я имел ввиду, что access вообще ни на что не отвечает и висит с часиками, пока выполняется какой-то процесс.
Цитата Сообщение от WiLex Посмотреть сообщение
добавте в код рассылки DoEvents
Про DoEvents уже почитал на форуме и в справке. Возможно alvk его же имел ввиду. В принципе, как я понял, вполне рабочая вещь. Правда справка предупреждает о всевозможных непредвиденных последствиях, если процедура в это время будет запущена повторно. На пример, пользователь снова кликнит по кнопке. Можно конечно создать глобальную переменную, которая будет помнить, что кнопку нажали и не даст запустить процедуру повторно. Но как быть с вызываемыми из кнопки процедурами и функциями? Для них что тоже нужно делать флаг "не трогать"?
Цитата Сообщение от WiLex Посмотреть сообщение
Выложите код програмы отвечающий за рассылку (подозреваю что бок там)
Выложить наверно не получится. Чтоб у вас заработали рассылки придётся дать ссылки на скрипты сайта и пароли доступа.
0
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
12.01.2012, 07:07 7
Цитата Сообщение от Aeliot Посмотреть сообщение
я имел ввиду, что access вообще ни на что не отвечает и висит с часиками
вам уже дали пару хороших советов, которые обязательно вам помогут

Цитата Сообщение от Aeliot Посмотреть сообщение
Правда справка предупреждает о всевозможных непредвиденных последствиях, если процедура в это время будет запущена повторно. На пример, пользователь снова кликнит по кнопке
очень интересно . дайте, пожалуйста, ссылку или цитату. исключительно из любопытства создал это сообщение

Цитата Сообщение от Aeliot Посмотреть сообщение
Выложить наверно не получится
что-ж, "на нет и суда нет". на общие вопросы - общие ответы
0
176 / 61 / 3
Регистрация: 17.11.2011
Сообщений: 318
12.01.2012, 11:42  [ТС] 8
Цитата Сообщение от ironegg Посмотреть сообщение
очень интересно . дайте, пожалуйста, ссылку или цитату. исключительно из любопытства создал это сообщение
"F1" на DoEvents.
Написано буквально следующее
Цитата Сообщение от F1
DoEvents Function
...
DoEvents is most useful for simple things like allowing a user to cancel a process after it has started, for example a search for a file. For long-running processes, yielding the processor is better accomplished by using a Timer or delegating the task to an ActiveX EXE component. In the latter case, the task can continue completely independent of your application, and the operating system takes case of multitasking and time slicing.
Caution
Any time you temporarily yield the processor within an event procedure, make sure the procedure is not executed again from a different part of your code before the first call returns; this could cause unpredictable results. In addition, do not use DoEvents if other applications could possibly interact with your procedure in unforeseen ways during the time you have yielded control.
Как прервать запущенную процедуру я уже понял. Но поскольку процесс длительный возник вопрос: "Где и каким образом обработка может споткнуться."

Цитата Сообщение от ironegg Посмотреть сообщение
на общие вопросы - общие ответы
Меня то как раз и интересуют наиболее часто встречающиеся трудности, чтоб самому учесть их "по месту требования".
Но все таки отсечь кусочек с рассылкой, для более предметного разговора, я постараюсь.
0
1903 / 780 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
13.01.2012, 18:35 9
Цитата Сообщение от Aeliot Посмотреть сообщение
"F1" на DoEvents
если поднапрячся и поискать на русском, то ...

Цитата Сообщение от microsoft
необходимо предотвратить повторное выполнение процедуры из другой части кода до завершения обработки первого вызова
насколько мне известно, пользователь не сможет нажать кнопку повторно до тех пор, пока событие предыдущего нажатия не будет обработано.
короче, смело вписывай доэвентс. возможно, это и будет решением твоей проблемы с зависанием. "возможно", потому что информации ты дал недостаточно
0
13.01.2012, 18:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2012, 18:35

Как запустить фоновый процесс (daemon)
Пытаюсь запустить процесс на Java в фоновом режиме. С помощью Runtime.getRuntime() получаю ссылку...

Как сделать не завершающий фоновый процесс
Имею проблему нужно чтобы служба приложении работала в фоновом режиме и показывала оповещения даже...

Передача DataTable по ссылке в фоновый процесс BackgroundWorker
В классе формы создаётся DataTable, а в обработчике buttonExport_Click создаётся BackgroundWorker и...

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

Фоновый процесс, который дожен регулярно уведомлять текущую активность
Задача такая. Есть некий фоновый процесс, который должен регулярно слать уведомления текущей...

Как создать постоянный фоновый процесс в ASP.NET Core MVC?
Как мне в моём ASP.NET Core MVC приложении создать некоторый процесс, компонент, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru