powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в многопользовательском режиме реализовать отправку письма только 1 раз?
13 сообщений из 13, страница 1 из 1
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39301886
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, добрый день!
Подскажите пожалуйста, как в многопользовательском режиме реализовать отправку письма только 1 раз (от любого пользователя)
Столкнулся с тем, что письмо было отправлено 2 раза, т.е. дважды (одновременно) отработала процедура CreateMsgInOutlook_everyday
На постоянно открытой форме (таймер = 30 секунд) сделал вот такую проц-ру:

Код: sql
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.
Private Sub Form_Timer()

Dim xlog As Boolean
Dim MyTimeBegin
Dim MyTimeEnd
MyTimeBegin = TimeSerial(12, 1, 0)
MyTimeEnd = TimeSerial(12, 2, 0)

Dim MyTimeBegin2
Dim MyTimeEnd2
MyTimeBegin2 = TimeSerial(12, 3, 0)
MyTimeEnd2 = TimeSerial(12, 4, 0)

xlog = DLookup("XXX", "tbl_Timer", "ID = 1")

If xlog = False And Time >= MyTimeBegin And Time < MyTimeEnd Then

    DoCmd.SetWarnings False
    DoCmd.RunSQL "UPDATE tbl_Timer SET tbl_Timer.XXX = True WHERE tbl_Timer.ID=1;"
    DoCmd.SetWarnings True
    

    Call CreateMsgInOutlook_everyday(True)

End If


If xlog = True And Time >= MyTimeBegin2 And Time < MyTimeEnd2 Then
    DoCmd.SetWarnings False
    DoCmd.RunSQL "UPDATE tbl_Timer SET tbl_Timer.XXX = False WHERE tbl_Timer.ID=1;"
    DoCmd.SetWarnings True
End If
End Sub


Буду благодарен за любую помощь!
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39301993
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-письмо было отправлено 2 раза, т.е. дважды (одновременно) отработала процедура CreateMsgInOutlook_everyday
Непонятно, отработала ли процедура дважды в одном экземпляре приложения или в разных.
Если в одном - то с такой ситуацией надо бороться выставлением флага (статического или глобального) вызова процедуры и исключать повторный вызов до завершения первого.
Если в разных - то в таблицу, где фиксируются заявки на отправку и факт отправки, следует ввести поле резервирования записи на отправку за собой, и только если такая попытка удачна, выполнять отправку.
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302014
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
сам файл .accdb лежит в сетевой папке.
Письмо пришло от 2-х разных пользователей.
Т.е. одновременно у 2-х пользователей отработало условие IF и соответственно дважды отработала sub CreateMsgInOutlook_everyday
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302029
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так введи в структуру таблицы заявок на отправку поле отправителя. Соответственно в коде сначала выполняется попытка резервирования письма за собой
Код: sql
1.
2.
3.
update table 
set table.sender = @my_email 
where sender is null

и для тех записей, для которых резервирование оказалось удачным
Код: sql
1.
2.
3.
select *
from table
where table.sender = @my_email

выполняется отправка.
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302036
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо! Но немного не то(
мне просто надо чтобы одновременно не запускалась процедура
Добавил в код вот это (думаю что поможет):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
If Time >= MyTimeBegin And Time < MyTimeEnd Then
    
    Dim PauseTime, Start
    PauseTime = Rnd(1) * 5 ' Задает длительность паузы
    Start = Timer   ' Задает начало паузы.
    Do While Timer < Start + PauseTime
        DoEvents    
    Loop
    
End If
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302052
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНепонятно, отработала ли процедура дважды в одном экземпляре приложения или в разных.А тебе-то понятно? или тоже нет?

-SWAN-Добавил в код вот это (думаю что поможет)Интересно, что же позволило сделать подобное (как по мне - совершенно безосновательное) предположение?
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302057
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, проверить свой вариант смогу только в ПН.
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302152
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaНепонятно, отработала ли процедура дважды в одном экземпляре приложения или в разных.

Все пользователи открывают один файл, лежащий в сетевой папке - это один экземпляр или несколько?
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302165
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-Все пользователи открывают один файл, лежащий в сетевой папке
Вообще лучше так не делать - увеличивается сетевой трафик и повышается опасность повреждения файла.
Лучше на сетевом диске иметь "образец", а пользователи запускают скрипт или какое-либо другое решение, которое проверяет версию файла, обновляет локальную копию пользователя в случае необходимости и запускается уже обновленная локальная копия.
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302178
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-Все пользователи открывают один файл, лежащий в сетевой папке - это один экземпляр или несколько?А я доктор?
У тебя единица отличия - адрес электронной почты, от которого выполняется отправка, верно? Вот исходя из этого и думай, один у тебя экземпляр или несколько...
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302200
-SWAN-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin-SWAN-Все пользователи открывают один файл, лежащий в сетевой папке
Вообще лучше так не делать - увеличивается сетевой трафик и повышается опасность повреждения файла.
Лучше на сетевом диске иметь "образец", а пользователи запускают скрипт или какое-либо другое решение, которое проверяет версию файла, обновляет локальную копию пользователя в случае необходимости и запускается уже обновленная локальная копия.
я правильно понимаю - надо разделить базу на таблицы и все остальное? и положить таблицы в сетевую папку а все остальное - раздать всем пользователям? Вы такой вариант имеете ввиду?
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302275
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разделение БД действительно упростит и ускорит работу - главным образом за счёт того, что файл-кэш станет локальным.
...
Рейтинг: 0 / 0
Как в многопользовательском режиме реализовать отправку письма только 1 раз?
    #39302412
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-SWAN-Вы такой вариант имеете ввиду?
Да, конечно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как в многопользовательском режиме реализовать отправку письма только 1 раз?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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