Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Чет туплю под вечер и не могу сообразить: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 1. Если doSaTransactions:=false, и напрямую я транзакции не стартую, то: 1.1. в какой момент транзакция стартует и завершается? Стартуется после TSaDs.Open и завершается после каждого TSaDs.Close? 1.2. заблокировать записи от изменений другими транзакциями тогда можно с помощью Код: plaintext 1.3. ExecuteSQL стартует транзакцию, которая автоматически завершается по его выполнении либо commit'ом либо rollback'ом в зависимости от успешности его выполнения? 2. Если я хочу использовать cached updates, но не хочу на все время этих updates держать транзакцию открытой, какой д.б. последовательность действий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 21:30 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
p.s. read commited, в первом случае я кеширование не использую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 21:35 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Aleksey Kh.1. Если doSaTransactions:=false, и напрямую я транзакции не стартую, то:Читай внимательнее. Если doSaTransactions:=false, то ты вообще не сможешь стартовать транзакцию. Aleksey Kh.1.1. в какой момент транзакция стартует и завершается? Стартуется после TSaDs.Open и завершается после каждого TSaDs.Close?Транзакция всегда стартует автоматически при первом же обращении к таблице. А TSaDs.Close транзакцию никогда не завершает. Конец выборки резалтсета не является основанием для завершения транзакции :) Aleksey Kh.1.2. заблокировать записи от изменений другими транзакциями тогда можно с помощью Код: plaintext Aleksey Kh.1.3. ExecuteSQL стартует транзакцию, которая автоматически завершается по его выполнении либо commit'ом либо rollback'ом в зависимости от успешности его выполнения?Не стартует, а продолжает на самом деле. Стартовать транзакцию он будет если до этого не было открытой транзакции, но если перед ExecuteSQL ты сделал несколько раз SaDs1.Open/SaDs1.Close, то ExecuteSQL продолжит и завершит транзакцию открытую первым вызовом SaDs1.Open. Aleksey Kh.2. Если я хочу использовать cached updates, но не хочу на все время этих updates держать транзакцию открытой, какой д.б. последовательность действий?ээээ..... а смысл? Почитай в BOL главу: Код: plaintext 1. И обрати внимание на опцию базы CHAINED или опция ODBC AutoCommit. TSaDB.doSaTransactions сделана по образу и подобию этой самой CHAINED. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 01:54 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 09:59 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Aleksey Kh.2. Если я хочу использовать cached updates, но не хочу на все время этих updates держать транзакцию открытой, какой д.б. последовательность действий?ээээ..... а смысл? смысл - не держать транзакцию открытой :) (не держать блокировки и не мешать работать другим) а сами cached updates - накапливать изменения на клиенте и применять их по желанию пользователя. Про RUSUG я знаю давно (avkh мое второе имя ), но метаться между двумя форумами - неудобно. За ссылку - шпасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 14:32 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Aleksey Kh. Aleksey Kh.2. Если я хочу использовать cached updates, но не хочу на все время этих updates держать транзакцию открытой, какой д.б. последовательность действий?ээээ..... а смысл? смысл - не держать транзакцию открытой :) (не держать блокировки и не мешать работать другим) а сами cached updates - накапливать изменения на клиенте и применять их по желанию пользователя.Ну так cashed updates по определению придуманы для того чтобы держать транзакцию открытой во время накопления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 17:57 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
[quot White OwlНу так cashed updates по определению придуманы для того чтобы держать транзакцию открытой во время накопления.[/quot] Т.е. если открыть датасет с кешированием, то при подтверждении транзакции он закроется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 18:29 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Aleksey Kh. White OwlНу так cashed updates по определению придуманы для того чтобы держать транзакцию открытой во время накопления. Т.е. если открыть датасет с кешированием, то при подтверждении транзакции он закроется?Да конечно. Как только скомандуешь ApplyCaсhe или ApplyCachedUpdates так и опаньки :) При удачном сохранении кэша в базу автоматически пойдет команда commit, при неудачном rollback. В любом случае транзакция завершится и блокировки снимутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 18:43 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Это понятно (ну кроме того, что транзакция завершится - вроде чуть выше меня убеждали в обратном). Я про другое: т.е. при TSaDb.TransactCommit для всех связанных с этим TSaDb датасетах TSaDs выполнится ApplyCaсhe? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 19:15 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Aleksey Kh.Это понятно (ну кроме того, что транзакция завершится - вроде чуть выше меня убеждали в обратном).Э? Кто-когда убеждал в обратном? Или убеждавший не так выразился, или ты не так понял :) Aleksey Kh.Я про другое: т.е. при TSaDb.TransactCommit для всех связанных с этим TSaDb датасетах TSaDs выполнится ApplyCaсhe?Нет. Не выполнится. Во всяком случае в SaVCL 2.11 точно не выполнится. Наверное это надо считать багом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 19:40 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Что-то вы тут намутили... Или я что-то не понял (в отпуске сейчас, особо вникать времени нет :) ) Cached updates я в основном применяю для редактирования конструкций типа мастер-детализация-деталиация к детализации и т.д. В этом случае открываем все связанные датасеты, ставим им cached:=true, редактируем, а когда надо внести изменения в БД делаем что-то типа вот этого (для двух датасетов): oSaDs1.SaDb.TransactStart; try oSaDs1.ApplyCachedUpdates; oSaDs2.ApplyCachedUpdates; oSaDs1.SaDb.TransactCommit; oSaDs1.ClearCache( false ); //или true, если планируется дальнейшее редактирование oSaDs2.ClearCache( false ); //или true, если планируется дальнейшее редактирование except on e : Exception do begin oSaDs1.SaDb.TransactRollBack; raise; end; end; Транзакция открыта только в момент обновления данных, при редактировании вроде как нет открытых транзакций. Кеширование и транзакции совершенно разные и не связанные друг с другом вещи, и почему при закрытии транзакции для всех датасетов должны автоматически выполняться applycahed я не понимаю... С уважением, Сергей Гаврилов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 20:10 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
Сергей Гавриловчто-то типа вот этого (для двух датасетов): oSaDs1.SaDb.TransactStart; try oSaDs1.ApplyCachedUpdates; oSaDs2.ApplyCachedUpdates; oSaDs1.SaDb.TransactCommit; Это при doSaTransactions = true. А мы говорим про doSaTransactions = false. Сергей ГавриловКеширование и транзакции совершенно разные и не связанные друг с другом вещи, и почему при закрытии транзакции для всех датасетов должны автоматически выполняться applycahed я не понимаю...Ну как вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 23:01 |
|
||
|
Транзакции, cached updates и saVCL
|
|||
|---|---|---|---|
|
#18+
[quot White OwlЭто при doSaTransactions = true. А мы говорим про doSaTransactions = false.[quot] Вообще-то, я - нет :) Для своего п.2 в первом посте я на этом не настаиваю. Наверное, отсюда и путаница :) Меня, в общем, интересовало именно вот это: Кеширование и транзакции совершенно разные и не связанные друг с другом вещи, и почему при закрытии транзакции для всех датасетов должны автоматически выполняться applycahed я не понимаю... ну и теперь понятно, что это возможно только при ручном управлении транзакциями. спс :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 21:00 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33911682&tid=2012676]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 379ms |

| 0 / 0 |
