Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.12;
Скачать: CL | DM;

Вниз

Опять я с этим ADO   Найти похожие ветки 

 
ao1973 ©   (2002-11-24 08:53) [0]

Доброе утро!
Интересная проблема с ADO.Отркрываю транзакцию с самым низким IsolationLevel = ilReadUncommitted .Начинаю транзакцию редактирую поле в строчке и даю Пост.Моя транзакция видит изменения, а другие блокированы и даже не могут прочитать таблицу.Закрыть транзакцию раньше времени не могу.Какой выход?


 
Оливейра ©   (2002-11-24 12:56) [1]

Не может быть. Они должны быть не "блокированы", а, скорее, переведены в режим ожидания, пока lock не снят. Так что лучше твой код посмотреть. Можно LOCK_TIMEOUT уменьшить и втихаря от пользователя ошибку таймаута обрабатывать в цикле.


 
ao1973 ©   (2002-11-24 14:49) [2]

Очень даже может быть.

connection.BeginTrans;// это соедениение с сервером
ADOTable1.First;//открой любую таблицу
ADOTable1.Next;
ADOTable1.Edit;
ADOTable1NAME.Value:="falcone77";
ADOTable1.Post;

а теперь попытайся прочитать эту же таблицу
хотя бы в Query Analizer

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



 
Оливейра ©   (2002-11-24 15:17) [3]

В одной сессии ( одном окошке QA )

set transaction isolation level read uncommitted
begin transaction
select * from Categories -- не заканчиваю транзакцию!



В другой
select * from Categories -- все чудесно выбирается

Что значит
> другие блокированы?
Это значит вторая копия или третья копия твоего приложения зависает в ожидании снятия лока?
Или у тебя есть другие AdoTables, которые к одному и тому же AdoConnection`у прицеплены? Во втором случае запросы будут обрабатываться последовательно по очереди.



 
ao1973 ©   (2002-11-24 16:17) [4]

НЕТ !
Я пользуюсь АДО (Драйвер OLEDB).Костяк приложения у тебя есть
НО РАЗНИЦА В ТОМ ,ЧТО Я не селект делаю а апдейт или инсерт ,всего одной записи .
Вот полсе этого апдейта виснет второй экземпляр програмы или хотя бы QA ,если он обращается к той таблице.
В твоем примере проблем нет и у меня тоже.
Кстати тема блокировок и транзакций MSSQL освещается в интернете да и в документации весьмо скудно есть ли где-нибудь серьезный материал на эту тему.


 
ao1973 ©   (2002-11-24 16:28) [5]

А вот и пример

QA №1

set transaction isolation level read uncommitted
begin transaction
update products set name="asdasd" where product_id=5845

а в другом окне QA

select * from PRODUCTS /*---- виснет */



 
Оливейра ©   (2002-11-24 16:31) [6]

А, понятно.
AdoTable1.LockType:=ltBatchOptimistic;

Дока в BooksOnline отличная.


 
Оливейра ©   (2002-11-24 16:33) [7]

Косяк, не обновляется вообще :)


 
ao1973 ©   (2002-11-24 16:39) [8]

1. name ключевым полем не является

2. AdoTable1.LockType:=ltBatchOptimistic; стоит по умолчанию
все равно нет эффекта

3. Ну читать то select * from PRODUCTS почему я не могу?
ведь read uncommitted - самый низкий уровень изоляции по идее
не должен мешать читать данные





 
Оливейра ©   (2002-11-24 16:48) [9]

Виснет потому, что в QA у тебя где-то незавершенная тр-я осталась. В общем так: закрой все, что у тебя юзает MSSQL,
открой два окошка

В первом
use Northwind
set transaction isolation level read uncommitted
begin transaction
update Categories set CategoryName="2" where CategoryName="10000"
--commit transaction

Во втором -
use Northwind
select * from Categories

Ничего не виснет :)


 
Оливейра ©   (2002-11-24 16:53) [10]

Виснет потому, что в QA у тебя где-то незавершенная тр-я осталась. В общем так: закрой все, что у тебя юзает MSSQL,
открой два окошка

В первом
use Northwind
set transaction isolation level read uncommitted
begin transaction
update Categories set CategoryName="2" where CategoryName="10000"
--commit transaction

Во втором -
use Northwind
select * from Categories

Ничего не виснет :)


 
ao1973 ©   (2002-11-24 18:06) [11]

Согласен ,не виснет
а вот почему
(0row(s) affected)

а если

use Northwind
set transaction isolation level read uncommitted
begin transaction
update Categories set CategoryName="Napitok" where CategoryID=1
--commit transaction

(1row(s) affected)

то тогда виснет

use Northwind
select * from Categories



Страницы: 1 вся ветка

Текущий архив: 2002.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
6-36326
Осирис
2002-10-17 13:47
2002.12.12
Примеры к Indy9


14-36373
iNew
2002-11-20 08:56
2002.12.12
Как узнать к какому провайдеру подключен тот или иной сервер


3-35980
BorisUK
2002-11-26 14:00
2002.12.12
Свободное место в папке


1-36079
Vcoder
2002-11-28 22:02
2002.12.12
Вертикальный текст в TCanvas


6-36319
Dennis S
2002-10-16 15:30
2002.12.12
Как определить, что кто-то подконектился к компу?