Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Транзакции в ADP блокировка всей таблицы / 14 сообщений из 14, страница 1 из 1
16.04.2004, 10:34
    #32483831
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
Уважаемые\r
\r
Осмелюсь продолжить (вновь поднять) темы \r
\r
/topic/63874&hl=%f2%f0%e0%ed%e7%e0%ea%f6%e8%ff+%f4%ee%f0%ec%e0\r
\r
/topic/82083&hl=%f2%f0%e0%ed%e7%e0%ea%f6%e8%ff+%f4%ee%f0%ec%e0\r
\r
\r
Есть проект ADP пытаюсь сделать следущее\r
- открытие выбранной накладной \r
- изменение значений в этой накладной \r
- запись сделанных изменений или отмена корректировки \r
\r
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
\r
Private rst As New ADODB.Recordset\r
Private cnn As New ADODB.Connection\r
\r
Private Sub Form_Open(Cancel As Integer)\r
cnn.ConnectionString = CurrentProject.Connection\r
cnn.Open\r
rst.Open  "SELECT ZakazKey, KolZak, NaklKey\r
FROM dbo.ZakSobr WHERE (NaklKey = 15 ) ", cnn, adOpenKeyset, adLockOptimistic\r
Set Me.Recordset = rst\r
cnn.BeginTrans\r
End Sub\r
\r
Private Sub Form_Unload(Cancel As Integer)\r
cnn.RollbackTrans\r
If MsgBox( "Save ?" ,vbYesNo, "") = vbYes Then\r
cnn.CommitTrans \r
Else\r
cnn.RollbackTrans\r
End If\r
End Sub\r
\r
\r
\r
как только внутри транзакции происходят какие либо изменения\r
на серваке таблица ZakSobr блокируется \r
причем вся\r
\r
собственно вопросы\r
1. возможно ли не блокировать таблицу\r
\r
2. Вопрос Vitaly223 вы поднимали похожий топик как \r
все таки решили проблему
...
Рейтинг: 0 / 0
16.04.2004, 11:26
    #32483941
Хвост
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
Транзакции должны быть КОРОТКИМИ.
В твоем случае - можно попробовать через отсоединеный рекодсет открытый как adLock Batch Optimistic есно с UpdateBatch
...
Рейтинг: 0 / 0
16.04.2004, 11:27
    #32483944
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
в тех статьях совсем другие проблемы - в основном ODBC


Вопрос:
что ты уже пробовал чтоб не советовать тебе второй раз

Ставил тип курсора для конекшен - серверный ?
...
Рейтинг: 0 / 0
16.04.2004, 11:28
    #32483947
sasha_1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
было дело мучался я с формами на рекордсете.
огреб кучу глюков. по советам здешних жителей плюнул на это дело.

скорее всего и твой вопрос из этой же серии.
...
Рейтинг: 0 / 0
16.04.2004, 11:35
    #32483972
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
В твоем случае - можно попробовать через отсоединеный рекодсет открытый как adLockBatchOptimistic есно с UpdateBatch

пожалуйста можно поподробнее



серверный курсор ставил

с IsolationLevel и Mode игрался по всекому все одно

и вообще все енто очень странная вещь
- если внутри транзакции прошли изменения таблица блокируется наглухо

- если до изменений открыть таблицу то все изменения (при нажатии F9)
отображаются как будто таблица редактируется напрямую

to sasha_1
как в итоге все сделал ?
...
Рейтинг: 0 / 0
16.04.2004, 11:41
    #32483990
Хвост
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
пожалуйста можно поподробнее

Ключевые слова сказаны - ищи как по форуму так и в хелпе к АДО.

- если внутри транзакции прошли изменения таблица блокируется наглухо

Update or Insert?
...
Рейтинг: 0 / 0
16.04.2004, 11:53
    #32484009
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
любые
...
Рейтинг: 0 / 0
16.04.2004, 11:54
    #32484013
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
попробовал твой вариант - пока без формы
блокировки таблицы не возникает ни при добавлении ни при обновлении

блокируютя только строки ...

MSSQL2000
может обновляется из формы много строк и оптимизатор сервера решает что проще заблокировать таблицу ? - тогда надо явно хинт в запрос прописать.

use northwind

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Sub tst1()
Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection

cnn.ConnectionString = CurrentProject.Connection
cnn.Open
rst.Open  "SELECT * FROM customers WHERE (CustomerID = 'ANATR') " , cnn, adOpenKeyset, adLockOptimistic
cnn.BeginTrans
rst( "CompanyName" ) =  "Лзя Лзя Лзя" 
rst.Update

rst.AddNew
rst( "CompanyName" ) =  "123 "
rst!CustomerID =  "bobob" 
rst.Update

Debug.Assert False
If MsgBox( "Save ?" , vbYesNo, "") = vbYes Then
cnn.CommitTrans
Else
cnn.RollbackTrans
End If
End Sub


сейчас посмотрю что с формой происходит ...
...
Рейтинг: 0 / 0
16.04.2004, 12:06
    #32484045
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
adLockBatchOptimistic

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
rst.Open  "SELECT ZakazKey, KolZak, NaklKey
FROM dbo.ZakSobr WHERE (NaklKey = 15 ) ", cnn, adOpenKeyset, аdLockBatchOptimistic
....
....
Private Sub Form_Unload(Cancel As Integer)
If MsgBox( "Save ?" ,vbYesNo, "") = vbYes Then
Me.Recordset.UpdateBatch adAffectAllChapters
Else
Me.Recordset.CancelBatch adAffectAllChapters
End If
End Sub


если все правильно написал то не работает
обновление происходит прямо в таблице
...
Рейтинг: 0 / 0
16.04.2004, 12:20
    #32484071
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
to АлексейК

northwind
при Debug.Assert False
пытаюсь открыть таб customers - не открывается понятно в принципе почему
а жаль

SELECT dbo.Customers.* FROM dbo.Customers WHERE (CustomerID <> 'ANATR') тоже не выполняется

SELECT dbo.Customers.* FROM dbo.Customers WHERE (CustomerID = 'ALFKI') работает но в моей базе аналогичная вещь не прокатывает
видимо блокировка идет по станицам а у меня две соседние записи в одной
странице
или я брежу
...
Рейтинг: 0 / 0
16.04.2004, 12:39
    #32484112
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
SELECT dbo.Customers.* FROM dbo.Customers WHERE (CustomerID = 'ALFKI') работает но в моей базе аналогичная вещь не прокатывает
видимо блокировка идет по станицам а у меня две соседние записи в одной
странице
или я брежу


индекс нужен на поле по которому WHERE
...
Рейтинг: 0 / 0
16.04.2004, 12:42
    #32484119
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
у меня работает

и в форме тоже работает
блокируются только те строки которые обновляю,
обновлял много строк, тоже работает

правда прописана однозначная таблица
customers
и команда синхронизации
SELECT * FROM customers Where CustomerID = ?


Код: plaintext
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.
Option Compare Database
Option Explicit

Private rst As New ADODB.Recordset
Private Cnn As New ADODB.Connection

Private Sub Form_Load()
Cnn.ConnectionString = CurrentProject.Connection
Cnn.Open
Cnn.BeginTrans
rst.Open  "SELECT * FROM customers " , Cnn, adOpenKeyset, adLockOptimistic
Set Me.Recordset = rst

End Sub

Private Sub Form_Open(Cancel As Integer)

End Sub

Private Sub Form_Unload(Cancel As Integer)

If MsgBox( "Save ?" , vbYesNo, "") = vbYes Then
Cnn.CommitTrans
Else
Cnn.RollbackTrans
End If
End Sub


блокировку смотрю открывая таблицу в режиме раблицы
еще раз это важно сервер MSSQL2000 без Sp
...
Рейтинг: 0 / 0
16.04.2004, 12:50
    #32484140
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
не знаю поможет или нет
но попробуй

rst.Open "SELECT * FROM customers with (ROWLOCK) ", Cnn, adOpenKeyset, adLockOptimistic
...
Рейтинг: 0 / 0
16.04.2004, 13:00
    #32484155
Sklz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Транзакции в ADP блокировка всей таблицы
ВСЕ НАШЕЛ

rst.Open "SELECT ZakazKey, KolZak, NaklKey
FROM dbo.ZakSobr WHERE (NaklKey = 15) ", cnn, adOpenKeyset, adLockOptimistic

это пример на самом деле таблица на которой эксперементировал
лежит в другой базе на сервере
т.е.
rst.Open "SELECT ZakazKey, KolZak, NaklKey
FROM asd. dbo.ZakSobr WHERE (NaklKey = 15) ", cnn, adOpenKeyset, adLockOptimistic

как только задал Connect именно к той базе в которой лежит таблица
стало все просто отлично

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


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