![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте!
Есть крупный проект с СУБД Firebird. Неудобство в том, что слишком длинный и замороченный путь данных - что замедляет разработку и сильно усложняет поиск ошибок. Схема такая: Firebird БД (data,tables,domains,generators,triggers,procedure s,etc) -> все выборки формируются прямо в СУБД при помощи Procedures -> из Delphi к БД обращение идёт из компоненты FIBPlus TFIBDataSet (InsertSQL,UpdateSQL,etc) -> затем сразу же передают данные в объект TDataSource -> затем в графических элементах форм назначается привязка к объектам TFIBDataSet или как правило TDataSource -> затем к каждой колонке визуальной таблицы нужно привязывать данные из выборки процедуры БД вручную указывая и настраивая каждое значение (DIRECTOR если в БД boolean то в интерфейсе это checkbox, если в БД DATE, то в интерфейсе тоже тип колонки Дата, итд)... ну и к тому же довольно много кода обработок и проверок в программе. 1. Цепочка длинная и много времени уходит между "созданием процедуры выборки в БД" и "привязкой всего в интерфейсе". Можно ли как-то упростить эту жуткую цепочку? 2. Ещё неприятность в том, что всё притормаживает на уже небольших выборках. Например если в БД 1000 записей, нужно отобрать из них 300 - длится это ~3секунды на новейших Core-i5... имхо это уже многовато и дальше будет только тормознее. а) можно ли обойтись без компонент FIBPlus или DataSource? Что КОНКРЕТНО делают эти компоненты? Опишите механизм их работы подробно, пожалуйста. б) бывают ли компоненты графического интерфейса которые самостоятельно напрямую взаимодействуют с СУБД без необходимости в TFIBDataSet или DataSource ? в) или по крайней мере графические компоненты, которые при назначении некой группы данных (процедуры СУБД или TFIBDataSet или DataSource) способны самостоятельно разобрать какие будут данные и оптимизировать под них таблицу сразу назначив все переменные и типы полей? г) один добрый человек с этого форума сделал пример взаимодействия Delphi-Firebird, но опять таки использовал некие нестандартные компоненты IBC, кто сможет сделать небольшой пример САМОГО КОРОТКОГО (простого, удобного) взаимодействия "визуальное редактируемое поле в Delphi <-> процедура в Firebird" с использованием желательно только СТАНДАРТНЫХ компонент Delphi XE. |
#2
|
||||
|
||||
![]() Цитата:
http://www.devrace.com/ru/fibplus/download/ самому погуглить слабо DataSource стандартный компонент, без него никак, а ФИБы можно заменить другими Цитата:
Последний раз редактировалось Viajero, 15.07.2011 в 12:21. |
#3
|
|||
|
|||
![]() 1. Убери процки для выборки данных - читай прямо запросом из таблиц.
2. Грамотное использование индексов тоже может убыстрить выборку данных. 3. Использование ограничений (constraint) БД поможет избежать написания большого кол-ва кода предв. проверки данных. 4. Архитектура доступа к данным в Delphi основана на многослойной схеме. Есть компоненты, обеспечивающие непосредственно работу с данными (в твоем случае FIB). Есть визуальные компоненты. Ну и некоторый промежуточный слой (TDataSource), обеспечиваюший связь первых со вторыми. У меня на настройку визуальных компонентов обычно уходит минут 10 (по типам данных и указание соотв полей). Так что учите мат.часть. |
#4
|
|||
|
|||
![]() 1. Вот я тоже думаю нахрен они нужны? Попробую.
2. Проблема скорости не в СУБД-БД, а в программе - перекидывании данных из одного компонента-объекта к другому. Индексация в БД есть. 4. Ну так вот проще было бы вместо TFIBDatabase+TFIBDataSet+DataSource+InterfaceCompo nent использовать только два TFIBDatabase + InterfaceComponent (включающий в себя DataSource и частично TFIBDataSet). Смысла в DataSource вообще никакого. |
#5
|
|||
|
|||
![]() 2&4. Нет там никакого перекидывания. Реально данные из БД попадают сразу в TFIBDataSet и потом он обменивается ими с интерфейсными компонентами. а остальные компоненты (TFIBDatabase, TDataSource и т.д) просто хранят необходимые линки и обеспечивают подписку на разного рода события.
|
#6
|
|||
|
|||
![]() Сложно с такой заморчоенной архитектурой сразу оптимизировать. Попозже видимо займусь. Спасибо за ответы!
PS И всё же было бы интересно посмотреть на пункт "г" - небольшой пример САМОГО КОРОТКОГО (простого, удобного) взаимодействия "визуальное редактируемое поле в Delphi <-> хранимая процедура в Firebird" с использованием желательно только СТАНДАРТНЫХ компонент Delphi XE. Последний раз редактировалось delphicoding, 17.07.2011 в 13:02. |