Блог Александра Божко
Архивы
Рубрики
Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Создание FireMonkey приложения с использованием FireDAC. #0

Создание FireMonkey приложения с использованием FireDAC. #0.5

В предыдущих частях этой мини-серии мы разобрались с созданием базы, ее структурой и подключением к ней из Delphi. В этой части я предлагаю разобраться с отображением данных из таблиц, начав с самого простого случая.

Простой редактор данных в таблице, обычно является частью комплексного приложения. Для редактирования таблиц я обычно использую отдельную форму. Начнем со списка продуктов.  Прежде всего, нам необходимо создать DataSet для доступа к данным таблицы. В нашем случае вполне можно воспользоваться компонентом TADTable. Поместим его в DataModule и укажем значение свойства Connection. В редакторе свойства TableName появится список таблиц, из которого выбираем таблицу Products. Если вы все сделали правильно, то сможете присвоить свойству Active значение True. Компонент лучше сразу переименовать (например, ADTProduct). После этого я, обычно, создаю для DataSet’а набор полей. Вызываем редактор полей (двойное нажатие мыши на компоненте) и в контекстном меню выбираем пункт Add All Fields.

(в настоящее время ссылка не доступна)

Для тех, кто не в курсе поясню суть данной операции. Здесь мы создаем предустановленный набор полей DataSet’a. Если мы этого не сделаем вручную в режиме проектирования, то, в принципе, ничего страшного не произойдет. В RunTime этот набор будет создан автоматически. Но я, все же, предпочитаю создавать его вручную. Причин тому несколько. Во-первых, так удобнее управлять набором полей, ведь мы можем создавать дополнительные (вычисляемые или lookUp) поля самостоятельно в режиме проектирования. Можем так же менять свойства самих полей. А кроме того, мы получаем возможность обращаться в коде к полям по имени компонента TField, что, на мой взгляд, существенно упрощает написание кода.

Как и в случае с VCL приложением, подключим к набору данных компонент TDataSource. Этот компонент обеспечит связь между набором данных и визуальными элементами управления. Свойство DataSet компонента должно ссылаться на наш набор данных (ADTProduct). Ниже я привожу фрагмент DFM файла

 

  object ADTProduct: TADTable
    IndexFieldNames = 'ID'
    Connection = ADConnection
    UpdateOptions.UpdateTableName = 'Product'
    TableName = 'Product'
    Left = 64
    Top = 192
    object ADTProductID: TADAutoIncField
      FieldName = 'ID'
      Origin = 'ID'
      ProviderFlags = [pfInWhere, pfInKey]
      ReadOnly = True
    end
    object ADTProductTitle: TStringField
      FieldName = 'Title'
      Origin = 'Title'
      Size = 50
    end

  object dsProduct: TDataSource
    DataSet = ADTProduct
    Left = 120
    Top = 192
  end

Обратите внимание на одну любопытную особенность, файл формы DataModule сохраняется не в формате FMX, как обычная FireMonkey форма, а в формате DFM, как и в VCL.

Следующим шагом будет создание процедуры открытия набора данных, которую мы должны будем вызывать в RunTime при запуске программы. Создадим ее в том же DataModul’е. Код процедуры предельно прост:

procedure TDM.ConnectToDB;
begin
  ADConnection.Open();
  ADTProduct.Open();
end;

Вызов процедуры разместим в обработчике события OnCreate для DataModule.

Теперь, собственно, нужно определиться с интерфейсной частью проекта. На главной форме приложения будут выводиться списки покупок с расшифровкой. Кроме этого там будет размещаться меню. Справочник продуктов будет вызываться в отдельной форме.

Начнем с меню. Помимо реализации навигационных функций продуманное меню позволяет очертить функционал разрабатываемого приложения. В нашем случае, базовый функционал приложения не слишком велик. Однако, ничто не мешает расширить его в дальнейшем.

Поместим на главной форме компонент TMainMenu. Как и в VCL редактор пунктов вызывается после двойного нажатия. Не буду описывать процедуру создания пунктов меню, она проста и так же фактически мало чем отличается от того, как это происходит в VCL.

(в настоящее время ссылка не доступна)

 

На начальном этапе я добавил всего три рабочих пункта меню, один из которых и должен вызывать редактор продуктов, для реализации которого создадим новую FireMonkey форму (File|New|FireMonke Form Delphi).

Я рекомендую сразу же переименовать форму (я назвал ее fProducts) и сохранить ее. Кроме этого следует настроить некоторые ее свойства. Фрагмент FMX файла приведен ниже.

 

 

object fProducts: TfProducts
  Left = 0
  Top = 0
  Caption = 'Products'
  ClientHeight = 480
  ClientWidth = 640
  Position = poMainFormCenter
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [dkDesktop, dkiPhone, dkiPad]
  DesignerMobile = False
  DesignerWidth = 0
  DesignerHeight = 0
  DesignerDeviceName = ''
  DesignerOrientation = 0

Обратите внимание на новое свойство FormFactor.

Так же сразу подключим наш модуль данных DM в список используемых модулей. Для этого можно использовать комбинацию  клавиш Alt+ F11.

Автоматически сгенерируется следующий код:

uses uDM;

Далее следует ненадолго вернуться к главной форме и точно так же подключить к ней вновь созданную форму fProducts. Соответственно, для пункта меню “Products” необходимо создать такой обработчик события OnClick:

 

 fProducts.ShowModal;

Вновь вернемся на форму fProducts. В отличие от VCL, FireMonkey не использует каких-либо специальных компонентов для отображения данных. Вместор этого используется специальный механизм – LiveBinding. Справочник продуктов будет простейшим примером, иллюстрирующим его использования. Для отображения данных о продуктах разместим на форме компонент TGrid. Временно определим значение свойства Align – alTop. После этого вызовем контекстное меню компонента и выберем пункт  Bind Visually…  В нижней части формы появится LiveBindings Designer.

(в настоящее время ссылка не доступна)

 

В редакторе схематически изображены объекты: набор данных из модуля данных DM и Grid. Все это некоторым образом напоминает заготовку для диаграммы классов. Обратите внимание, что набор данных содержит и перечень полей, в качестве атрибутов.

Свяжите с помощью перетаскивания символ * Grid’а с символом * набора данных. Произойдет примерно следующее:

(в настоящее время ссылка не доступна)

Картинка кликабельна.

На диаграмме отобразится установленная связь. В гриде появятся столбцы с данными (если вы внесли в соответствующую таблицу какие-то данные). В нижней части формы разместим компонент TBindNavigator. И свяжем его с источником данных аналогичным образом.

(в настоящее время ссылка не доступна)

Теперь мы можем запустить приложение и с помощью главного меню вызвать редактор продуктов.

(в настоящее время ссылка не доступна)

Если вы все сделали правильно, то без проблем сможете с помощью навигатора добавлять записи в таблицу и менять названия продуктов прямо в Grid.

Настроить положение контролов на форме вы можете самостоятельно, на функциональность это не повлияет. Как видите, механизм LiveBindings позволяет связывать наборы данных и визуальные контролы в FireMonkey почти так же просто, как и в “классических” приложениях VCL.

В следующей части данной серии я планирую более подробно рассказать о LiveBindings и возможностях, которые предоставляет этот механизм.

 


Поделись с другими!
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика