К сожалению, до сих пор опубликовано довольно мало материалов, посвященных практической работе в FireMonkey. Даже не смотря на то, что недавно была выпущена третья версия платформы и “новой” ее можно назвать с натяжкой. В данной серии постов мне хотелось бы детально описать полный цикл создания FireMonkey приложения, работающего с базой данных. Я преследую сразу две цели. Во-первых, создать пример для начинающих. Во-вторых, показать реальные возможности FireMonkey в том виде, в котором платформа существует сейчас.

Купить Delphi XE4 у официального реселлера. Скидка до 30-го июня
Выбор средств разработки
Исходя из означенных целей, я буду использовать Delphi XE4 в качестве средства разработки. SQLite в качестве СУБД. Для доступа к данным – FireDAC, который совсем недавно появился в составе Delphi. В качестве средства инструмента для управления БД SQLite – SQLite Administrator (по рекомендации Владислава Баженова, в блоге которого вы можете найти достаточно материалов по работе с SQLite в Delphi).
Задача
Для примера я выбрал не сложную прикладную задачу, которая предусматривает использования нескольких таблиц. Некий аналог хорошо известного приложения “Купи батон!”, служащего для ведения списков покупок. В данном варианте будет предусмотрен расширяемый список товаров и, собственно, списки покупок, в каждый из которых можно добавлять необходимые товары с указанием их количества и отметкой о факте покупки (куплен товар или нет). Проект предполагает поэтапное наращивание функционала и, возможно, перевод на другие платформы.
Разработка структуры БД
Я не стану детально описывать процедуру моделирования данных, этому вопросу посвящено достаточно много серьезных публикаций, которые читатели блога могут использовать при разработке собственных проектов. Я же набросал очень простую структуру.
Для хранения данных используется три таблицы: Product, ShopingList и List_Product.
В таблице Product хранится перечень всех возможных продуктов. Для хранения названий списков покупок и дат их формирования используется таблица ShopingList. Коды продуктов, входящих в список и их количество содержаться в таблице List_Product.
SQL код, предназначенный для формирования таблиц приведен ниже.
CREATE TABLE [List_Product] ( [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [ListId] INTEGER NOT NULL, [ProductId] INTEGER NOT NULL, [ProdNumb] NUMERIC NULL, [Complete] BOOLEAN NULL ); CREATE TABLE [Product] ( [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [Title] VARCHAR(50) NULL ); CREATE TABLE [ShopingList] ( [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, [Title] VARCHAR(25) NULL, [Dt] DATE DEFAULT CURRENT_DATE NULL );
В данном случае я не задавал в базе данных никаких ограничений целостности данных. На более поздних этапах разработки мы вернемся к этому вопросу.
Пока же запустите SQLite Administrator и создайте новую БД (DataBase | New), указав имя файла в который следует ее сохранить; вставьте приведенный выше текст SQL запроса и нажмите клавишу F8. Запрос будет выполнен, таблицы – созданы. Для того, что бы увидеть результат необходимо обновить список объектов базы (F5).
Создание Delphi проекта
Прежде чем приступать к работе непосредственно в Delphi необходимо установить FireDAC. Для тех, кто не читал предыдущих моих постов, напомню, что FireDAC это библиотека, позволяющая осуществлять доступ к InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix из Delphi и C++ Builder. Владельцы старших редакций Delphi (начиная с Enterprise) могут скачать установочный пакет с официально сайта Embarcadero. Владельцы же Delphi/RAD Studio Professional могут приобрести FireDAC отдельно.
После установки FireDAC создадим новый FireMonkey проект.
IDE Delphi XE4 внешне мало чем отличается от своих предшественников, за исключением, пожалуй, внешнего вида стартовой страницы. В меню File выберем пункт New| FireMonkey Desktop Application – Delphi.
В появившемся диалоге выбираем HD FireMonkey Application. Сразу после создания нового приложения я рекомендую произвести следующие действия:
- Переименовать главную форму (я обычно использую имя fMain).
- Сохранить в отдельную папку модуль главной формы, присвоив ему уникальное имя (я обычно использую имя uMain).
- Присвоить файлу проекта уникальное имя.
- Настроить опции автосохранения проекта (если это не было сделано раньше) меню Tools|Options (см. рисунок).
Поскольку приложение будет использовать компоненты доступа к БД, целесообразно использовать DataModule – специальный контейнер для компонентов доступа к данным. Для этого используем пункт меню File| New | Other и в появившемся диалоге выбираем Data Module. В данном случае я также рекомендую переименовать название формы и модуля (DM и uDM, соответственно).
Подключение к базе данных
Собственно, на этом подготовительный этап по созданию приложения можно считать законченным. И мы приступаем непосредственно к построению приложения. Для того, что бы обеспечить подключение к базе данных, прежде всего, следует разместить в Data Module компонент TADConnection. Двойной щелчок по компоненту вызывает диалог настройки подключения. Свойству DriverID следует указать значение SQLite. В качестве значения параметра DataBase укажите путь к сохраненной ранее базе. Проверьте правильность настроек (кнопка Test).
Закройте Connection Dialog с помощью кнопки Ok, подтвердив тем самым внесенные изменения. В инспекторе объектов измените значения свойства LoginPrompt на False. Для того, что бы активировать соединение с базой, установите значение свойства Connection в True. Это будет работать в режиме проектирования, но для того, что бы использовать TADConnection в Runtime этого не достаточно.
Для того, что бы полноценно использовать соединение при работе программы следует разместить на форме еще два компонента: TADPhysSQLiteDriverLink и TADGUIxWaitCursor. Свойство Provider последнего обязательно нужно установить в значение FMX.
Теперь мы можем проверить будет ли установлено соединение в Runtime.
Откройте главную форму приложения и подключите модуль uDM в список используемых модулей (это можно сделать нажав комбинацию клавиш Alt+F11). В исходном коде должна появиться строка
uses uDM;
Теперь поместите на форму кнопку TButton и напишите следующий обработчик события onClick.
procedure TfMain.Button1Click(Sender: TObject); begin DM.ADConnection1.Connected:= True; if DM.ADConnection1.Connected then ShowMessage('ADConnection is connected.'); end;
Если вы все сделали правильно, то при нажатии на кнопку во время работы программы компонент установит соединение с базой и будет выведено уведомление: “ADConnection is connected”.
Таким образом, мы установили соединение с SQLite базой данных. Как видите, процедура создания приложения и настройки соединения в FireMonkey не особо отличается от аналогичной процедуры в VCL. Однако, забегая вперед скажу, что дальнейший процесс разработки БД-ориентированных приложений с помощью FireMonkey будет содержать более существенные отличия, прежде всего, связанные с использованием механизма LiveBinding. Но об этом я планирую рассказать в следующей части публикации.
Александр, какими принципами Вы руководствуетесь, выбирая имена для таблиц?
http://delphi2010.ru/?p=1693 Ответил отдельным постом.
Таблицы должны были называться list_products, shopping_lists и shopping_list_items.
Ответил в отдельном посте.
Спасибо!