Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с уровнем изоляции в MS SQL !   Найти похожие ветки 

 
AlexGof   (2003-04-28 12:51) [0]

Уважаемые матера ! Помогите решить проблему. У меня 1 родительская и 3 подчиненных таблицы связанных через master filds в компонентах ADODataSet, все они привязаны к визуальным компонентам типа DBGrid, DBCtrGridEh, DBEdit и. т. п., когда добавляю запись в родительскую таблицу методом append то значение indetity с сервера еще естественно не приходит и дочерние таблицы не связываются с родительской. Можно конечно сделать на родительской append и UpdateBatch, тогда indetity появиться, но не произведешь откат сразу всей группы подчиненных записей, т. е. придется удалаять из родительской при откате запись. Посоветовали открыть транзакцию, открыл так
ADOConnection.BeginTrans
ADODataSet.Append
ADODаtaSet.UpdateBatch
Затем индетити появляется, вношу записи в сязанные дочерние, таблицы ADOConnection.CommitTrans и все о"кей. Но в это время другой пользователь, не может открыть эту таблицу, просто в приложение ничего не выгружатся из данных этой таблицы.
Мне кажется, что проблема кроется в уровне изоляции транзакции, как ее решить не знаю, пробовал в ADOConnection.IsolationLevel менять уровни изоляции, о увы не помогает. Если не открывать транзакции, то без индетити, в визуальных компонентах полная чехарда естественно, в таблицах левые записи появляются и. т. п.
Помогите, кто знает что делать.


 
MOA   (2003-04-28 13:29) [1]

Не, так делать не рекомендуется (IMHO, нельзя). Напишите хранимые процедуры на сервере, которые будут вставлять и удалять нужные записи, можно попробовать включить каскадное удаление - для "октата".
Можно поиграться с уровнем изоляции (запросов на запись и чтение), но этот путь практически неизбежно приведёт к ещё большей грыже (опять, IMHO).
Удачи!


 
АлексейК   (2003-04-28 14:04) [2]

1. Свойство IsolationLevel не менят уровень изоляции транзакций для данного соединения установленный по умолчанию на сервере, для конкретной сессии придется выполнить команду SQL. У него немого другое назначение.
2. Начав явно тразакцию, ты блокируешь, в данном случае, запись с которой работаешь и пока тразакция не завершится, эту запись нельзя выбрать. Следовательно другой пользователь пытается сделать запрос и в его набор данных входит данная запись, естественно, что запрос будет сначала ожидать завершение твой тразакции и снятия блоктровки а лишь потом выполнятся. В приципе, хинт nolock в запросе позволяет решить данную роблему, но появляется новая - проблема грязного чтения. Если тебя это не пугает то можно смело им воспользоваться.
3. Следует обратить внимание на свойство LockType. Вот оно и управляет блокировками. Следуется стараться задавать значение ltOptimistic.
Хотя в приципе данную вставку лучше делать через хранимые процедуры.



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

Форум: "Базы";
Текущий архив: 2003.05.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
8-59810
Natalia
2003-02-04 10:48
2003.05.19
картинка и рабочий стол


3-59631
umr
2003-04-29 08:25
2003.05.19
Как вставит в SQL длинный запрос?


9-59528
anatol
2002-12-09 19:28
2003.05.19
Помогите найти исходники для карточной игры


3-59638
NiBL'S
2003-04-29 10:38
2003.05.19
Проблема конекта.


8-59817
Sterh
2003-02-07 21:25
2003.05.19
MP3





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский