|
А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 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Кстати у кого есть пожелания по улучшению внимательно выслушаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 16:11 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов ДенисКстати у кого есть пожелания по улучшению внимательно выслушаю. Оформить приложение в виде образцово-показательного приложения Windows. Со стандартными менюшками (File, View, Help...), сплешскрином, окном About. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.01.2016, 22:23 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
ZeroMQ, ты ещё скажи руководство пользователя для этого написать ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 06:58 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов Денис Хотел спросить можно ли в такое сделать snapshot режиме Хочу заполнять в одной форме мастер и детайл сразу Пример Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 07:48 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
RADSeatleХотел спросить можно ли в такое сделать snapshot режиме можно. tmpdetail - это что ClientDataSet что ли? В FD можно использовать CachesUpdates не только для одной записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 07:57 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Понятно да это времменный датасет который заполняет ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2016, 08:02 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Подскажите если у меня 20 датасетов для них тоже надо создать отдельно WriteTransaction или один хватит для всех? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:28 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Radseatle! You wrote on 20 января 2016 г. 12:33:20: Radseatle> Подскажите если у меня 20 датасетов для них тоже надо создать отдельно WriteTransaction или один хватит для всех? абстрагируйся от датасетов. думай о том, что транзакции живут на сервере. а не в твоём приложении. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:33 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Не понял примерно так? то есть при нажатие кнопки dataset1.updatetransaction:=Datamodule.WriteTransaction dataset2.updatetransaction:=Datamodule.WriteTransaction dataset3.updatetransaction:=Datamodule.WriteTransaction Try Datamodule.WriteTransaction.Starttransaction dataset1.post; dataset2.post dataset3.post dataset1.applyupdates; dataset2.applyupdates; dataset3.applyupdates; dataset1.commit; dataset2.commit; dataset3.commit; Datamodule.WriteTransaction.CommitTranscation except Datamodule.WriteTransaction.rollback end ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 12:56 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
бурные аплодисменты. зал встаёт. скандирует. на сцену приглашается Денис. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:00 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:16 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
RADSeatle, 1. какой на фиг коммит у датасета. Наверное имелся ввиду CommitUpdates; 2. распихивать отложенные изменения через сразу в несколько датасетов это просто ад. Можно конечно, но в ряде случаев может быть высока вероятность конфликтов. Когда делаешь добавления это ещё ладно, но массовый апдейт нескольких записей... И ещё там точно надо прям использовать датасеты? Может проще использовать ХП, которые сами распихают в несколько табличек 3. Транзакций должно быть столько сколько нужно. Если у тебя несколько запросов должны быть выполнены в рамках одной транзакции, то нужно одну транзакцию. И ещё подумай что кроме транзакций БД существуют ещё так называемые бизнес-транзакции. Возможно не надо пытаться скрестить ужа и ежа. Мимопроходящий, такого я там не советовал ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:19 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 20 января 2016 г. 13:18:35: Kdv> почитай > http://www.ibase.ru/devinfo/ibx.htm#tran_use не катит же. у него ж сиэтл. и он читал статью Дениса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:19 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 20 января 2016 г. 13:20:11: Симонов Денис> Мимопроходящий, > > такого я там не советовала всё теперь. теперь ты в ответе за каждого хомячка которого приручил неофита прочитавшего твою статью и соорудившего своё мегаприложение по образу и подобию. зы: не рассматривай это как наезд :) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:22 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
RADSeatle, я так понимаю ты пытаешься одним действием добавить шапку документа и его строки. Так? Если уж решил так делать, то заметь, что DataSet.Post делается для каждой записи. Поэтому в режиме CachedUpdates Post не надо вносить в старт транзакции Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:35 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Симонов ДенисИ ещё подумай что кроме транзакций БД существуют ещё так называемые бизнес-транзакции. И в простейших случаях они обязаны совпадать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:44 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Мимопроходящийне катит же. у него ж сиэтл. и он читал статью Дениса. да пох. там FireDAC, тут IBX, все равно прямое управление транзакциями, так что концепцию можно использовать одну и ту же. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 13:55 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 20 января 2016 г. 14:00:59: Kdv> да пох. там FireDAC, тут IBX, все равно прямое управление транзакциями, > так что концепцию можно использовать одну и ту же.противник прогресса! ретроградный ортодокс! реакционерный ястреб! оголтелый мракобес! обскурантный палеофрон! в то время... когда наши... космические корабли... бороздят.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 14:06 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Спасибо всем ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 14:16 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Мимопроходящийретроградный ортодокс! реакционерный ястреб! оголтелый мракобес! обскурантный палеофрон! абстинентный синдром? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 15:08 |
|
АNN: Создание приложений для СУБД Firebird: FireDAC
|
|||
---|---|---|---|
#18+
Hello, Dbconstructor! You wrote on 20 января 2016 г. 15:45:42: Dbconstructor> абстинентный синдром?трансгрессивная идиосинкразия не люблю школьников даже кушать нэ магу Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 15:49 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562386]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
others: | 294ms |
total: | 484ms |
0 / 0 |