Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно организовать изменение данных / 9 сообщений из 9, страница 1 из 1
05.04.2007, 00:53
    #34439020
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Есть таблица. Пользователь становиться на запись и нажимает кнопку "Редактировать".
Нужно сделать что бы никто другой после этого не смог открыть эту же запись на редактирование, до тех пор пока первый пользователь не закончит работу с записью.

После того как пользователь нажал на кнопку "Редактироване" данные вычитываются в память, и там изменяются пользователем.

Пользователь может завершить редактирвание, а может отказаться от него.

Какими SQL командами я могу выполнить перечисленные действия?

Ps. База данных SQL Anywhere
...
Рейтинг: 0 / 0
05.04.2007, 04:52
    #34439064
Infernal V. Raven
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Это называется блокировкой. Рекомендую поискать посты на форуме, потому что способы блокировок бывают разные и каждый обладает как преимуществами так и недостатками. Присмотрите наиболее подходящий вариант.
---
aka VIR. No pity. No mercy. No remorse. No Regret
...
Рейтинг: 0 / 0
05.04.2007, 10:16
    #34439423
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Поискал блокировку, везде красной нитью проходит мысль, что нужно иметь в таблице некое поле, в которое записывается блокирована запись или нет.

Скажите мне только одно. A что средствами СУБД это нельзя сделать? Например, я в документации вычитал, что есть такая команда:
Код: plaintext
Select * from Table where id= 1  for update

Я так понимаю, что если один пользователь ее выполнил, то второй в это время менять запись не может? Однако, после тестов выяснилось, что это не так. А тогда как?
...
Рейтинг: 0 / 0
05.04.2007, 11:00
    #34439620
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Ramzay_Скажите мне только одно. A что средствами СУБД это нельзя сделать? Можно, н о это в ряде случаев неудобно и очень платформозависимо. Проще сабж разрулить программно. Сделать список заблокированных записей. Кто первый начнет редактирование, тот создает в списке запись, кто опоздал (запись уже есть) - просто читает, не редактируя. Можно наворотить сложный механизм - логгирование, оповещение и т.д. под кокретные нужды.
...
Рейтинг: 0 / 0
05.04.2007, 12:00
    #34439907
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Прям как в Оракле :) (Select * from Table where id=1 for update)
...
Рейтинг: 0 / 0
05.04.2007, 12:03
    #34439929
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
To LSV - и еще надо написать нормальный менеджер этого дела,потому как после того,как пользователи в процессе работы начнут отваливаться,то записи в журнале будут оставаться записи,кот надо грамотно удалять.
Ramzay: если поискать по ключевому слову Блокировка,то можно найти много описанных механизмов с менеджерами.

p.s.мы в ряде случаев потребляем select for update (но он снимается по commit,либо dbms_lock - он снимается когда нам надо и убивается сам при отключении пользователя от бд,что очень удобно-но это Oracle но я думаю у sybase есть аналоги)
...
Рейтинг: 0 / 0
05.04.2007, 16:44
    #34441217
Ramzay_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
ShtockПрям как в Оракле :) (Select * from Table where id=1 for update)

Да, за исключением маленького пустяка. Ежели я пишу:
Код: plaintext
Select * from Table where id= 1  for update
то после этого другой пользователь спокойно может менять запись. И зачем мне такое нужно?

Если я пытаюсь организовать транзакцию:
Код: plaintext
1.
Begin Tran Tr1;
select * from Table where id= 1  for update
то вообще выдает синтаксическую ошибку. Это то что имел ввиду LSV:
LSV в ряде случаев неудобно и очень платформозависимо?
...
Рейтинг: 0 / 0
05.04.2007, 19:14
    #34441726
ModelR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
Ramzay_Есть таблица. Пользователь становиться на запись и нажимает кнопку "Редактировать". и идет пить пиво. Чтобы не висела транзакция БД авторвезде красной нитью проходит мысль, что нужно иметь в таблице некое поле, в которое записывается блокирована запись или нет.
...
Рейтинг: 0 / 0
06.04.2007, 10:52
    #34442596
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно организовать изменение данных
"Да, за исключением маленького пустяка. Ежели я пишу:" - собственно в оракле после этого у другого пользователя вывалится ошибка - мол ресурс занят (если указано for update nowait).У нас вопрос разных платформ не стоял,да и у многих он надуман,поэтому такие вещи мы делаем средствами субд.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как правильно организовать изменение данных / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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