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

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

Geen
...
Рейтинг: 0 / 0
19.08.2003, 10:06
    #32239839
TatianaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4 юзера (как организовать работу со списком)?:)
обязательно надо проверять
я бы сделала так
повесила проверку на beforeUpdate и если забронировал кто-то ,то давать месадж кто из операторов забронировал и время (чтобы у пользователей лишних вопросов не было)
...
Рейтинг: 0 / 0
19.08.2003, 11:45
    #32240007
am (a_mitin)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4 юзера (как организовать работу со списком)?:)
бронирование должно выполняться отдельной процедурой, никак не завязанной на значения полей формы (я имею ввиду статус бронирования с формы нельзя брать).\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
19.08.2003, 12:25
    #32240064
Geen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4 юзера (как организовать работу со списком)?:)
Access2000+MSSQL2000
Как все сложно:(((
Может у кого есть примеры?:)

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

Может в триггере на Обновление проверять столбец статус и в случае, если он уже содержит статус "Забронировано" просто давать свой 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
19.08.2003, 13:13
    #32240177
Geen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
4 юзера (как организовать работу со списком)?:)
Проблема еще и в том, что я еще не написал ни одной процедуры в жизни:(
А уж тем более никогда не вызывал их (например по KeyCode =13):(
Тут с самого начала помогать мне надобно:)

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

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

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


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

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


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