powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 4 юзера (как организовать работу со списком)?:)
9 сообщений из 9, страница 1 из 1
4 юзера (как организовать работу со списком)?:)
    #32239813
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот и приплыл:(
Сидят 4 юзера и пользуют один и тот же список (форма у всех одинаковая, да и задача, впрочем тоже).
Очень не хотелось бы, чтобы разные юзеры вносили одни и те же данные.
В моем случае речь идет о бронировании гостинничных номеров.

Т.е. №1026 - свободен (и все 4 юзера видят его в списке)
Первый нажал "Забронировать"...
Второй нажал "Забронировать"...
...
Фигня получается:(
Подскажите как организовать процесс?:)
Может написать проверку из серии "SELECT...FROM...WHERE", но как ее вставить в запрос на добавление (апдейт)?
Или есть еще идеи?:)

Geen
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32239839
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обязательно надо проверять
я бы сделала так
повесила проверку на beforeUpdate и если забронировал кто-то ,то давать месадж кто из операторов забронировал и время (чтобы у пользователей лишних вопросов не было)
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240007
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бронирование должно выполняться отдельной процедурой, никак не завязанной на значения полей формы (я имею ввиду статус бронирования с формы нельзя брать).\r
В этой процедуре в одной транзакции проверяется текущий статус ( SELECT с UPDLock, чтобы дургой процесс не мог сделать свой SELECT между твоим SELECT и UPDATE), если он "свободен", то делает UPDATE (ну или INSERT, как там у тебя устроено не знаю), заканчивается транзакция.\r
Но я бы всё таки организовал систему явной очереди (SELECT с UPDLock это тоже очередь, но как бы неявная). То есть функция бронирования начинается с того, что хочет захватить ресурс "бронирования". Если ей это не удается (значит другой процесс сейчас производит "бронирование") - она ставится в очередь и ждет, через некоторое время пробует снова. Если ей это удается, то ресурс захвачен и все остальные будут ждать, пока функция его не отпустит. Теперь внутри функции можно делать разнообразные проверки, бронирования и т.д. В конце функция "отпускает" ресурс. \r
Как организовать очередь в случ. SQL Server - прислушайтесь к концепции Глеба Уфимцева (/topic/3293 ) (если SQL 2000 то можно юзать sp_getapplock). \r
В случ. Access очередь можно оранизовать с пом. монопольного (dbDenyWrite) открытия какойнть служ. таблицы (просто сделать табл. и добавлять туда запись при установлении блокировки и потом удалять при снятии нельзя - надо отслеживать критические ситуации типа неожиданного выключения компьютера)
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240064
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access2000+MSSQL2000
Как все сложно:(((
Может у кого есть примеры?:)

Geen
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240111
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не умоляя достоинств предыдущих ораторов: просто другая идея (уж извиняйте, если что не так :)

Может в триггере на Обновление проверять столбец статус и в случае, если он уже содержит статус "Забронировано" просто давать свой raiseerror, котроый отследить в программе и выдать соответсвующее сообЧение + обновить поле статус?

Как маленький со всем не отлаженный пример:
Код: plaintext
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.
declare @ValueStatus bit  -- Значение Статуса 
 
declare @c int  -- кол-во обновляемых записей
 
IF UPDATE (Status)
begin
 
	set @c=(select Count(*) from deleted)
	if @c= 1  -- пример для единичного обновления 
 
	begin
		set @ValueStatus=(Select Status From Deleted)
		if @ValueStatus= 1   -- Статус равен "Забронирован"
 
			begin
				rollback tran
				raiserror ('Данный номер уже забронирован', 50666 , 1 )  -- отлавливаем ошибку 50666 в пограмме
 
			end
	end
	
	if @c> 1   -- множественное обновление
 
		begin
		 -- использовать курсор??? или еще что-нить
 
		end

end 


Ну и правльно выставить режим блокировки не забыть
Да и тип триггера выбрать правильно (возможно будет удобен INSTED OF)
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240177
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема еще и в том, что я еще не написал ни одной процедуры в жизни:(
А уж тем более никогда не вызывал их (например по KeyCode =13):(
Тут с самого начала помогать мне надобно:)

Geen
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240579
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то тихо стало:(

Geen
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240648
зуза
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Geen

Проблема еще и в том, что я еще не написал ни одной процедуры в жизни:(
А уж тем более никогда не вызывал их (например по KeyCode =13):(
Тут с самого начала помогать мне надобно:)


Книга тебе в помощь.
В стольном городе никаких проблем с этим быть не должно.
...
Рейтинг: 0 / 0
4 юзера (как организовать работу со списком)?:)
    #32240649
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сижу, читаю:)

Geen
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / 4 юзера (как организовать работу со списком)?:)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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