powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / АNN: Создание приложений для СУБД Firebird: FireDAC
25 сообщений из 46, страница 1 из 2
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39135762
Фотография Alexey Kovyazin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,

Мы начали публиковать цикл примеров для начинающих, посвященный работе с Firebird c использованием различных инструментов.
Первый в очереди - Дельфи. Автор - Денис Симонов.

Все статьи будут использовать одну и ту же структуру БД, и реализовывать примерно одинаковый функционал, фокусируясь на основных моментах разработки под Firebird.

Большая просьба - посмотреть и прокомментировать, что можно улучшить.
Если есть аккаут на Хабре - поддержите плюсом, пожалуйста.

Создание приложений для СУБД Firebird с использованием различных компонент и драйверов: FireDac

With best regards,
Alexey Kovyazin
Попробуйте HQbird - продвинутый дистрибутив Firebird
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39135862
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSPX – локальный протокол
вообще-то, это сетевой протокол Novell Netware. И вырезан он был как бы не в 1.х вообще.
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136354
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KovyazinБольшая просьба - посмотреть и прокомментировать, что можно улучшить.
Транзакция с такими параметрами в Firebird может быть открытой сколь угодно долгое время (дни, недели, месяцы)
Пожалуйста, не надо провоцировать данное поведение. Ибо хотя транзакция и стартует как закоммиченная, она всё же жива и имеет побочные эффекты в виде накопления блобов, например.
Счётчик транзакций расширен до 48 бит, так что лучше не мелочиться и делать правильно: создавать отдельные транзакции на отдельные логические куски работы. В вашем мышевозном примере - своя транзакция на каждую форму, которая стартует при открытии (или когда надо) и сразу завершается при закрытии (окончания фетча если компоненты позволяют) последнего связанного с ней датасета.

За использование TDataSet.Refresh (и тем более Requery) - отдельные люли.

Код: pascal
1.
on E: EFDDBEngineException do


Поздравляю, вы только что подвесили пишущую транзакцию в неопределённом состоянии при любой ошибке, не связанной с работой с БД.

И, кстати, если не использовать Application.ShowException(E), а просто выбрасывать исключение дальше, код будет проще и, местами, предсказуемее.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
FInvoiceForm.trWrite.StartTransaction;
try
.....
except
on E: Exception do
begin
if FInvoiceForm.trWrite.Active then
FInvoiceForm.trWrite.Rollback;


1) Лезть к компонентам в другой форме - архитектурная ошибка. Нарушение инкапсуляции.
2) Вы таки всерьёз сомневаетесь, что StartTransaction приведёт транзакцию в состояние Active?..
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136447
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗа использование TDataSet.Refresh (и тем более Requery) - отдельные люли.

конкретно в BDE или вообще? И почему ?
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136449
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЛезть к компонентам в другой форме - архитектурная ошибка

а лезть в TDatabase/TSQLConnection/youNameIt расположенном в другой форме/датамодуле?

а то так ведь потребуется для каждой формы своё соединение устанавливать...
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136461
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да это приложение имеет крайне далёкую от реальных систем архитектуру. По уму даже оконное приложение должно иметь архитектуру MVC.
Это ведь только пример работы с FireDac. Тут недавно множество вопросов было куда переходить с FibPlus.

Dimitry SibiryakovПожалуйста, не надо провоцировать данное поведение. Ибо хотя транзакция и стартует как закоммиченная, она всё же жива и имеет побочные эффекты в виде накопления блобов, например.
Счётчик транзакций расширен до 48 бит, так что лучше не мелочиться и делать правильно: создавать отдельные транзакции на отдельные логические куски работы. В вашем мышевозном примере - своя транзакция на каждую форму, которая стартует при открытии (или когда надо) и сразу завершается при закрытии (окончания фетча если компоненты позволяют) последнего связанного с ней датасета.

Возможно ты и прав. В FireDac датасет не обязательно очищается по коммиту.
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136468
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochконкретно в BDE или вообще? И почему ?
Лишний запрос на сервер.
В лучшем случае бесполезный (если Refresh стандартный и обновляет только текущую запись),
в худшем - вызывающий формирование нового result set-а, если осуществляется через
Close+Open+Locate.

Ariochа лезть в TDatabase/TSQLConnection/youNameIt расположенном в другой
форме/датамодуле?
Для мышевозников, увы, это меньшее зло.
По-хорошему соединение должно передаваться в форму, работающую с данными, как параметр.
В идеале - вся работа с БД должна осуществляться в отдельном классе, где этот объект
инкапсулирован до приватности и который обменивается с классами морды исключительно
бизнес-объектами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136474
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну короче - ORM наше всё :-)
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136475
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВ лучшем случае бесполезный

не факт, может увидеть новые записи закоммиченные другими пользователями
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136481
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисда это приложение имеет крайне далёкую от реальных систем архитектуру.

Ты это понимаешь, я это понимаю, а тысячи чайников будут тупо копипастить. Не люблю сидеть
на саппорте, хоть это и основной источник дохода. Допиливать такую банку со спагетти тоже
удовольствие ниже среднего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136488
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochне факт, может увидеть новые записи закоммиченные другими пользователями

Повторяю ещё раз, медленно: "если Refresh стандартный и обновляет только текущую запись".
Я не знаю как работает метод с этим названием в FireDUCK.
Ну и "видеть новые записи" это, конечно, может быть полезный побочный эффект, но лично я
не уверен, что ему место в таком неочевидном месте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136516
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже и текущую запись кто-то может изменить

и я тоже повторю

Dimitry Sibiryakovтем более Requery

Dimitry Sibiryakovв худшем - вызывающий формирование нового result set-а, если осуществляется через
Close+Open+Locate.

То есть практический смысл этого есть, лучше это или хуже ,чем явный вызов подряд close/open/locate - вопрос дискуссионный
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136518
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochдаже и текущую запись кто-то может изменить
Но этого уже никто никогда не увидит, поскольку строчкой выше эти изменения были навсегда
потеряны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136675
EvgErmak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял про общую читающую транзакцию

Всю жизнь использую для отдельного датасета на форме (типа справочника,журнала или отчета) отдельную транзакцию на чтение с параметрами

isc_tpb_read
isc_tpb_read_committed
isc_tpb_nowait
isc_tpb_rec_version

и для изменений

isc_tpb_write
isc_tpb_read_committed
isc_tpb_wait
isc_tpb_no_rec_version

Взято отсюда: http://www.devrace.com/ru/fibplus/articles/2169.php

А также два общих датасета для всего приложения, один для чтения чего-либо, другой для изменений...
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39136894
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Evgermak!
You wrote on 24 декабря 2015 г. 11:38:24:

Evgermak> Взято отсюда: http://www.devrace.com/ru/fibplus/articles/2169.php зачем тебе их личные заблуждения?
заблуждайся сам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39137062
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EvgErmakНе понял про общую читающую транзакцию

чего ты там не понял про общую читающую транзакцию? Хочешь делай общую, хочешь отдельную на каждый справочник. Ни кто не призывает делать в точности так как это описано в статье.

Там есть всего лишь демонстрация некоторых способов работы с FireDac. Именно с компонентами, а не как пример архитектуры приложения.

1. Читающая транзакция не обязана быть одной и общей. И не обязана быть RO RC. Просто такая транзакция не удерживает сборку мусора, а потому может быть длинной. Остальные транзакции должны быть короткими. Хотя как заметил DS это не всегда означает что не будет негативных эффектов.
2. В ряде случаев пишущая транзакция RC это зло.

Dimitry Sibiryakov,

я немного поменяю пример чтобы формы редактора не содержали логики.
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39137067
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТам есть всего лишь демонстрация некоторых способов работы с FireDac.
Именно с компонентами, а не как пример архитектуры приложения.
К сожалению, её будут рассматривать именно как пример архитектуры. И ТСы будут на неё
ссылаться в плане "я всё сделал как там написано, а база всё равно тормозит".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39140890
mkr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov - все были бы очень признательны за реальный пример какой-нибудь задачи!

Банально - отображение одной таблицы и модальное редактирование запись из неё.
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144575
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,
Где можно скачать полный версии исходников там только dpr а где pas?
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144587
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RADSeatle,

пока качай отсюда https://yadi.sk/d/fYMrhAk5mUCHV
позже обновятся на ibase
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144650
RADSeatle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо..
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144691
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Dimitry SibiryakovК сожалению, её будут рассматривать именно как пример архитектуры. И ТСы будут на неё
ссылаться в плане "я всё сделал как там написано, а база всё равно тормозит".


RADSeatleГде можно скачать полный версии исходников там только dpr а где pas?

Ну вот, началось...
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144695
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster,

ещё раз для всех. Там не пример архитектуры, а пример работы с FireDac. И даны приёмы как не держать длительных транзакций, какие уровни изолированности выбирать и т.д.
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144711
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Симонов Денис!
You wrote on 11 января 2016 г. 16:03:07:

Симонов Денис> даны приёмы как не держать длительных транзакций, какие уровни изолированности выбирать и т.д.
это уже "архитектура" приложения
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
АNN: Создание приложений для СУБД Firebird: FireDAC
    #39144722
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати у кого есть пожелания по улучшению внимательно выслушаю.
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / АNN: Создание приложений для СУБД Firebird: FireDAC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]