Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
ВнизВопрос по IBTransaction Найти похожие ветки
← →
ILUHA (2004-10-18 07:55) [0]Здравствуйте. Не могли ли вы продсказать в поле Params компонента IBtransaction какие параметры вообще вводятся. Просто хотелось узнать а влруг пригодятся.
← →
YurikGL © (2004-10-18 08:06) [1]http://www.ibase.ru/develop.htm
Там еще много полезного
← →
ILUHA (2004-10-18 15:14) [2]Я знаю что там много полезного но хотелось бы получить ответ на вопрос
← →
Sergey13 © (2004-10-18 15:22) [3]2[2] ILUHA (18.10.04 15:14)
Двойной клик на компоненте тебе поможет.
← →
sid © (2004-10-18 16:07) [4]Снова привет Серега. Скажи, плиз, а что включить для работы нескольких приложений с одной таблицей: Snapshot, ReadCommitet, Read-only..., Read-write?
← →
Sergey13 © (2004-10-18 16:13) [5]2[4] sid © (18.10.04 16:07)
Я всегда работаю с ReadCommited.
А где почитать об этом см. в [1]
← →
Vemer © (2004-10-18 19:33) [6]Вот тебе мой пример.
2 Транзакции:
1) Read + Read Commited (Default у базы) - включена постоянно..
2) Обычная (без параметров) - стартует, делает свои дела и сразу завершается.
Первая видит изменения второй простым Open/Close.
← →
jack128 © (2004-10-18 22:36) [7]Vemer © (18.10.04 19:33) [6]
можно добавить snapshot для построения сложных отчетов..
← →
ILUHA (2004-10-19 04:43) [8]Всем спасибо!!!! все понял! вопрос снимаю
← →
Deniz © (2004-10-19 06:31) [9]1. Читающая длинная
read
read_committed
rec_version
nowait
2. Пишущая короткая
write
concurrency
nowait
3. Для отчетов длинная
read
concurrency
nowait
← →
Vemer © (2004-10-21 00:21) [10]Пожалуйста объясните разницу по функциональному смыслу между 1-ым и 3-им вариантом. заранее спасибо.
← →
jack128 © (2004-10-21 03:43) [11]Vemer © (21.10.04 0:21) [10]
read_commited - транзакция видит все закоммиченные записи.
snapshot - видит только те записи, которые были закоммичены на момент СТАРТА этой транзакции.
read_commited нельзя использовать для постороения отчетов(если только отчет не является результатом одного запроса) вот почему:
есть таблица
goods
id goods_name price goods_count
первый запрос select * from goods - получили список товаров.. второй запрос select sum(price*goods_count) from goods - получили полную стоимость всех товаров. Если ты будешь выполнять эти запросы в read_commited - транзакции и между первым и вторым запросом будет вставлена новая запись в таблицу goods, то у тя получиться несогласованный отчет
например
select * from goods
результатid goods_name price goods_count
0 кукла 10 5
1 пиво 5 2
тут другой юзер вставляет запись2 водка 20 3
теперь ты выполняешь запрос
select sum(price*goods_count) from goods - получаешь 120 <> 10*5+5*2 - неправельный отчет.
← →
msguns © (2004-10-21 10:01) [12]И еще замечание.
По умолчанию в IBX используется опция SNAPSHOT, хотя нигде явно это не написано. Поэтому я, к примеру, в свое время хорошо поломал свою голову (и вылил грязи на бедных Вострикова с Ковязиным, которые, кстати, почти не уделили в своей книги внимания палитре IBX), т.к. при использовании неск.транзакций изменения, сделанные в одной таблице (например, справочнике), никак не хотели "показываться" при изменении другой таблицы (например, документов, имеющую ссылку на этот справочник). И вот только после штудирования статьи на ibase.ru я нашел ответы. В результате я принял такую схему (фрагмент датамодуля одного из простеньких проектов):{ Модель доступа к БД "КНИГИ" использует следующие таблицы БД и транзакции:
- Справочник издательств (поставщиков) DR_PUB
- Справочник магазинов розницы (получателей) DR_SHOP
- Справочник изданий (книг) DR_BOOK
- Справочник разделов литературы DR_PART
- Прих.накладные. (Инвойсы) Заголовки
- Прих.накладные. (Инвойсы) Фактура
Использование транзакций:
1. На справочники, открываемые поочередно (т.е. за раз может быть
открыт для просмотра/модификации только один справочник) используется
кратковременная транзакция trReWrSpr, в контексте которой данные
справочника могут быть извлечены или изменены.
Режимы работы:
- транзакция стартует при открытии справочника и завершается
при его закрытии.
- при модификации справочника для транзакции используется метод Commit или
Rollback с последующем переоткрытием справочника
- редактирование справочников выполняется через не DB-aware контролы с
последующей отменой или подтверждением изменений. Модификация непосре-
дственно в таблице выполняется динамически создаваемым объектом
класса TIBSQL в контексте той же (trReWrSpr), после чего делается
Commit/Rollback с переоткрытием справочника и его перечиткой.
Параметры транзакции:
Write
Nowait
Concurrency
2. Для доступа к инвойсам (как к заголовкам, так и к фактурам) используется
две транзакции:
На изменение (trWriteDok) - для одиночных (TIBSQL) запросов на вставку/
изменение/удаление записей с параметрами:
Write
NoWait
Concurrency
после модификаций делаются переоткрытия (перечитки) соответствующих НД.
ПРИМЕЧАНИЕ: перед модификацией следует делает перечитку этой записи во
избежание конфликтов.
Для чтения данных в режиме "долгоиграющего открытия НД" используется
транзакция trReadDok с параметрами:
Read
Read_Commited
Rec_Version
NoWait
ПРМЕЧАНИЕ: при переоткрытиях НД в рамках этой транзакции всегда дается
CommitRetain
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.11.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.044 c