powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отсоединенный рекордсет - но записи на сервере блокированы.
10 сообщений из 10, страница 1 из 1
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024152
vbкор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно сабж.
Создаю в коде рекордсет, заполняю грид, обновляю записи в гриде, подсоединяю рекордсет, обновляю рекордсет ...
Все здесь понятно.
Вопрос к знатокам: типичная ситуация - как запретить другим пользователям базы редактировать записи кот. открыты другим с помощью отсоединенного набора.
буду весьма благодарен если приведут фрагменты кода, намекнут как реализовать, или ткнут в какойнибуть топик :*)
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024206
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vbкорСобственно сабж.
Создаю в коде рекордсет, заполняю грид, обновляю записи в гриде, подсоединяю рекордсет, обновляю рекордсет ...
Все здесь понятно.
Вопрос к знатокам: типичная ситуация - как запретить другим пользователям базы редактировать записи кот. открыты другим с помощью отсоединенного набора.
буду весьма благодарен если приведут фрагменты кода, намекнут как реализовать, или ткнут в какойнибуть топик :*)

Одно из решений - введение поля-флага, которое меняет свое значение, если приложение начинает редактировать записи (допустим, вводит туда имя компьютера или идентификатор процесса). "Встроенных решений", типа adOpenPessimistic, скорее всего, нет - отключенные НЗ для того и используются, чтобы не занимать БД и не кушать трафик.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024472
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
м-да, с флагом мысль интересная, но тогда нужен механизм таймаута, так как если прога зависнет или юзер уйдет на обед, то доступ к таблице закроется на неопр. время.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024515
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Полустандартное" решение:
1. Рекордсет грида никогда не возвращать серверу (не делать UpdateBatch)
2. Ввести еще одни рекордсет, который открывать на одной записи, на которой стоит грид и в момент начала редактирования.
Этим рекордсетом и блокировать запись.
Не удалось открыть - значит кто то уже редактирует эту запись. А пользователю - сообщение.
Если после изменения одной ячейки в гриде, забрасывать в этот рекордсет значения всех полей, то можно и таймер применить чтобы принудительно прерывать редактирование во время чаепитий.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024870
Фотография Артист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff
2. Ввести еще одни рекордсет,
зачем тогда делать отсоединенный, если будет другой постоянный? :)
может быть какую нибуть блокирующию записи процедуру на сервере запускать, а после редактирования останавливать?
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33024988
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeм-да, с флагом мысль интересная, но тогда нужен механизм таймаута, так как если прога зависнет или юзер уйдет на обед, то доступ к таблице закроется на неопр. время.


А почему "к таблице"?
Можно хранить флаги, например, для документов... И в сообщении показывать логин и хост товарисча, ушедшего на обед :-)...

Тут есть еще проблема, отваливания коннектов, "зависшие" блокировки надо чистить... Короче, гемора - немеренно.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33025235
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артистзачем тогда делать отсоединенный, если будет другой постоянный? :)
может быть какую нибуть блокирующию записи процедуру на сервере запускать, а после редактирования останавливать?
Worobjoff...открывать на одной записи...Без применения дополнительных полей в таблице и пр. трюков.
И, это - скорее стандартное чем нестандартное решение.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33025938
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вообще такие геморои с блокировкой? Ну достал кто-то еще раз эти записи и сохранил. Делаешь Resync и перезаписываешь еще раз. Или вообще отменяешь все изменения на основании UnderlyingValue. Или предлагаешь на выбор три набора, который из них сохранять.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33026091
Фотография nibbles
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyА зачем вообще такие геморои с блокировкой? Ну достал кто-то еще раз эти записи и сохранил. Делаешь Resync и перезаписываешь еще раз. Или вообще отменяешь все изменения на основании UnderlyingValue. Или предлагаешь на выбор три набора, который из них сохранять.

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

А почему способ с полем-флагом не проходит? Гемора не так уж и много.
...
Рейтинг: 0 / 0
Отсоединенный рекордсет - но записи на сервере блокированы.
    #33026907
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет пользователей согласен, а насчет остального, хозяин - барин.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub UpdateRS(rs As ADODB.Recordset)
    On Error GoTo ErrorHandler
    Set rs.ActiveConnection = cn
    rs.UpdateBatch
    Set rs.ActiveConnection = Nothing
    Exit Sub
ErrorHandler:
    If Err.Number = - 2147217864  Then
        rs.Resync adAffectAllChapters, adResyncUnderlyingValues 'данные на сервере были модифицироаны
        Resume
    ElseIf Err.Number = - 2147217900  Then  'игнорировать повтор уникального индекса 
        Resume Next
    End If
End Sub

И никакого гемора с блокировками.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отсоединенный рекордсет - но записи на сервере блокированы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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