Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как можно определить, открыта ли форма у какого либо пользователя? / 18 сообщений из 18, страница 1 из 1
29.07.2020, 19:15
    #39985127
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Приветствую всех! Есть разделенная многопользовательская бд. Можно ли определить, что конкретная форма открыта кем то из пользователей на своем компе? Дело в том, что есть одна сложная форма и если она открыта у одного юзера и в это время ее открывает второй, то у второго аксесс виснет почему то. Если можно как-то определить, что форма уже кем-то открыта, то хочу выдавать об этом сообщение и отменять второе открытие.
...
Рейтинг: 0 / 0
29.07.2020, 19:49
    #39985138
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
.
...
Рейтинг: 0 / 0
29.07.2020, 20:44
    #39985142
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr,

Добавьте таблицу аля блокировки объектов. Как кто то пытается открыть форму, сначала проверим не взял ли кто блокировку ранее, если объект свободен вставляем свою запись. При закрытии формы запись-блокировку удаляем. Для того что бы не повесить работу в случае не штатного закрытия, в форме по таймеру обновляем запись. При этом при проверке на блокировку нужно проверить не только наличие записи, но и не "сгорела" ли она
...
Рейтинг: 0 / 0
29.07.2020, 20:50
    #39985143
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Swa111, что Вы имеете в виду "сгорела"?
...
Рейтинг: 0 / 0
29.07.2020, 21:20
    #39985148
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr,

на псевдо коде примерно так
Код: plsql
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.
create table tlocks (
  id counter,
  idObjectType integer,
  idObject integer,
  dSetLock datetime,
  dRefreshLock datetime,
  idUser integer
)

const cOT_Form = 1 --Код типа объекта (форма)
const cO_MyForm = 1 --Код формы
--Предполагаем что блокировки нужно обновлять каждые 30 сек

select 
  idUser, dRefreshLock
into 
  idvUser, dvLastRefresh
from 
  tlocks
where 
  idObjectType = cOT_Form
  and idObject = cO_MyForm

if idvUser is not null then 
  if (now() - dRefreshLock) * 86400 > 45 then --Здесь проверяем не скгорела ли блокировка
    idvUser = null
  else 
    err.raise ... 'Форма занята, попробуйте позже'
  end if  
end if

insert into tlocks (idObjectType, idObject, dSetLock, dRefreshLock, idUser) values (cOT_Form, cO_MyForm, now(), now(), GetIdUser());



Либо другой вариант (правда не уверен что сработает в Access) создать таблицу с всеми объектами которые можно блокировать. в момент открытия формы открывать транзакцию и пытаться обновить запись. По окончанию работ с объектом закрывать транзакцию.
...
Рейтинг: 0 / 0
29.07.2020, 21:31
    #39985153
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Swa111, интересно, но мало что понял(. А на VBA?
...
Рейтинг: 0 / 0
29.07.2020, 21:39
    #39985156
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr
Swa111, что Вы имеете в виду "сгорела"?


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

правильнее разобраться почему сетевое приложение не работает как сетевое...

Ну или такой костыль - отдельную пустую таблицу делаем в отдельном сетевом mdb и пристегиваем её к скрытому списку формы, при старте формы рядом с mdb появится такой же ldb...

при старте формы проверяем наличие ldb:
- если его нет, то открываем форму и работаем...
- если он есть, пробуем его удалить (Kill), если удалился, запускаем форму и работаем
- если на Kill получаем ошибку, значит кто-то работает, выдаем сообщение и не открываем форму...
имхо так меньше гимора с таймерами, датами и т.д.
...
Рейтинг: 0 / 0
29.07.2020, 21:56
    #39985159
Swa111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
vmag,

еще вариант на сетевой шаре создавать текстовый файл и держать его открытым пока работаешь с формой
...
Рейтинг: 0 / 0
29.07.2020, 21:59
    #39985160
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
vmag


при старте формы проверяем наличие ldb:
- если его нет, то открываем форму и работаем...
- если он есть, пробуем его удалить (Kill), если удалился, запускаем форму и работаем
- если на Kill получаем ошибку, значит кто-то работает, выдаем сообщение и не открываем форму...
имхо так меньше гимора с таймерами, датами и т.д.

Спасибо за идею! Если не трудно, примерный код на VBA набросайте. Я не очень силен в этом.
...
Рейтинг: 0 / 0
29.07.2020, 22:08
    #39985163
vmag
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr
...Если не трудно, примерный код на VBA набросайте...


...ну да, вот щас всё брошу и буду вешать скворечник...
...
Рейтинг: 0 / 0
30.07.2020, 01:46
    #39985176
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
...
Рейтинг: 0 / 0
30.07.2020, 02:00
    #39985177
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
ПыСы:
wladimirrr
если она открыта у одного юзера и в это время ее открывает второй, то у второго аксесс виснет почему то
А вообще такого быть не должно и вместо того чтоб искать способ "обдурить" ACCESS ищите и устраняйте причину происходящего.После этого штатной блокировкой все решается
...
Рейтинг: 0 / 0
30.07.2020, 09:29
    #39985212
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr
Есть разделенная многопользовательская бд.

есть одна сложная форма и если она открыта у одного юзера и в это время ее открывает второй, то у второго аксесс виснет
Есть подозрение, что ваша многопользовательская бд не разделена на таблицы и интерфейс с формами и прочим у каждого юзера, т.е. всё в одном флаконе. Если так, то здесь и собака порылась.
...
Рейтинг: 0 / 0
30.07.2020, 10:30
    #39985228
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Кривцов Анатолий
Есть подозрение, что ваша многопользовательская бд не разделена на таблицы и интерфейс с формами и прочим у каждого юзера, т.е. всё в одном флаконе. Если так, то здесь и собака порылась.
Вполне верятно что это именно так
...
Рейтинг: 0 / 0
31.07.2020, 17:46
    #39985658
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Кривцов Анатолий
wladimirrr
Есть разделенная многопользовательская бд.

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

База разделена, таблицы находятся на сервере, интерфейсы у юзеров на ПК.
...
Рейтинг: 0 / 0
31.07.2020, 17:48
    #39985659
wladimirrr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
sdku
ПыСы:
wladimirrr
если она открыта у одного юзера и в это время ее открывает второй, то у второго аксесс виснет почему то
А вообще такого быть не должно и вместо того чтоб искать способ "обдурить" ACCESS ищите и устраняйте причину происходящего.После этого штатной блокировкой все решается

Ищу, читаю. Ошибки не постоянные. То есть, то все нормально. Может связано с сетью и сервером.
...
Рейтинг: 0 / 0
31.07.2020, 19:08
    #39985675
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
wladimirrr,
Самая распространенная и очень трудно диагностируемая неисправность в электронике-отсутствие контакта там где он нужен и его присутствие там где он не нужен
...
Рейтинг: 0 / 0
07.08.2020, 15:32
    #39987527
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как можно определить, открыта ли форма у какого либо пользователя?
Код: sql
1.
insert into tlocks (idObjectType, idObject, dSetLock, dRefreshLock, idUser) values (cOT_Form, cO_MyForm, now(), now(), GetIdUser());



Жесть какаято :)
1. В таблицу вносится N статичных записей (один раз ручками)
2. Алгоритм (цикл N) на каждую из N записей пытается наложить монопольную блокировку;
3. Если блокировка наложена, то в эту запись update-set пишет идентификатор владельца блокировки.
4. Если записи кончились, выводим сообщение "с формой уже работают N пользователей, ждите как освободится хоть один слот" (и можно циклом по N записям заодно собрать и вывести справочно заблокировавших из п.3)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как можно определить, открыта ли форма у какого либо пользователя? / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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