MSSQL и ADO
От: holod_new3  
Дата: 13.01.06 07:49
Оценка:
Доброе утро!
Проблема состоит в следующем:

Есть таблица TUser. (поля ID_User, Name, Age) — это просто для примера.
Допустим, я хочу отредактировать запись из этой таблицы.
Нажимаю кнопочку Edit, в пишу Query1.ExecProc.В Query написан следующий код( Set TRANSACTION isolation level REPEATABLE READ Set Lock_Timeout 0 begin transaction select * from TUser) — транзакцию не закрываю, для наглядности этого примера.

Также есть кнопочка Delete(удаляет запись из TUser), в которой я пишу Query2.ExecProc (Delete From TUser Where ID_User=5) — 5-ая запись просто для примера!

Так вот, после нажатия кнопки Delete запись действительно удаляется из таблицы. Т.е. сервер не генерирует ошибку!!!
(Команды обе на сервер приходят.Проверял с помощью Profiler)

Если проделать подобные действия в QueryAnylazer,т.е В 1-й сессии пишем :
Set TRANSACTION isolation level REPEATABLE READ Set Lock_Timeout 0 begin transaction select * from TUser

во второй сессии пишем:
Delete From TUser
Where ID_User=5

То сервер генерирует ошибку :Ms 1222 ...и т.д. (и это правильно, так как 3-й уровень изоляции).

Но я не понимаю, почему Delphi не генерирует никаких ошибок!!!(или MSSQQL не генирирует). При любых конфликтных ситуациях транзакциях Delphi молчит и ничего не выдаёт!

Как сделать, чтобы вылетала ошибка! В идеале было бы, если ошибку генерировал MSSQL.

СПАСИБО, что прочитали ....
Re: MSSQL и ADO
От: pkarklin  
Дата: 13.01.06 08:44
Оценка:
Здравствуйте, holod_new3, Вы писали:

_>Так вот, после нажатия кнопки Delete запись действительно удаляется из таблицы. Т.е. сервер не генерирует ошибку!!!

_>(Команды обе на сервер приходят.Проверял с помощью Profiler)

_>Если проделать подобные действия в QueryAnylazer,т.е В 1-й сессии пишем :

_>Set TRANSACTION isolation level REPEATABLE READ Set Lock_Timeout 0 begin transaction select * from TUser

_>во второй сессии пишем:

_>Delete From TUser
_>Where ID_User=5

_>То сервер генерирует ошибку :Ms 1222 ...и т.д. (и это правильно, так как 3-й уровень изоляции).


_>Но я не понимаю, почему Delphi не генерирует никаких ошибок!!!(или MSSQQL не генирирует). При любых конфликтных ситуациях транзакциях Delphi молчит и ничего не выдаёт!


Судя по вашему описанию, у Вас на клиенте в Delphi все происходит в одной сессии, поэтому удаление и происходит. Проверьте это по spidам процессов SELECT и DELETE в профайлере.
Re: MSSQL и ADO
От: pkarklin  
Дата: 13.01.06 08:46
Оценка:
Здравствуйте, holod_new3, Вы писали:

_>Доброе утро!

_>Проблема состоит в следующем:

В догонку. Ошибка должна быть, если удалять Вы будете в другом экземпляре клиента.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.