|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Всем привет, Мы начали публиковать цикл примеров для начинающих, посвященный работе с Firebird c использованием различных инструментов. Первый в очереди - Дельфи. Автор - Денис Симонов. Все статьи будут использовать одну и ту же структуру БД, и реализовывать примерно одинаковый функционал, фокусируясь на основных моментах разработки под Firebird. Большая просьба - посмотреть и прокомментировать, что можно улучшить. Если есть аккаут на Хабре - поддержите плюсом, пожалуйста. Создание приложений для СУБД Firebird с использованием различных компонент и драйверов: FireDac With best regards, Alexey Kovyazin Попробуйте HQbird - продвинутый дистрибутив Firebird ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 12:31 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
авторSPX – локальный протокол вообще-то, это сетевой протокол Novell Netware. И вырезан он был как бы не в 1.х вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 13:03 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Alexey KovyazinБольшая просьба - посмотреть и прокомментировать, что можно улучшить. Транзакция с такими параметрами в Firebird может быть открытой сколь угодно долгое время (дни, недели, месяцы) Пожалуйста, не надо провоцировать данное поведение. Ибо хотя транзакция и стартует как закоммиченная, она всё же жива и имеет побочные эффекты в виде накопления блобов, например. Счётчик транзакций расширен до 48 бит, так что лучше не мелочиться и делать правильно: создавать отдельные транзакции на отдельные логические куски работы. В вашем мышевозном примере - своя транзакция на каждую форму, которая стартует при открытии (или когда надо) и сразу завершается при закрытии (окончания фетча если компоненты позволяют) последнего связанного с ней датасета. За использование TDataSet.Refresh (и тем более Requery) - отдельные люли. Код: pascal 1.
Поздравляю, вы только что подвесили пишущую транзакцию в неопределённом состоянии при любой ошибке, не связанной с работой с БД. И, кстати, если не использовать Application.ShowException(E), а просто выбрасывать исключение дальше, код будет проще и, местами, предсказуемее. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8.
1) Лезть к компонентам в другой форме - архитектурная ошибка. Нарушение инкапсуляции. 2) Вы таки всерьёз сомневаетесь, что StartTransaction приведёт транзакцию в состояние Active?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 17:33 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЗа использование TDataSet.Refresh (и тем более Requery) - отдельные люли. конкретно в BDE или вообще? И почему ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:52 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovЛезть к компонентам в другой форме - архитектурная ошибка а лезть в TDatabase/TSQLConnection/youNameIt расположенном в другой форме/датамодуле? а то так ведь потребуется для каждой формы своё соединение устанавливать... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 18:53 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
да это приложение имеет крайне далёкую от реальных систем архитектуру. По уму даже оконное приложение должно иметь архитектуру MVC. Это ведь только пример работы с FireDac. Тут недавно множество вопросов было куда переходить с FibPlus. Dimitry SibiryakovПожалуйста, не надо провоцировать данное поведение. Ибо хотя транзакция и стартует как закоммиченная, она всё же жива и имеет побочные эффекты в виде накопления блобов, например. Счётчик транзакций расширен до 48 бит, так что лучше не мелочиться и делать правильно: создавать отдельные транзакции на отдельные логические куски работы. В вашем мышевозном примере - своя транзакция на каждую форму, которая стартует при открытии (или когда надо) и сразу завершается при закрытии (окончания фетча если компоненты позволяют) последнего связанного с ней датасета. Возможно ты и прав. В FireDac датасет не обязательно очищается по коммиту. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:01 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Ariochконкретно в BDE или вообще? И почему ? Лишний запрос на сервер. В лучшем случае бесполезный (если Refresh стандартный и обновляет только текущую запись), в худшем - вызывающий формирование нового result set-а, если осуществляется через Close+Open+Locate. Ariochа лезть в TDatabase/TSQLConnection/youNameIt расположенном в другой форме/датамодуле? Для мышевозников, увы, это меньшее зло. По-хорошему соединение должно передаваться в форму, работающую с данными, как параметр. В идеале - вся работа с БД должна осуществляться в отдельном классе, где этот объект инкапсулирован до приватности и который обменивается с классами морды исключительно бизнес-объектами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:06 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну короче - ORM наше всё :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:08 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ лучшем случае бесполезный не факт, может увидеть новые записи закоммиченные другими пользователями ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:09 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов Денисда это приложение имеет крайне далёкую от реальных систем архитектуру. Ты это понимаешь, я это понимаю, а тысячи чайников будут тупо копипастить. Не люблю сидеть на саппорте, хоть это и основной источник дохода. Допиливать такую банку со спагетти тоже удовольствие ниже среднего. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:11 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Ariochне факт, может увидеть новые записи закоммиченные другими пользователями Повторяю ещё раз, медленно: "если Refresh стандартный и обновляет только текущую запись". Я не знаю как работает метод с этим названием в FireDUCK. Ну и "видеть новые записи" это, конечно, может быть полезный побочный эффект, но лично я не уверен, что ему место в таком неочевидном месте. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:19 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
даже и текущую запись кто-то может изменить и я тоже повторю Dimitry Sibiryakovтем более Requery Dimitry Sibiryakovв худшем - вызывающий формирование нового result set-а, если осуществляется через Close+Open+Locate. То есть практический смысл этого есть, лучше это или хуже ,чем явный вызов подряд close/open/locate - вопрос дискуссионный ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:53 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Ariochдаже и текущую запись кто-то может изменить Но этого уже никто никогда не увидит, поскольку строчкой выше эти изменения были навсегда потеряны. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2015, 19:57 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Не понял про общую читающую транзакцию Всю жизнь использую для отдельного датасета на форме (типа справочника,журнала или отчета) отдельную транзакцию на чтение с параметрами 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 А также два общих датасета для всего приложения, один для чтения чего-либо, другой для изменений... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 05:41 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 11:38 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
EvgErmakНе понял про общую читающую транзакцию чего ты там не понял про общую читающую транзакцию? Хочешь делай общую, хочешь отдельную на каждый справочник. Ни кто не призывает делать в точности так как это описано в статье. Там есть всего лишь демонстрация некоторых способов работы с FireDac. Именно с компонентами, а не как пример архитектуры приложения. 1. Читающая транзакция не обязана быть одной и общей. И не обязана быть RO RC. Просто такая транзакция не удерживает сборку мусора, а потому может быть длинной. Остальные транзакции должны быть короткими. Хотя как заметил DS это не всегда означает что не будет негативных эффектов. 2. В ряде случаев пишущая транзакция RC это зло. Dimitry Sibiryakov, я немного поменяю пример чтобы формы редактора не содержали логики. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 13:25 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов ДенисТам есть всего лишь демонстрация некоторых способов работы с FireDac. Именно с компонентами, а не как пример архитектуры приложения. К сожалению, её будут рассматривать именно как пример архитектуры. И ТСы будут на неё ссылаться в плане "я всё сделал как там написано, а база всё равно тормозит". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2015, 13:29 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov - все были бы очень признательны за реальный пример какой-нибудь задачи! Банально - отображение одной таблицы и модальное редактирование запись из неё. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 22:52 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов Денис, Где можно скачать полный версии исходников там только dpr а где pas? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 14:23 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 14:35 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Спасибо.. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 15:22 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов Денис, Dimitry SibiryakovК сожалению, её будут рассматривать именно как пример архитектуры. И ТСы будут на неё ссылаться в плане "я всё сделал как там написано, а база всё равно тормозит". RADSeatleГде можно скачать полный версии исходников там только dpr а где pas? Ну вот, началось... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 15:46 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
DarkMaster, ещё раз для всех. Там не пример архитектуры, а пример работы с FireDac. И даны приёмы как не держать длительных транзакций, какие уровни изолированности выбирать и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 15:49 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 11 января 2016 г. 16:03:07: Симонов Денис> даны приёмы как не держать длительных транзакций, какие уровни изолированности выбирать и т.д. это уже "архитектура" приложения Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 16:03 |
|
|
start [/forum/topic.php?fid=40&msg=39136354&tid=1562386]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 423ms |
0 / 0 |