Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Блокировка изменяемой записи в многопользовательском режиме / 8 сообщений из 8, страница 1 из 1
13.07.2016, 14:14
    #39273107
Rikozenit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Доброго дня всем!
Подскажите пожалуйста, почему при включении в параметрах БД "Блокировки на уровне записей" по факту блокировка не работает.
База разделена, параметры БД выставлены и в файле с таблицами и в интерфейсных файлах.
С двух интерфейсных файлов пробую одновременно редактировать одну и ту же строку в базе - и Аксесс мне это позволяет. Ругается только при потере фокуса этой записи о возникшем конфликте в результате одновременного внесения изменений в одну и туже запись.
В чём тогда смысл этой опции?
...
Рейтинг: 0 / 0
13.07.2016, 19:59
    #39273400
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Rikozenit,

Для начала перезагрузить файл данных.
Для многих настроек нужно перезагружаться...
А вообще, по крайней мере я, стараюсь делать собственную блокировку(доп поле и при открытии на редактирование записываю в него id оператора. Потом при сохранении чищу). Условия работы не идеальные, но по мне лучше так, чем бороться с сообщением - "Пока вы правили запись, она была изменена другим оператором...." вроде так звучит
"Изменяемая запись" в аксе та еще штучка. На сколько знаю можно нарваться на блокировку и соседних строк, не смотря на то, что в настройках - только изменяемая запись. Можно по форуму поискать...
...
Рейтинг: 0 / 0
14.07.2016, 08:47
    #39273523
Rikozenit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Игортан,

я вот и думал, что благодаря блокировке, сообщение об одновременном изменении записи не будет, т.к. во время редактирования для остальных пользователей эта запись будет просто недоступна...

Можете рассказать, как записывать id оператора? (я ещё на начальном этапе изучения VBA).
Спасибо!
...
Рейтинг: 0 / 0
14.07.2016, 11:51
    #39273652
mds_world
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
...
Рейтинг: 0 / 0
14.07.2016, 15:16
    #39273862
Rikozenit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
mds_world,

благодарю! Изучаю...
Но вообще, я тут понял, что меня больше даже устроит ОТСУТСТВИЕ БЛОКИРОВКИ. Ибо каждому юзеру через формы у меня предоставлен доступ только к определённым полям (общих - нет).
Я значится блокировку-то отключил! Но при одновременном редактировании разными юзерами через свои интерфейсы одной и той же записи, но разных полей, сообщение о конфликте всё равно появляется(((
Как избавиться от предупреждения? Пускай аксесс позволяет разным юзерам одновременно вносить инфу в разные поля одной и той же записи.
...
Рейтинг: 0 / 0
14.07.2016, 18:52
    #39274096
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Rikozenit,
Я вот сейчас точно не вспомню, почему не прижилось у меня. На самих формах есть свойство - Блокировка.
Так вот там тоже есть разный тип блокировки.
Когда я ее пробовал, давно правда, то при свойстве - Изменяемой записи, одну и туже запись можно открыть - НО НЕ РЕДАКТИРОВАТЬ. при попытке редактирования вторым оператором просто блокируется возможность ввода данных +звук сигнал. Для этого случая хорошо иметь открытой Область выделения.
Вот в ней сразу видно, что запрещено изменение.
Вот только не помню, есть ли проблемы с соседней строкой...

Я всегда в настройках акса ставлю - блокировка отсутствует.
Блокировки делаю при открытии формы на изменение.
В таблице поле делаю Busy. В него вставляю id оператора (оператор из своей таблицы не системный)
Типа вход в базу по паролю. После правильного введения логина пароля форму входа не закрываю а скрываю.
Всегда при необходимости выдергиваю от туда id вошедшего оператора. Запись в таблицу занятости и снятие занятости(в данном примере):
Код: vbnet
1.
CurrentProject.Connection.Execute ("UPDATE Processing SET Busy = 0 WHERE (((IdUser)=" & Forms!Password_entry!Id & ") AND ((Busy)=" & Forms!Password_entry!Id & "))")



Как то так
...
Рейтинг: 0 / 0
14.07.2016, 18:58
    #39274098
Игортан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Игортан,

Тут правда есть один существенный минус....
При аварийном закрытии базы, занятость не снимается.
При старте делаю прогон по таблицам и в "своей занятости" обнуляю ее.
Пример старый, другого под рукой нет(с работой только своих занятостей).
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
Public Sub RemoveClick()
Dim msg As String, Style As Integer, Title As String, Response As Integer
'Dim dbt As Database
Dim MyTbl As TableDef
Dim j As Long
Dim er As Long

   On Error GoTo Remove_Click_Error

er = 1
msg = "Пожалуйста, все пользователи должны выйти из базы данных, прежде чем продолжить!"
Style = vbYesNo + vbQuestion + vbDefaultButton2
Title = "Внимание!"

er = 2
Response = MsgBox(msg, Style, Title)
If Response = vbYes Then
er = 3
    DoCmd.Hourglass True
    For Each MyTbl In CurrentDb.TableDefs
        If (MyTbl.Attributes And dbSystemObject) = False Then
er = 4
            For j = 0 To CurrentDb.TableDefs(MyTbl.Name).Fields.count - 1
er = 5
                If CurrentDb.TableDefs(MyTbl.Name).Fields(j).Name = "Busy" Then
er = 6
'If MyTbl.Name = "TypeProcessing" Then Stop
                    CurrentProject.Connection.Execute ("UPDATE " & MyTbl.Name & " SET Busy = 0")
                    GoTo 1
                End If
            Next j
        End If
1:
    Next MyTbl
    MsgBox "Очистка прошла успешно.", , "Выполнение"
    DoCmd.Hourglass False
End If


   On Error GoTo 0
   Exit Sub

Remove_Click_Error:
    
    If er <> 0 Then
        MsgBox "Ошибка процесса (" & er & ")", , "Ошибка " & Err.Number & "!"
    Else
       MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Remove_Click of Form_Settings"
    End If
    
End Sub
...
Рейтинг: 0 / 0
29.08.2016, 15:33
    #39299664
Rikozenit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Блокировка изменяемой записи в многопользовательском режиме
Игортан,

спасибо, буду разбираться!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Блокировка изменяемой записи в многопользовательском режиме / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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