Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отсоединенный рекордсет - но записи на сервере блокированы. / 10 сообщений из 10, страница 1 из 1
19.04.2005, 21:35:32
    #33024152
vbкор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсоединенный рекордсет - но записи на сервере блокированы.
Собственно сабж.
Создаю в коде рекордсет, заполняю грид, обновляю записи в гриде, подсоединяю рекордсет, обновляю рекордсет ...
Все здесь понятно.
Вопрос к знатокам: типичная ситуация - как запретить другим пользователям базы редактировать записи кот. открыты другим с помощью отсоединенного набора.
буду весьма благодарен если приведут фрагменты кода, намекнут как реализовать, или ткнут в какойнибуть топик :*)
...
Рейтинг: 0 / 0
19.04.2005, 23:17:04
    #33024206
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсоединенный рекордсет - но записи на сервере блокированы.
vbкорСобственно сабж.
Создаю в коде рекордсет, заполняю грид, обновляю записи в гриде, подсоединяю рекордсет, обновляю рекордсет ...
Все здесь понятно.
Вопрос к знатокам: типичная ситуация - как запретить другим пользователям базы редактировать записи кот. открыты другим с помощью отсоединенного набора.
буду весьма благодарен если приведут фрагменты кода, намекнут как реализовать, или ткнут в какойнибуть топик :*)

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


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

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

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

А почему способ с полем-флагом не проходит? Гемора не так уж и много.
...
Рейтинг: 0 / 0
21.04.2005, 10:13:43
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Отсоединенный рекордсет - но записи на сервере блокированы. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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