Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как SELECT'ом выбрать состояние ISRLOCKED() / 8 сообщений из 8, страница 1 из 1
23.03.2004, 12:19
    #32452821
badhead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
1. SELECT * FROM my_table WHERE tmp_var=my_table.my_field AND ISRLOCKED()
INTO ARRAY arr_tmp

2.SELECT count(ISRLOCKED()) FROM my_table WHERE tmp_var=my_table.my_field
INTO ARRAY arr_tmp

В обоих случаях создаётся массив, даже если запись не заблокирована,
а можно ли SELECT'ом выбрать состояние ISRLOCKED()?
...
Рейтинг: 0 / 0
23.03.2004, 12:29
    #32452839
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
Выбрать все заблокированные не тобой записи
SELE * FROM a1 WHERE !RLOCK()

Выбрать все заблокированные тобой записи
SELE * FROM a1 WHERE RLOCK()
...
Рейтинг: 0 / 0
23.03.2004, 12:30
    #32452846
IgorProgrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
Да после такого селекта надо не забывать все отпстить
UNLOCK ALL IN a1
...
Рейтинг: 0 / 0
23.03.2004, 13:25
    #32452986
badhead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
То есть применительно к моему случаю
SELECT * FROM my_table WHERE tmp_var=my_table.my_field AND !RLOCK()
INTO ARRAY arr_tmp - узнать, заблокирована ли (не мной) запись?
Правильно?
Дальше проверяю создан ли массиив (или анализ. _TALLY)
...
Рейтинг: 0 / 0
23.03.2004, 15:04
    #32453213
badhead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
Ответьте, люди, правильно ли?
...
Рейтинг: 0 / 0
23.03.2004, 18:57
    #32453794
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
Смотря, что именно ты хочешь получить. Сформулируй словами.

Дело в том, что IsRLocked() возвращает .T. для записей, которые ты сам и заблокировал. Т.е. она ничего не может сказать о блокироваках сделанных другими пользователями.

Функция RLOCK() или LOCK() блокирует записи. Т.е. если запись не удалось заблокировать, значит она заблокирована другим пользователем. НО! весь вопрос в какой именно рабочей области? Т.е. в какой таблице?

Дело в том, что команда Select-SQL может создавать временные таблицы на момент своего выполнения. И вполне вероятно, что она будет блокировать записи не в твоей исходной таблице, а в своей временной. Т.е. результат будет далек от ожидаемого.

Еще раз. Сформулируй словами, что именно ты хочешь получить. Именно словами. Без функций и команд.
...
Рейтинг: 0 / 0
23.03.2004, 19:48
    #32453866
badhead
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
При вводе данных на форме проверяю данные на наличие двойняшек.
Если есть двойняшка - перейти к ней ДА/НЕТ, если к ней проверяю состояние записи. Если заблокирована - предупреждаю пользователя об этом и название кпопки <Запомнить данные> меняется на <Обновить состояние>. Мысль была щупать эту запись на предмет блокировки, выбирая её по SELECT в массив.
Массив создан/не создан - запись заблокирована/разблокирована.
ЛЮБАЯ конструктивная критика приветствуется!
...
Рейтинг: 0 / 0
23.03.2004, 20:04
    #32453883
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как SELECT'ом выбрать состояние ISRLOCKED()
Проверка факта блокировки ДО попытки заблокировать данные не имеет смысла.

Предположим, тебе удастся получить список записей заблокированных (или нет) другим пользователем. Но ведь ты не собираешься тут же пытаться внести изменения в эти записи. Будет ведь какой-то период времени на ознакомление и внос изменений пользователем. Где гарантия, что в этот период статус блокировки записи не изменится? Вдруг именно в момент просмотра данных одним пользователем другой как раз и заблокировал (или снял блокировку) эту запись.

Как следствие - проверять статус блокировки надо в момент попытки самому заблокировать запись.

В идеале, лучше организовать программу таким образом, чтобы время любой блокировки было как можно меньше. Идеально для этого подходит оптимистическая буферизация. Правда, несколько усложняется процесс сохранения внесенных изменений.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как SELECT'ом выбрать состояние ISRLOCKED() / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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