Перейти к содержанию
Fire Monkey от А до Я
  • 0

Самый простой способ работы с SQLite


Rusland

Вопрос

Сделал тестовое приложение на основе этой статьи 

Сколько же тут телодвижений, это же кошмар.

Вот например список компонент:

    FDConnection1: TFDConnection;
    FDQueryCreateTable: TFDQuery;
    FDQuery1: TFDQuery;
    FDQueryInsert: TFDQuery;
    FDQueryDelete: TFDQuery;
    BindSourceDB1: TBindSourceDB;
    BindingsList1: TBindingsList;
    FDGUIxWaitCursor1: TFDGUIxWaitCursor;
    FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink;

Зачем так много FDQuery (create отдельно, select отдельно, insert отдельно, delete отдельно)? Раньше работал только компонентами FibPlus, БД Firebird, так там одного датасета было достаточно. А тут целый набор. Страшно представить что будет, если таблиц несколько.

BindSourceDB1, BindingsList1 - насколько необходимы эти связующие биндинги? 

Назначение FDGUIxWaitCursor1, FDPhysSQLiteDriverLink1 вообще не понимаю :)

 

Нет ли способа полегче и быстрее подцепить sqlite базу и работать с ней? Какой нужен минимальный набор компонент? Можно ли использовать только один FDQuery и просто менять ему SQL?

 

Сам проект

Изменено пользователем Rusland
Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Модераторы

Самый минимум, который я обычно использую: FDConnection1 и FDQuery1, все запросы в базу я описываю прямо в коде. Это не самый лучший подход, лучше максимально постараться не смешивать SQL код с Delphi/С++ кодом, так мне думается будет намного лучше читабельность кода. Опять же, куча разных FDQuery сделана для удобства, т.е. код для базы не будет смешиваться с кодом программы.

Ссылка на комментарий
  • 0

Ну, FDGUIxWaitCursor1, FDPhysSQLiteDriverLink1 - один раз повесили рядом с FDConnection, настроили и забыли - не особая и проблема (за универсальность чем-то платить всегда приходится).

Query? Ну, используйте FDTable. Если ничего из ряда вон выходящего не нужно - будет прекрасно работать.

 

LiveBinding (BindSourceDB1 и т. д.) - тут все сложнее... Эта технология предназначена для замены TDataSource. Суть в чем? B VCL мы используем TDataSource, но при этом все контролы, работающие с источником данных, - специальные. DBGrid, DBComboBox и т.д. В обычный ComboBox, иначе как руками данные из источника не запихать.

Здесь же с помощью LiveBinding практически любой контрол можно связать с источником данных. Делается это в визуальном редакторе, а потом дотачивается руками. И не важно, какой набор компонентов доступа к данным вы используете (хоть FireDAC, хоть UniDAC. хоть Fib'ы). Если вы хотите "как VCL", то проблема не в FireDAC, проблема в отсутствии специальных контролов, для работы с данными. Единственная альтернатива LiveBinding сегодня - вытаскивать данные и "заполнять" контролы вручную (кстати, я так и делаю). Это не будет проще, но определенные преимущества есть.

Изменено пользователем Alex Bozhko
Ссылка на комментарий
  • 0

Единственная альтернатива LiveBinding сегодня - вытаскивать данные и "заполнять" контролы вручную (кстати, я так и делаю). Это не будет проще, но определенные преимущества есть.

я юзаю LiveBinding, почти привык. Все просто. Правый клик на контроле и Лайвбайндокно. Раз юзаете ФМХ то на экране всяко найдте место под лайвбайнд дизайнер(глючный правда порой :), у меня сразу справа от кода, не мешает. Ничего в ручную не загружаю все - автомат. ImageIndex (imagelist) вообще сказка, да и сам битмап что юзают местные ветераны с XE5 тоже четко отражается из БД - налету, просто мышкой связал и все. Там где динамичный грид нужен, т.е. гибкое кол-во полей то сами поля создать в гриде придеться конечно, но это не данные грузить, это заголовок всего навсего. Так что вполне нормальная фича, но нужна привычка кое где. 

Пожалуй главное в чем может проиграть Лайвбанд так это в коннекте, он же может оборваться ). В этом случае я чуток извращаюсь через ClientDataset+CDSProvider+вашдатасет, и тогда мне сессия в онлайне и не нужна. Фильтрацию юзаю локальную в св-ве ClientDataset.filter и через Close+Open. Все стабильно вроде у меня.

Изменено пользователем rustam_d
Ссылка на комментарий
  • 0
вытаскивать данные и "заполнять" контролы вручную

 

я тоже поступаю именно так

люблю знаете-ли понимать и контролировать, что происходит, а магия LiveBinding очень глубока и неизвестна

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

Ссылка на комментарий
  • 0

 

вытаскивать данные и "заполнять" контролы вручную

 

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

 

это вы о чем? что вы по имени ищете?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...