Как сделать транзакцию для определенных DataSet'ов?

Bigov
Дата: 12.06.2009 03:19:03
Возник такой вопрос: а как сделать транзакцию для одного (или нескольких) датасетов (TADODataSet)?

Вобщем, на форме выполняются какие-то действия с несколькими связанными датасетами. Потом нужно эти все изменения либо сохранить либо отменить разом. Попробовал траназкцию для ADOCOnnection, но она блокирует доступ других пользователей, а также работает для всего приложения в целом (а ведь параллельно возможно будут изменяться данные в другом дочернем окне).
LSV
Дата: 12.06.2009 11:11:32
Один из вариантов решения:
1. Все действия в системе - через ХП
2. При открытии док-та создается врем.таблица и в нее заливается строчная часть д-та.
3. строки времянки правятся в обычном режиме.
4. при сохранении в транзакции времянка сливается в постоянку, делается куча проверок валидности док-та и если ОК, то изменения комитятся. Если не ОК, то роллбек.

-:
1. Трудоемко. Много ХП.
2. Ресурсоёмко для сервера.
3. Кто последний сохранил документ, "тот и папа". Но это можно разрулить дополнительной логикой. :)
4. Затруднительно иметь несколько копий одного окна. Из-за логики времянок.

+:
1. Получается хорошая, предсказуемая целостность.
2. Все процедуры в скриптах. Читабельная логика.
3. Не нужны триггеры.

ЗЫ: У меня более 2700 ХП в 760 файлах :)
Док
Дата: 12.06.2009 12:14:18
LSV
Один из вариантов решения:
1. Все действия в системе - через ХП
2. При открытии док-та создается врем.таблица и в нее заливается строчная часть д-та.

А мне кажется, ТС не совсем понимает, что такое транзакции и с чем их едят. Теоретически на кажный датасет можно повесить оптимально как минимум 2 транзакции (пишущая + читающая).

имхо, тут нужны "правильные" компоненты доступа и СУБД (мне кажется, что от АДО вообще лучше отказаться, есть же всякие ДАКи).

LSV
ЗЫ: У меня более 2700 ХП в 760 файлах :)

Сынок, а штаны не жмут? (с)
Dimitry Sibiryakov
Дата: 12.06.2009 12:41:37

Док

имхо, тут нужны "правильные" компоненты доступа и СУБД (мне кажется, что
от АДО вообще лучше отказаться, есть же всякие ДАКи).

Даже правильные ДАКи не помогут избавиться от ограничения MS SQL в одну
транзакцию на коннект.

Posted via ActualForum NNTP Server 1.4

Bigov
Дата: 12.06.2009 12:45:05
Док

имхо, тут нужны "правильные" компоненты доступа и СУБД (мне кажется, что от АДО вообще лучше отказаться, есть же всякие ДАКи).

Увы, нужно использовать стандартные ADODataSet.
Bigov
Дата: 12.06.2009 12:45:59
Док
кажный датасет можно повесить оптимально как минимум 2 транзакции (пишущая + читающая).

А вот как бы практически это сделать?
Кроик Семён
Дата: 12.06.2009 13:11:33
вижу решение проблемы в том, чтобы завести несколько TADOConnection и прикрепить к нему те TADODataSet, которые "как сделать транзакцию для одного (или нескольких) датасетов?"
LSV
Дата: 12.06.2009 15:08:03
Мож тут речь про отложенные изменения ? ApplyUpdates и т.д.
Использовать для сабжа блокировки сервера нельзя:
1. Совершенно непортабельно.
2. Много труднопреодолимых проблем.
3. Усложнение всей системы.

Мож лучше применить что-то типо In-Memory-Dataset ? И постить только измененные строки.
Но это опять таки усложнение конструкции.
Док
Дата: 12.06.2009 23:24:20
Bigov
Док
кажный датасет можно повесить оптимально как минимум 2 транзакции (пишущая + читающая).

А вот как бы практически это сделать?

если DS прав, то вопрос лучше задать в "мускульном" разделе форума. имхо.
MMM_Corp
Дата: 13.06.2009 03:01:13
автор
У меня более 2700 ХП в 760 файлах :)


у меня для крупного нейтепромишленного комплекса хватило порядка 600 хранимок, чтото вы загнули, уж слишком круто, и причём здесь 760 файлов? это что ДБФ через зеос ?.... апупеть просто...

З.Ы. сори, не удержался эмоциямы)