SQL инструкции. Агрегатные функции из клиента Delphi.

О том, что такое агрегатные функции SQL, я писал в другом посте. Там более менее подробно разобрал работу этих функций на примере клиента MySQL.exe.

В данном посте посмотрим как можно пользоваться агрегатными функциями СУБД MySQL из клиента Delphi. Итак, начало клиента в Delphi у меня получилось таким…

1

На этот раз соединение с MySQL сделал по технологии DBExpress, но не через SimpleDataSet, а через ClientDataSet (для разнообразия). Получилась более длинная цепочка, но и ClientDataSet обладает большими возможностями.  В частности, нам нужно будет создавать агрегатные поля, а это умеет ClientDataSet, в то время как SimpleDataSet – не умеет.

Единственное, что долго искал при подключении – как соединить ClientDataSet с предыдущим компонентом, оказалось, через свойство ProviderName.

Итак, по шагам, что нам нужно, чтобы создать агрегатное поле в Delphi. Жмем правой кнопкой мыши на ClientDataSet и заходим в FieldEditor…

2

Жмем на белом поле правой кнопкой и далее New Field…

3

 

В следующем окне выбираем Aggregate, а также заполняем другие поля – Name, поле Component заполнится автоматически. Жмём Ок. То есть Delphi будет воспринимать агрегатное поле как компонент, к которому мы, в дальнейшем сможем обратиться.

4

 

В объектном инспекторе находим наше поле как компонент

5

 

Свойства Active и Visible ставим в True. Далее, описываем нашу агрегатную функцию в свойстве Expression. Я выбрал SUM (SalesAmount), где SalesAmount имя поля таблицы моей базы данных с типом данных INT.

Вывод значения агрегатного поля

Итак, попробуем вывести значение агрегатного поля в Label1, в обработчик нажатия кнопки, я поставил такой код…

Label1.Caption:=label1.Caption+’  – ‘+ClientDataSet1MyAggField.AsString;

В результате, получилось так…

6

Итак, если проделать ряд действий, то можно отобразить агрегатное поле прямо в DBGrid… таблице – отдельной колонкой

7

Для этого нужно правой кнопкой мыши нажать на DBGrid1, зайти в Coloumns Editor, добавить колонку и в свойстве FieldName этой колонки прописать имя созданного агрегатного поля…

8

 

На данном моменте пост про агрегатные поля в Delphi заканчиваю. Стоит отметить свойство Grouping Level. Вот что я нашёл, по данным сайта.

Свойство

property GroupingLevel: Integer;

Задает уровень группировки полей набора данных при вычислении. При значении 0 расчет проводится для всех записей набора данных. При значении 1 записи группируются по первому полю набора данных и расчет осуществляется для каждой группы. При значении 2 записи разбиваются на группы по первому и второму полям и т. д.

Однако группировка по уровням выше нулевого возможна, только если в наборе данных используется индекс по группирующим полям. Например, если свойство GroupingLevel = 2 и набор данных начинаются с полей СustNo и orderNo, в свойстве indexName компонента набора данных и свойстве

 

Добавить комментарий