ADO Recordset блокирует таблицу, а нужно запись.
От: Pantalone  
Дата: 24.03.04 13:41
Оценка:
Dim cnnAccess As New ADODB.Connection

Dim rst As New ADODB.Recordset
Dim sql As String

cnnAccess.CursorLocation = adUseClient
cnnAccess.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=C:\biblio.mdb;"

cnnAccess.BeginTrans


    sql = "SELECT * FROM Authors Where Author = '1'"
    
    rst.Open sql, cnnAccess, adOpenKeyset, adLockOptimistic
    
    With rst
        .AddNew
            !Author = "Name"
        .Update
        ' тут останавливаемся и пытаемся в базе поредактировать все записи.
    End With
    
    rst.Close
    Set rst = Nothing


cnnAccess.CommitTrans

cnnAccess.Close
Set cnnAccess = Nothing


После Update таблица становится недоступна для изменений другим пользоателем, даже после rst.close и Set rst = Nothing
Только когда из программый выйдешь то все ок.

Все добавления делаются в транзакции, так что не понятно зачем блокируется таблица целиком? Ведь добавляемую в транзакции запись не видно, ее никто не изменит. Как отключить блокировку?

Точнее блокируется не вся таблица, а некоторая ее часть (называется страница?). Как бы добиться блокировки только одной записи.
Re: ADO Recordset блокирует таблицу, а нужно запись.
От: Titus  
Дата: 25.03.04 08:02
Оценка:
Дядька, а нафига ты транзакцию запустил?
У тебя там всего одна операция?
Можешь попытаться поиграться с IsolationLevel,
но лучше закомментирую транзакцию и все будет в порядке.
Или коммить все сразу после апдейта.
Re[2]: ADO Recordset блокирует таблицу, а нужно запись.
От: Pantalone  
Дата: 25.03.04 08:10
Оценка:
Здравствуйте, Titus, Вы писали:

T>Дядька, а нафига ты транзакцию запустил?

T>У тебя там всего одна операция?
T>Можешь попытаться поиграться с IsolationLevel,
T>но лучше закомментирую транзакцию и все будет в порядке.
T>Или коммить все сразу после апдейта.

Я упрощенный пример дал, таких апдейтов происходит туча, в смысле AddNew и все необходимо сделать в одной транзакции, дабы иметь возможность отменить если что не так пойдет. А юзеры в это время работают с таблицами в которые идет закачка и поднимается вой что таблицы заблокированы.

IsolationLevel = adXactReadUncommitted ничего не дал, а другие не вижу смысла пробовать.
Re[3]: Общие требования к транзакциям
От: Titus  
Дата: 26.03.04 07:40
Оценка:
Транзакции должны быть короткими по времени.
Уровень блокировки во время транзакции зависит от настроек провайдера и твоих действий.
То, что Access блокирует таблицу при добавлении записей тоже оправдано — вдруг какой-то перец
захочет нарушить уникальность ключа, только что созданного тобой.
Предлагаю воспринимать жизнь такой какая она есть и стараться приспособиться.
С уважением.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.