![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Rabota s BD
Slv © (2003-05-23 10:59:00)Obrabotka tranzaktii v Mnogopolizovateliskom regime
Delphi 6 + Interbase 7. Rabotaet cerez componenti
Error:
Deadllock. Update conflicts with concurrent update.
Vopros: Kak oboiti ?
Zacho (2003-05-23 13:40:00) [1]
> Slv (23.05.03 13:25)
При уровне изоляции SNAPSHOT (concurrency) Lock conflict может возникнуть только при изменении одной и той же записи разными транзакциями.
Slv (2003-05-23 13:25:00) [2]В IBTransaction. params =concurrency.
Zacho (2003-05-23 12:34:00) [3]
> Slv (23.05.03 12:12)
> Дело втом что пользователям расспределяются разные записи
> или группа записей из одной и той же таблицы.
И что ? Или уровень изоляции транзакций SNAPSHOT TABLE STABILITY ?
Slv (2003-05-23 12:12:00) [4]Дело втом что пользователям расспределяются разные записи или группа записей из одной и той же таблицы.
Zacho (2003-05-23 12:01:00) [5]
> Slv (23.05.03 11:56)
Значит, не на разных.
Slv (2003-05-23 11:56:00) [6]Если можно еще немного о сути этой ситуации.
Есть форма на которой есть DB-компоненты и несколько компонент, посредством которых осуществляется ввод данных вручную.
Когда несколько пользователей одновременно активизируют "Save", обрабатываются данные, затем выполняется "Transaction.CommitRetaining". В этом месте и появляется ошибка, хотя пользователи "сидят" на разных записях
Johnmen (2003-05-23 11:52:00) [7]>Slv
Скондачка ты свою проблему не решишь ! Потому, что тебе не хватает знаний. Куда за ними идти, уже сказали. Не поняв механизмов и принципов работы SQL сервера и клиентского приложения, ты не сможешь грамотно реализовать желаемое...:)
Zacho (2003-05-23 11:44:00) [8]
> Slv (23.05.03 11:39)
Просто укажи в параметрах транзакций WAIT.
Кстати, в этом случае тоже "потеряются" данные, внесенные транзакцией, завершившейся раньше.
И еще: пишущие транзакции должны быть как можно более короткими.
Slv (2003-05-23 11:39:00) [9]
try
Transaction.CommitRetaining;
except
Transaction.RollbackRetaining;
end;
Этот вариант не приемлем т.к. в этом случае теряются данные.
Было бы хорошо чтобы по "except" эти данные установить в очередь на update данных.
Zacho (2003-05-23 11:31:00) [10]Ладно, если кратко: это происходит, когда какя-либо транзакция пытается изменить запись, измененную в другой не завершившейся транзакции. Делай выводы.
Обходить не надо. Надо правильно обработать.
Johnmen (2003-05-23 11:31:00) [11]Как обойти ?
try
Transaction.CommitRetaining;
except
Transaction.RollbackRetaining;
end;
А по хорошему, читать, читать и читать документацию...:)
Slv (2003-05-23 11:21:00) [12]IBX.
Само собой почитаем. Но к сожалению уровень срочности равен значению "ВЧЕРА". Время решения вопроса минимально.
Zacho (2003-05-23 11:11:00) [13]
> Slv (23.05.03 11:08)
> Через компоненты прямого доступа.
Через какие именно ? IBX, FIBPlus, IBO, ADO+IBProvider ...
И почитай все-таки статьи, и разберись как работать с транзакциями в IB
Slv (2003-05-23 11:08:00) [14]Через компоненты прямого доступа.
Проблема в том что когда несколько пользователей одновременно выполняют "Transaction.CommitRetaining" выдает вышеуказанную ошибкую
Zacho (2003-05-23 11:02:00) [15]Через какие компоненты ?
Читать http://www.ibase.ru/devinfo/ibtrans.htm, http://www.ibase.ru/devinfo/ibxtrans.htmи другие статьи на http://www.ibase.ru/develop.htmраздел "Транзакции, архитектура IB"