![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Транзакции [D7]
MORA © (2004-11-19 13:48:00)Достигнув некоторого более-менее уровня в проектировании БД и написании для них апликух, попалась мне под руку книжица для начинающих по программированию БД в Д-7. (Рекомендую всем иногда возвращаться назад - почерпнёте много интересного, но на другом уже уровне!). Дык вот. Возник у меня естественный вопрос:
При использовании кэширования в запросе Query (CachedUpdetes = True) юзверь может НАДОЛГО зависнуть над редактированием одной записи. В это же время другой юзверь, отредактировав её же, успешно сохраняет (ApplyUpdates). А первый пытается стартовать транзакцию, которая записывает в кэшированную(!?) таблицу изменения (изменения не только в эту единственную таблицу, но и в НЕКЭШИРУЕМУЮ!) - допустим успешно. А потом уже нажимает кнопку ApplyUpdates. В обработчике OnUpdateRecord например можно отказаться от сохранения изменений на диске. Но при этом всё ,что сделано в транзакции, не касающееся данной кэшируемой таблицы, останется.
Может, я неправильно организовал логику, то поправьте меня.
MORA (2004-11-19 14:35:00) [1]>[3]
да. наверное так. Т.е. надо следить ,какая табл. кэшируется, а какая - нет.
Я имею в виду ситуацию, когда в транзакции изменяется и та, и другая таблицы. И здесь же нужно делать ApplyUpdates().
Но возникает другая проблема - при ручной реакции на OnUpdateRecord() транзакция может надолго зависнуть.
Johnmen (2004-11-19 14:09:00) [2]Кеширование в данном случае неважно.
Главное Коммит/Роллбэк. Перед внесением изменений в таблицы стартуешь тр., после этого Коммит/Роллбэк.
MORA (2004-11-19 13:57:00) [3]>[1]
Пример я описал. Код неважен, выжно когда начало и Коммит/Роллбэк.
БД например IB, хотя по-моему тож неважно
msguns (2004-11-19 13:55:00) [4]Параметры транзакции, тип БД, движок ?