powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как SELECT'ом выбрать состояние ISRLOCKED()
8 сообщений из 8, страница 1 из 1
Как SELECT'ом выбрать состояние ISRLOCKED()
    #32452821
badhead
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как SELECT'ом выбрать состояние ISRLOCKED()
    #32452839
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выбрать все заблокированные не тобой записи
SELE * FROM a1 WHERE !RLOCK()

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

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

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

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

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

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

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

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


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