18.01.2013, 16:16 | #1 |
Участник
|
Пытаюсь разобраться с механизмом блокировок таблиц в нативной NAV 4. Не получается нормально блокировать таблицу.
Открываю первого Клиента (Пользователь А) Rec.LOCKTABLE; IF CONFIRM('') THEN; //Останов, чтобы не снялась блокировка Открываю второго Клиента (Пользователь Б)и пробую вставить в эту таблицу запись Rec.INIT; ... Rec.INSERT Запись вставляется без проблем, хотя таблица должна быть заблокирована Пользователем А. Что не так? Удивительно, но если добавить FINDLAST Rec.LOCKTABLE; Rec.FINDLAST; IF CONFIRM('') THEN; то блокировка работает, и при попытке вставить запись Пользователем Б,будет выведено сообщение, что таблица заблокирована Пользователем А. Что делать? |
|
18.01.2013, 16:56 | #2 |
Участник
|
Может быть, это фича такая: пока с таблицей ничего не делают, она не блокируется. Если так, то что мешает ставить FIND[LAST]?
|
|
18.01.2013, 17:33 | #3 |
Участник
|
Хелп говорит:
Because all write operations automatically lock the table in use, LOCKTABLE would appear unnecessary. However, you could have a transaction in which an application wants to inspect data and then only possibly change it, with a guarantee that the data being changed has not been modified by other applications since the read operation. The solution is to explicitly lock the table before the read operation. This ensures that no other application makes changes between the read operation and the possible write operation. |
|
18.01.2013, 17:45 | #4 |
Участник
|
Воспринимай LOCKTABLE не как команду, отправляемую на сервер, а как свойство "При обращении к таблице, заблокировать её".
|
|
21.01.2013, 13:06 | #5 |
Участник
|
[extract]Воспринимай LOCKTABLE не как команду, отправляемую на сервер, а как свойство "При обращении к таблице, заблокировать её".[/extract]
Тогда и в первом варианте Пользователь Б при попытке вставить запись, должен был получить сообщение, что таблица заблокирована Цитата:
Может быть, это фича такая: пока с таблицей ничего не делают, она не блокируется. Если так, то что мешает ставить FIND[LAST]?
|
|
21.01.2013, 13:08 | #6 |
Участник
|
Пишу одно, делаю другое.
LOCKTABLE не блокирует таблицу, а только к конкретную запись таблицы, после обращения к ней. |
|
21.01.2013, 13:40 | #7 |
Участник
|
|
|