Как сделать сортировку в делфи бд

Обновлено: 04.07.2024

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

' width='8' height='8' /> Фильтрация и сортировка в базах данных на Delphi 7

Собственно намучался я уже. подскажите как сделать фильтрацию и сортировку базы данных на BDE.

Собственно намучался я уже. подскажите как сделать фильтрацию и сортировку базы данных на BDE.

У меня тоже возникла проблемка с сортировкой!
ОГРОМНОЕ СПАСИБО автору выше написанного ответа, сортировка работает!

Сегодня будем создавать в RAD Studio Delphi библиотеку классов, реализующих сортировку списков однотипных объектов.

Цель задачи

Прикладной разработчик должен получить инструмент для создания дочерних классов, в которых можно:

  • оперировать с объектами списка;
  • применять различные правила сравнения объектов;
  • применять различные алгоритмы сортировки объектов.
  • прикладному разработчику сортировать любой из 100 объектов любым из 100 методов сортировки;
  • дорабатывать и поддерживать новые алгоритмы или новые типы объектов в течении одного дня силами одного специалиста.
  • Количество алгоритмов сортировки — 100;
  • Типы объектов доступных для сортировки — 100;
  • Количество разработчиков, одновременно работающих с библиотекой, для создания типов объектов и алгоритмов сортировки — 100.
  • Время разработки всех алгоритмов сортировки и типов объектов — 2 дня.

Приступаем

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

Сравнение объектов

Чтобы понять, какой элемент набора данных больше другого, для базовых типов необходимо применять оператор сравнения. А как быть с объектами? Базовый модуль System.Generics.Defaults включает в себя нужный нам интерфейс и реализацию класса


В интерфейсе видим единственный метод Compare вида


На входе два параметра типа объект, а на выходе целое число (0 — объекты равны, -1 — первый меньше второго, 1 — первый больше второго).

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


А класс TComparer(T) как раз служит для сравнения двух объектов путем вызова метода Compare.
Можно использовать сравнение по умолчанию (Default), или создать свой метод сравнения Construct, чем мы и займемся.

Для удобства описание всех объектов будем хранить в отдельном модуле AllObjects. Здесь же будем хранить описание всех 100 созданных нами объектов.

Операции с объектами

Для осуществления операций с объектами списка в Delphi уже имеется нужный нам параметризированный класс, он же дженерик, с нужными нам методами


Вообще, универсальные параметризированные типы (дженерики) появились еще в Delphi 2009, но для нашего примера я использую RAD Studio Berlin 10.1 UPD1. Если у вас что-то не компилируется, нужно будет допилить пример для своей версии Delphi.

Пишем основной класс нашей библиотеки наследник TList(T)


Основной метод нашей задачи SortBy, опишем его использование далее.

Сортировка объектов

Пишем класс TAllSort, который содержит описание всех 100 методов сортировки вида:


На входе метод получает массив данных из списка, метод сравнения объектов, начальную позицию для сортировки, количество элементов в наборе. На выходе получаем количество произведенных в наборе данных перестановок.


Для удобства, все методы сортировки будем держать в отдельном модуле SortMethods.

Демонстрация

Здравствуйте у меня возникла проблема. Нужно осуществить сортировку по возрастанию для конретных полей т.е допустим по дате рождения или Фамилии при нажатии кнопки осуществляется сортировка. Я сделал так

при нажатии кнопки сортировка по фамилии Всё сортирует вопросов нет Но когда закрываю приложение или отправляю отчет в word то сортировка не сохраняется и значения в таблице располагаются так как располагались до сортировки можно конечно использовать событие onshow но это не выход помогите пожалуйста сделать чтобы сортировка сохранялась буду вам весьма признателен!


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

Как, я уже говорил, на мой взгляд, фильтрация данных – это, грубо говоря, поиск данных. Но фильтрация данных проходит гораздо быстрее, чем обычный поиск по всей БД, с перебором каждой записи.
Давайте в этой статье и рассмотрим, как быстро можно осуществлять поиск данных, даже если БД имеет большой объем.
Ну, как я уже говорил, это фильтрация данных, кроме этого можно поиск организовать с помощью sql-запросов и с помощью функции Locate. Не забываем, что сейчас мы разговариваем про технологию ADO.

Давайте вернемся к нашему проекту, на форме у меня следующие компоненты:

Создадим в MS Access произвольную базу данных и таблицу в ней. У меня она получилась, следующей структуры:


Теперь необходимо сделать подключение к нашей БД, как это делать, мы рассматривали в данной статье, а также необходимо связать между собой компоненты. Для этого, выделяем компонент TADOQuery и в свойстве Connection, выбираем компонент TADOConenction. Далее, выделяем компонент TDataSource и в свойстве выбираем компонент TADOQuery. Затем, выделяем компонент TDBGrid и в свойстве DataSet выбираем компонент TDataSource. Все подключение к нашей БД настроено, теперь приступаем к поиску данных.

Первый способ

Фильтрация данных

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

В данном свойстве, указывается поле, которое необходимо фильтровать и условия отбора. Работает достаточно быстро, при большом количестве записей. Не забываем, что его необходимо еще и активировать Filtered:=True

Второй способ

С помощью SQL-запросов

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

Тут будут найдены записи, которые полностью удовлетворяют условию, а чтобы были найдены записи, по начальному совпадению, то необходимо использовать LIKE, например:

Данным способом, будут выбраны все записи, которые начинаются на Andr.

Третий способ

С помощью функции Locate

Есть также, замечательная функция, которая позволяет также находить записи по неполному совпадению, например:

Ну вот такая небольшая заметка, по поиску данных в БД, с использованием ADO. Исходники выкладывать не буду, так как тут итак, думаю, все понятно.

Похожие записи:

Всем здравствуйте, в этой статье я хотел бы снова обратить внимание на Базы данных, а в частности работа с Базами данных по технологии ADO. Когда пользователь создает приложение на Delphi, работающего с СУБД, к которой присоединяется по технологии ADO, то к фа.

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

Ну вот не долго думая, подошла вторая часть по работе с ADO в DELPHI на примере БД — MS Excel. В данной статье мы рассмотрим добавление и редактирование данных, так как с удалением тут возникли проблемы, в связи с тем, что данный драйвер не поддерживает удален.

Читайте также: