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

Добавьте таблицу аля блокировки объектов. Как кто то пытается открыть форму, сначала проверим не взял ли кто блокировку ранее, если объект свободен вставляем свою запись. При закрытии формы запись-блокировку удаляем. Для того что бы не повесить работу в случае не штатного закрытия, в форме по таймеру обновляем запись. При этом при проверке на блокировку нужно проверить не только наличие записи, но и не "сгорела" ли она
...
Рейтинг: 0 / 0
Как можно определить, открыта ли форма у какого либо пользователя?
    #39985143
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Swa111, что Вы имеете в виду "сгорела"?
...
Рейтинг: 0 / 0
Как можно определить, открыта ли форма у какого либо пользователя?
    #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
Как можно определить, открыта ли форма у какого либо пользователя?
    #39985153
wladimirrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Swa111, интересно, но мало что понял(. А на VBA?
...
Рейтинг: 0 / 0
Как можно определить, открыта ли форма у какого либо пользователя?
    #39985156
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wladimirrr
Swa111, что Вы имеете в виду "сгорела"?


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

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

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

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

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


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

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


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

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

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

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

Ищу, читаю. Ошибки не постоянные. То есть, то все нормально. Может связано с сетью и сервером.
...
Рейтинг: 0 / 0
Как можно определить, открыта ли форма у какого либо пользователя?
    #39985675
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wladimirrr,
Самая распространенная и очень трудно диагностируемая неисправность в электронике-отсутствие контакта там где он нужен и его присутствие там где он не нужен
...
Рейтинг: 0 / 0
Как можно определить, открыта ли форма у какого либо пользователя?
    #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
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как можно определить, открыта ли форма у какого либо пользователя?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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