
- •Практический раздел содержание
- •Лабораторная работа №1
- •Основные понятия диаграмм классов uml
- •Классы, атрибуты, операции
- •Категории связей. Связь-зависимость
- •Связи-обобщения и механизм наследования классов в uml
- •Связи-ассоциации: роли, кратность, агрегация
- •Получение схемы реляционной базы данных из диаграммы классов uml
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •3Апрос 6-2-1
- •3Апрос 6-2-2
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Создание макроса
- •Сведения о построителе макросов
- •Создание изолированного макроса
- •Создание группы макросов
- •Создание внедренного макроса
- •Изменение макроса
- •Использование условий для контроля за действиями макроса
- •Примеры условных выражений в макросах
- •Лабораторная работа №9
- •Описание
- •Порядок обработки элементов оператора select:
- •Конструкция where
- •Конструкция group by
- •Конструкция having
- •Конструкция order by
- •Seller (Продавцы)
- •Sale (Продажи)
- •Supplier (Поставщики)
- •Goods (Товары)
- •Model (Модели)
- •Custom (Заказ)
- •Простые запросы
- •Агрегатные функции
- •Лабораторная работа №10
- •Многотабличные запросы
- •Примеры многотабличных запросов
- •Подзапросы и многотабличные запросы
- •Лабораторная работа №11
- •Операторы манипулирования данными
- •Лабораторная работа №12
- •Лабораторная работа №13
- •Примеры
- •Синтаксис
- •Примеры
- •Лабораторная работа №14
- •Лабораторная работа №15
- •Лабораторная работа №16
- •Лабораторная работа №17
- •Лабораторная работа №18
- •Лабораторная работа №19
- •Работа с данными
- •Состояния и режимы набора данных
- •Поля и класс tField
- •Типы полей и типы данных
- •Сортировка
- •Навигация
- •Фильтрация
- •Редактирование
- •Добавление и удаление
- •Лабораторная работа №20
- •Лабораторная работа №21
- •Лабораторная работа №22
- •Лабораторная работа №23
- •Компонент dbCtrlGrid
- •Лабораторная работа №24
- •Импорт информации из Delphi в Word
- •1. Как определить установлен ли Excel
- •2. Как определить запущен ли Excel
- •3. Как вывести данные в Excel
- •Лабораторная работа №25
- •Поиск и фильтрация данных в Delphi
- •Общие положения
- •Поиск данных
- •Лабораторная работа №26
- •Лабораторная работа №27
- •Отчеты в Delphi
- •Лабораторная работа №28
- •Лабораторная работа №29
- •Лабораторная работа №30
- •Лабораторная работа №31
- •Лабораторная работа №32
- •Стандартные функции php для работы с MySql
- •Пример простейшей поисковой системы на php
- •Сортировка таблиц
- •Лабораторная работа №33
- •Работа с соединениями
- •Постоянные соединения с базами данных
- •Лабораторная работа №34
- •Создание бд и таблиц
- •Создание бд и таблиц с помощью php
- •Создание бд и таблиц с использованием phpMyAdmin
- •Лабораторная работа №35
- •Лабораторная работа №36
- •Применение информации о структуре таблицы
- •Лабораторная работа №37
- •Лабораторная работа №39
- •Роль сервера приложений: Настройка сервера приложений
- •Предварительная подготовка
- •Настройка сервера приложений
- •Параметры сервера приложений
- •Сводка выбранных параметров
- •Завершение работы мастера настройки сервера
- •Удаление роли сервера приложений
- •Дальнейшие действия: выполнение дополнительных задач
- •Подготовка данных для сервера приложений
- •Создание сервера приложений
- •Лабораторная работа №40
- •Создание локального клиентского приложения (на том же пк, что и сервер)
- •Удаленный клиент с использованием olEnterprise
- •Об удаленном клиенте с использованием dcom
- •Удаленный клиент с использованием ActiveForm
Сортировка
Изначально порядок расположения записей в наборе данных бывает неопределенным. Так, для таблиц одних СУБД (например, dBASE) записи располагаются в порядке поступления в файл таблицы, а в других (например, в Paradox) они сортируются по первичному индексу. Однако очень часто требуется вывести записи в определенном порядке, для чего используется сортировка данных.
Сортировкой называют упорядочивание записей по определенному полю в порядке убывания или возрастания в нем значений. Возможна также сортировка по нескольким полям одновременно. В таком случае сначала сортируется первое поле, затем группы записей с одинаковыми значениями в первом поле сортируются по второму полю, и т.д.
Для набора данных типа Table сортировка выполняется автоматически по выбранному индексу. Соответственно, если изменить индекс, например, при помощи свойств IndexFieldNames или IndexName, то записи будут упорядочены заново. В качестве значения для IndexName указывают имя индекса, а для IndexFieldNames указывают имена полей, из которых индекс состоит. Здесь следует отметить, что поскольку в таблицах Paradox первичный индекс не имеет имени, то для сортировки по нему можно использовать только свойство IndexFieldNames.
Если сортировку требуется провести по нескольким полям, то каждое из них должно быть включено в составной индекс. Из этого же следует, что при использовании компонента Table сортировка возможна только по индексированным полям.
ПРИМЕЧАНИЕ
Помимо компонента Table, для наборов данных имеется SQL-ориентированный компонент Query. В случае использования Query сортировка производится при помощи языка SQL и может проводиться по любым полям. Вопросы использования компонента Query и языка запросов SQL будут рассмотрены в следующей главе.
Для примера возьмем таблицу счетов и попробуем отсортировать ее по всем возможным индексам. Для этого нам понадобятся компоненты Table, DataSource и DBGrid, а так же RadioGroup. Для Table установим значение свойства DatabaseName в DATA1, TableName - в bill.db, а Active - в истину. После этого свяжем DBGridс Table через компонент DataSource.
Как видно, изначально данные отображаются точно так же, как хранятся в таблице - последовательно с 1 по 8-я запись (на самом деле, в данном случае это заслуга первичного индекса, построенного по полю BILL_ID). Теперь попробуем произвести сортировку по вторичным индексам - CUST_IDX и SECOND_IDX, определенных в структуре таблицы БД, для чего определим 3 варианта в группе переключателей, назвав их "по умолчанию", "индекс 1" и "индекс 2". Теперь в процедуре для события OnClick группы напишем следующий код:
case RadioGroup1.ItemIndex of
0: Table1.IndexName:='';
1: Table1.IndexName:='CUST_IDX';
2: Table1.IndexName:='SECOND_IDX';
end;
Если теперь запустить приложение и выбрать какой-либо вариант сортировки, то можно убедиться, что данные в таблице будут отсортированы по 1-му, 2-му, или 3-му столбцу, в зависимости от выбранного положения переключателя (рисунок 19.1).
Рисунок
19.1. Сортировка по сумме счета (индекс
SECOND_IDX)
Недостатком использования свойства IndexName в данном случае состоит в том, что для таблиц Paradox, как и в данном случае, не удастся задействовать поле с первичным индексом. В таком случае можно воспользоваться свойством IndexFieldNames, для чего добавим еще одну группу, на этот раз - из 4 переключателей, а в обработчике для нее напишем следующий код:
case RadioGroup2.ItemIndex of
0: Table1.IndexFieldNames:='';
1: Table1.IndexFieldNames:='BILL_CUST';
2: Table1.IndexFieldNames:='BILL_ID;BILL_CUST';
3: Table1.IndexFieldNames:='BILL_SUMM;BILL_CUST';
end;
Теперь в 2 случаях (варианты 2 и 3) можно производить сортировку по нескольким полям сразу. Так же следует отметить, что свойства IndexName и IndexFieldNames являются взаимоисключающими, т.е. если установить какое-либо значение для одного из этих свойств, значение другого автоматически сбрасывается. Исходный код этой программы находится в каталоге Demo\Part4\Sort.
Что касается направления сортировки - по возрастанию или по убыванию, то за это отвечает флаг ixDescending свойства Options определения индекса. Эти определения, в свою очередь, задаются через свойство IndexDefs.