IBDAC порекомендуйте где и что почитать по методологии применения

Обсуждение возникших проблем, предложений и ошибок IBDAC компонентов
Ответить
RusMikle
Сообщения: 1
Зарегистрирован: Чт 28 ноя 2013 13:55

IBDAC порекомендуйте где и что почитать по методологии применения

Сообщение RusMikle » Чт 28 ноя 2013 14:35

Доброе время суток всем!
В данный момент курю мануал но при 1100 страницах внутри крайне мало примеров и рекомендаций по методике их применения хотя объем внушает уважение. Может стоит написать какую то обзорную статью где на пальцах объяснить основные принципы использования этих компонентов с примерами. Гольное описание классов методов и свойств тоже хорошо но только когда знаешь в каком направлении их применять. Мануал докурить всеравно прийдется но хотелось бы и разобраться как лучше это богатство применять. Раньше работал в основном с ADO и mssql. Хочется увидеть преимущества и отличия данных компонентов на практике и в коде. Как правильно организовывать работу с транзакциями учитывая специфику firebird. Например как настроить компоненты что бы транзакция стартовала и завершаласть только в момент сохранения данных (не начиналась в момент начала редактирования в элементах управления). Может книга есть или обзорная статья какая может исходники какие где посмотреть? Гугление дает не много интересного. Даже просмотр вопросов в форумах, зачастую, позволяет понять что то лучше. Те примеры что идут с компонентами бедны и несколько оторваны от реального их применения и не несут рекомендаций в каких ситуациях как лучше поступить. Идеально было бы написание статьи где по шагам автор создает приложение работающее с базой и объясняет почему делает именно так а не иначе и в какой ситуации можно поступить иначе. Возможно я что то пропустил и такая статья уже существует, я только 2ю неделю занимаюсь этим вопросом (перехожу в фирму где используется ibdac и firebird). Раз уж убиваю отпуск на изучение хочется максимальной эффективности, а простое прочтение мануала не дает методологии применения этих компонентов. Буду благодарен на любые ссылки.
Заранее спасибо.
(IBDAC 4.6+ FireBird 2.5)

AndreyZ
Devart Team
Сообщения: 328
Зарегистрирован: Чт 08 сен 2011 13:18

Re: IBDAC порекомендуйте где и что почитать по методологии применения

Сообщение AndreyZ » Пт 29 ноя 2013 10:31

Здравствуйте,

Вы можете найти несколько книг описывающих работу с InterBase и Firebird по следующей ссылке: http://www.firebirdsql.org/en/books/

При работе с транзакциями в InterBase and Firebird необходимо учитывать что все операции над данными могут быть выполнены только в контексте транзакции. Неправильное использование транзакций может привести к падению производительности. Для избежания подобной проблемы, рекомендуется использовать длительные транзакции только для чтения данных. Для модификации данных рекомендуется использовать транзакции с очень коротким жизненным циклом.

В IBDAC все компоненты которые одновременно могут читать и писать данные имеют свойства Transaction и UpdateTransaction, что позволяет использовать выше перечисленные рекомендации. По умолчанию оба свойства указывают на одну и ту же внутреннюю транзакцию. Это значит что все операции над данными (чтение, модификация) будут производиться в контексте одной транзакции. В этом случае при модификации данных IBDAC вызывает метод CommitRetaining вместо метода Commit для предотвращения закрытия датасета. Для избежания вызова метода CommitRetaining (и как следствие улучшения производительности) необходимо указывать различные транзакции для свойств Transaction и UpdateTransaction. В таком случае для чтения данных будет использоваться транзакция указанная в свойстве Transaction, а для модификации данных будет использоваться транзакция указанная в свойстве UpdateTransaction.
Ниже представлены два примера описанных выше случаев.

Первый пример:

Код: Выделить всё

IBCQuery.SQL.Text := 'select * from dept';
IBCQuery.Open; // здесь транзакция стартуется. в данном случае компонент IBCQuery использует одну и ту же внутреннюю транзакцию для всех операций над данными
IBCQuery.Edit;
IBCQuery.FieldByName('loc').AsString := 'test';
IBCQuery.Post; // здесь IBDAC вызовет метод CommitRetaining для того чтобы можно было продолжать работать с компонентом IBCQuery. Если бы IBDAC в данном случае вызывал метод Commit, это привело бы к закрытию транзакции и следовательно к закрытию IBCQuery
Второй пример:

Код: Выделить всё

IBCQuery.Transaction := IBCTransaction1;
IBCQuery.UpdateTransaction := IBCTransaction2;
IBCQuery.SQL.Text := 'select * from dept';
IBCQuery.Open; // здесь стартуется транзакция IBCTransaction1. в данном случае компонент IBCQuery использует транзакцию IBCTransaction1 для чтения данных. Транзакция IBCTransaction2 не активна
IBCQuery.Edit;
IBCQuery.FieldByName('loc').AsString := 'test';
IBCQuery.Post; // здесь стартуется транзакция IBCTransaction2 и сразу же вызывается ее метод Commit

Ответить