Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.07.2011, 09:27
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
Восклицание Упрощение взаимодействия с БД

Здравствуйте!
Есть крупный проект с СУБД 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  
Старый 15.07.2011, 12:17
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
можно ли обойтись без компонент FIBPlus или DataSource? Что КОНКРЕТНО делают эти компоненты? Опишите механизм их работы подробно, пожалуйста.

http://www.devrace.com/ru/fibplus/download/ самому погуглить слабо

DataSource стандартный компонент, без него никак, а ФИБы можно заменить другими

Цитата:
бывают ли компоненты графического интерфейса которые самостоятельно напрямую взаимодействуют с СУБД без необходимости в TFIBDataSet или DataSource ?
С вашими познаниями я бы не лез вообще что либо менять, а притормаживать может ещё и из-за неправильной настройки сервера.

Последний раз редактировалось Viajero, 15.07.2011 в 12:21.
Ответить с цитированием
  #3  
Старый 15.07.2011, 18:49
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Убери процки для выборки данных - читай прямо запросом из таблиц.
2. Грамотное использование индексов тоже может убыстрить выборку данных.

3. Использование ограничений (constraint) БД поможет избежать написания большого кол-ва кода предв. проверки данных.
4. Архитектура доступа к данным в Delphi основана на многослойной схеме. Есть компоненты, обеспечивающие непосредственно работу с данными (в твоем случае FIB). Есть визуальные компоненты. Ну и некоторый промежуточный слой (TDataSource), обеспечиваюший связь первых со вторыми. У меня на настройку визуальных компонентов обычно уходит минут 10 (по типам данных и указание соотв полей). Так что учите мат.часть.
Ответить с цитированием
  #4  
Старый 16.07.2011, 18:47
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

1. Вот я тоже думаю нахрен они нужны? Попробую.
2. Проблема скорости не в СУБД-БД, а в программе - перекидывании данных из одного компонента-объекта к другому. Индексация в БД есть.
4. Ну так вот проще было бы вместо TFIBDatabase+TFIBDataSet+DataSource+InterfaceCompo nent использовать только два TFIBDatabase + InterfaceComponent (включающий в себя DataSource и частично TFIBDataSet). Смысла в DataSource вообще никакого.
Ответить с цитированием
  #5  
Старый 16.07.2011, 21:30
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

2&4. Нет там никакого перекидывания. Реально данные из БД попадают сразу в TFIBDataSet и потом он обменивается ими с интерфейсными компонентами. а остальные компоненты (TFIBDatabase, TDataSource и т.д) просто хранят необходимые линки и обеспечивают подписку на разного рода события.
Ответить с цитированием
  #6  
Старый 17.07.2011, 12:59
delphicoding delphicoding вне форума
Активный
 
Регистрация: 04.07.2011
Сообщения: 206
Репутация: -461
По умолчанию

Сложно с такой заморчоенной архитектурой сразу оптимизировать. Попозже видимо займусь. Спасибо за ответы!

PS И всё же было бы интересно посмотреть на пункт "г" - небольшой пример САМОГО КОРОТКОГО (простого, удобного) взаимодействия "визуальное редактируемое поле в Delphi <-> хранимая процедура в Firebird" с использованием желательно только СТАНДАРТНЫХ компонент Delphi XE.

Последний раз редактировалось delphicoding, 17.07.2011 в 13:02.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:14.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025