Мобильные приложения и dbExpress

dbExpress при создании мобильных продуктов: когда этот выбор оправдан, а когда нет
При разработке мобильного приложения на Delphi (Android/iOS) перед разработчиком встаёт вопрос: какой механизм взаимодействия с базой данных использовать. Классический dbExpress — один из кандидатов, но в мобильной среде его позиции сильно отличаются от десктопных. Рассмотрим, чем он принципиально отличается от FireDAC, прямых сокетных запросов и связки с TClientDataSet, и кому такой путь принесёт пользу, а кому — только головную боль.
Принципиальное отличие dbExpress от FireDAC и других библиотек
Главный водораздел — подход к управлению подключениями и кэшированием. dbExpress изначально проектировался как лёгкий слой-обёртка для прямого SQL доступа без собственного кэша. В отличие от FireDAC, который имеет мощный внутренний кэш, локальные таблицы и встроенные адаптеры для многих СУБД, dbExpress работает в строгом режиме однонаправленных курсоров. Для мобильного устройства это означает, что вы не можете просто «открыть запрос и гулять по записям вперёд-назад» — вы обязаны самостоятельно организовать хранение данных (через TDataSetProvider + TClientDataSet или собственную модель).
Если вы привыкли к удобству FireDAC, где TFDQuery может свободно скроллить, искать и редактировать записи в оперативной памяти, то dbExpress покажется вам архаичным и неудобным. Однако это же качество даёт одно преимущество: минимальный расход ресурсов процессора и памяти, если вы строите архитектуру, где данные передаются порциями, а не загружаются целиком.
Сравнительная таблица: dbExpress vs FireDAC vs прямой SQL (через socket/rest)
| Критерий | dbExpress | FireDAC | Прямой HTTP/Socket API |
|---|---|---|---|
| Объём бинарника приложения | Минимальный (несколько сотен КБ дополнительных .so) | Значительный (включает парсеры, кэш, мапперы) | Зависит от HTTP-клиента (обычно мал) |
| Сложность первоначальной настройки | Средняя (требует ручного создания провайдера и клиентского набора) | Низкая (всё готово в одном компоненте) | Высокая (написание сериализации, авторизации, обработка ошибок) |
| Поддержка скроллинга и редактирования | Нет на уровне курсора (только через внешний TClientDataSet) | Полноценная (встроенный кэш) | Зависит от реализации (обычно ручное) |
| Производительность на медленных соединениях | Высокая (не загружает лишнего) | Средняя (есть избыточность из-за внутреннего кэша) | Высокая (контроль каждого запроса) |
| Поддержка мобильных СУБД (SQLite, InterBase ToGo) | Ограниченная (драйверы не все обновляются) | Широкая (все популярные мобильные БД) | Зависит от серверной части |
| Кроссплатформенность (Android+iOS) | Да (через ARM-версии библиотек) | Да (нативная поддержка) | Да (если сервер кроссплатформенный) |
Кому стоит выбрать dbExpress, а кому — нет
Для кого dbExpress — подходящий инструмент:
- Вы пишете мобильный клиент для уже существующего десктопного приложения, построенного на dbExpress, и хотите сохранить единую кодовую базу работы с данными (например, использовать общий модуль с вызовом TSQLQuery).
- У вас минималистичное приложение, которому не нужен кэш и навигация по результатам запроса — просто отправили запрос, получили JSON, отобразили.
- Вы ограничены в размере установочного пакета (например, корпоративные требования — не более 10 МБ без дополнительных загрузок). В этом случае dbExpress даёт выигрыш в размере библиотек.
Кому лучше пройти мимо:
- Вы только начинаете мобильную разработку на Delphi — FireDAC даст меньше сюрпризов, поскольку встроенная справка, больше примеров и активная поддержка.
- Ваше приложение использует сложные операции с данными: многоуровневые откаты, кэширование изменений, офлайн-режим с синхронизацией. dbExpress не предоставляет этих механизмов — их придётся писать вручную.
- Вы планируете использовать современные мобильные СУБД вроде Realm или Couchbase Lite — dbExpress с ними не работает, а FireDAC имеет некоторые адаптеры.
- Важно актуальное обновление драйверов: dbExpress последних версий Delphi (с 2022 года) получает только критический фиксинг, в то время как FireDAC активно развивается.
Реальный сценарий использования dbExpress в мобильном проекте
На практике dbExpress чаще всего применяют в паре с TSQLConnection и TClientDataSet, работающими через TDataSetProvider. Такой тандем даёт возможность скроллинга и редактирования, но добавляет дополнительный уровень: все изменения сперва попадают в кэш-провайдера, а затем отправляются в БД. Для мобил это означает, что при большом объёме данных (например, таблица из 10 тысяч строк) приложение может тормозить при открытии формы из-за единовременной загрузки. В отличие от этого, FireDAC умеет загружать данные порциями (FetchOptions), что для мобильного устройства куда дружелюбнее.
Ещё один важный момент — лицензирование. В поставке Delphi dbExpress идёт без дополнительных сборов, в то время как для FireDAC не требуется дополнительных лицензий, но некоторые сторонние компоненты (например, IBDAC) требуют покупки. Если команда уже имеет опыт работы с dbExpress на десктопе и не хочет изучать новую библиотеку, это может быть единственным рациональным оправданием его использования в мобильном проекте.
Практические рекомендации 2026 года
На 2026 год dbExpress для мобильных приложений не является рекомендуемой технологией номер один. Если вы не связаны жёсткими ограничениями по размеру библиотек или обратной совместимостью с легаси-проектом, выбирайте FireDAC. Он быстрее в разработке, лучше документирован и имеет активное сообщество. Однако для специфических случаев (сверхлёгкий клиент с однонаправленными запросами) dbExpress остаётся рабочим инструментом — просто возьмите его, только если чётко понимаете, зачем отказываетесь от современных альтернатив.
Добавлено: 27.04.2026
