![]() |
|
![]() ![]() ![]() |
|
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
Знаю, что тема неоднократно поднималась, однако так докумекать я сам и не могу.
Есть приложение на дельфи с компонентами ibdac (файрберд 2.5.2) На рабочем примере покажите, как например, работать с транзакциями. Как ПРВИЛЬНО их создавать, комиттить, что после этого делать надо, если открыто куча IBCTable и IBCQuery? И почему измененные данные становятся доступны другим пользовательям, только если я переподключу IBConnection. Во всех компонентах стоит autocommit:=true. Отсылать на чтение манов не стоит - читал, а просветление так и не наступает :((((( |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
после коммита нужно выполнять переоткрытие набора данных
т.е. полностью перечитать данные из базы Добавлено через 8 минут и 3 секунды я всё же рискну и дам ссылку http://www.ibase.ru/devinfo/ibtrans.htm изучать до просветления ![]() там должны быть и примеры, но на базе IBX |
|||
|
||||
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
Почитаю до просветления обязательно, но как корректно именно работать с транзакцией - как ее создавать, или использовать дефолтную? Как узнать - нужен вообще коммит или ничего не поменялось? вот например задача в несколько таблиц последовательно внести изменения, ессно, если на каком-то этапе произойдет сбой - нужно отменить предыдущие изменения. Я так понимаю - нужно в начале кода стартануть транзакцию и в конце вызвать коммит, либо роллбэк при ошибке. Но если в компонентах есть свойства AutoClose, AutoPrepare и AutoCommit - как их нужно выставлять?
Заранее спасибо Добавлено через 3 минуты и 10 секунд Просто те маны, что я нахожу через поиск, описывают либо в общем принцип транзакций, либо применительно к FB, но как их использовать в самих компонентах Delphi и на примере установки свойств и вызова методов - я не встречал. То есть типовые примеры кода для использования механизма транзакций вручную, не полагаясь на дефолтное поведение |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Её не надо создавать. Её надо стартовать.
Добавлено через 34 секунды Возможно в настройках компонент уже есть autostart. Ведь autocommit есть же. Добавлено через 1 минуту и 17 секунд ![]() ![]() ![]() ![]() делай подтверждение после post Добавлено через 2 минуты и 11 секунд тебе вообще надо почитать про базы и про транзакции 1-2 книжки, слишком много у тебя вопросов довольно простых, которые уже описаны 100500 раз во многих источниках |
|||
|
||||
GrigoriyFomin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 16.11.2010 Репутация: нет Всего: нет |
В теории это я все примерно понимаю, мне нехватает РЕАЛЬНОГО примера работы с транзакциями с данными компонентами. Ведь не для того создаются такие компоненты, чтоб потом напрямую с АПИ сервера работать, потому что в книжках описывается именно работа с АПИ.
То есть напрмер, как IBDAC стартовать транзакцию, как указать, какие действия нужно совершать в пределах ДАННОЙ транзакции, сделал коммит/ролллбэк - что делать с самими датасетами. Почему-то при превентивном коммите вылазит ошибка типа "нечего коммитить - ничего не поменялось". |
|||
|
||||
Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
При чем здесь, апи?
Тебе дают готовый инструмент, где есть всего 2 метода: подтвердить и откатить. Тебе самому решать нужно когда и что применять. Добавлено @ 22:05 Значит не те книжки читаешь почитай книжку Хелен Борри по firebird`у. А ту ссылку читал? Там что, тоже про апи? Добавлено @ 22:07 С компонентами наверняка идут примеры, посмотри их, изучи. Добавлено @ 22:08 Там же есть компонента-транзакция? Вот и пиши TxxTransaction.Start выполняешь какие-то изменения TxxTransaction.Commit Добавлено @ 22:10 после Commit нужно переоткрыть НД (Набор Данных, DataSet - IBCTable или IBCQuery), чтобы прочесть изменённые записи Добавлено @ 22:11 вот здесь есть примеры http://forum.vingrad.ru/forum/topic-194159.html и даже мой, но на основе IBX + FIBPlus Добавлено через 12 минут и 16 секунд Здесь есть пример для FibPlus http://www.devrace.com/ru/fibplus/articles/2171.php |
|||
|
||||
RusMikle |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 30.9.2011 Репутация: нет Всего: нет |
Доброе время суток!
Нахожусь сейчас примерно в той же ситуации как и Вы в момент написания этого сообщения. Удалось что то нарыть? Я уже до дыр зачитал и книги и статьи по firebird и ранзакциям. На уровне базы все уже довольно понятно как работает но на уровне компонентов вроде и знаю какие есть и какие свойства имеют но как и в какой ситуации как настраивать пока не очень понятно. До этого работал с ado и mssql, особых проблем не возникало. Написал уже и в форум разработчиков сюда и на sql.ru и на хабр. Пользы пока маловато. Вопросы примерно те же что и Вы сформулировали. Если что то интересное нашли книгу или статью поделитесь ссылочкой. Заранее спасибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |