Проблема многопользовательского доступа! | |
---|---|
Ujcnm Автор |
Подскажите кто знает решения такой проблемы.
Есть проэкт MSSQLServer + Foxpro8. Для доступа к данным на сервере используестя Remoteview, т.е. добавление, изменение, удаление. Представим ситуацию: есть родительская таблица и несколько дочерних. При удалении данных из родительской таблицы срабатывает триггер для удаления из дочерних. Когда один пользователь просматривает запись из доч. таблицы, а другой в это время удалил запись из род. таблицы, то у первого возикает ошибка. Можно конечно создать опрееленную таблицу, в кот. бы хранились номера редактируемых записей. И проверку осуществлять "Свободна ли ячейка?", используя триггер. тогда такие триггеры необходимо прописать для каждой таблицы. Но думаю в лисе есть стандартные возможности. Кстати, будет ли нормально блокирование записей? |
Re: Проблема многопользовательского доступа! | |
---|---|
Петров Андрей Сообщений: 2506 Откуда: Химки (М.О.) Дата регистрации: 17.04.2002 |
Скорее уж при удалении проверять редактирует кто запись или нет.
А вообще насколько оправдано использование каскадного удаления? ------------------ PS Недочитал тему до конца... |
Re: Проблема многопользовательского доступа! | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Hi, Гость!
Некорректная постановка ведёт к бессмысленному ответу. ЧТО по твоему должно происходить - распиши пошагово. Я например считаю что правильная последовательность такова: 1) Пользователь 1 запросил шапку и строки документа1 в 2 курсора, смотрит их. 2) Пользователь 2 запросил шапку и строки документа1 в 2 курсора, смотрит их. 3) Пользователь 1 удалил шапку (и триггер удалил строки) - в базе реально записей уже нет 4) Пока пользователь 2 не сделает перезапрос ("Обновление данных") - он видит то что было в курсорах - т.е. уже реально удалённые записи. 5) Если пользователь 2 захочет откорректировать данные, то он не сможет их сохранить = и это правильно - налицо конфликт обновления. Как вариант его разрешения - заново ввести шапку и строки документа из локального курсора пользователя2. Это правда потребует некоторого объёма кодирования, но вполне решаемо. Цитата:Не надо опять начинать тему блокировок (в ПОИСКЕ найдёшь просто массу материалов по теме клиент-сервер) - ну не предусматривает клиент-серверная архитектура такого стиля работы! Помрёт ваш сервер если будет блокироваться каждая выбранная для просмотра запись! P.S. Как вариант можно сделать двухступенчатое удаление (как это делает сам фокс) - т.е. реально DELETE не удаляет запись, а лишь "помечает" их как удалённые - тогда процесс восстановления заметно проще (он аналогичен по сути ПЕРЕЗАПИСИ чужих изменений - тут - флага удаления). ------------------ WBR, Igor |
© 2000-2024 Fox Club  |