- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Сортировка и фильтрация
Сортировка записей в наборе данных Table идет только по текущему индексу. Для его задания у компонента Table существуют два взаимозаменяемых свойства IndexName, задающее имя индекса, и IndexFieldNames, задающее через точку с запятой индексные поля. Если индекс задаваемый свойствами IndexName или IndexFieldNames не существует, то появится сообщение об ошибке.
Получить доступ к полям в составе текущего индекса можно с помощью свойства IndexFields. На количество полей индекса указывает свойство IndexFieldCount. Для доступа ко всем индексам, определенных для таблицы, используется свойство IndexDefs.
Фильтрация – задание ограничений для записей, отбираемых в набор данных, бывает по выражению и по диапазону.
Фильтрация по выражению применима к любым полям, но так как в процессе отбора просматриваются все записи таблицы, этот метод эффективен при небольшом количестве записей. Для активизации фильтра используется свойство Filtered: если установить его в True – фильтрация включена, иначе – выключена. Для задания выражения фильтра используется свойство Filter. Значения свойства Filter задает условие на поля набора данных и набор данных будет содержать только те поля которые удовлетворяют ему. Правило построения условий такие же как и у условного оператора IF, например:
Table1.Filter:='(Name>=''А'' and Name<''Г'')';
Обратите внимание, как вставляется кавычка в текстовую константу (при задании значения свойства через Object Inspector кавычка вставляется обычным образом, без удвоения).
Можно указать параметры фильтрации – свойство FilterOptions:
-
foCaseInsensitive – регистр букв не учитывается, т.е. слова 'Иванов', 'ИВАНОВ', 'ивАнов' будут восприняты как одинаковые;
-
foNoPartialCompare – выполняется проверка на полное соответствие. Если известны только первые символы строки, то нужно указать их, заменив остальные звездочками и выключить эту опцию. Например, фильтр Name='Ив*' отберет записи, содержащие в поле Name значения 'Ив', 'Иванов', 'Иванова', 'Ивашов' …
Фильтрация по диапазону включает в набор данные, значения которых попадают в заданный диапазон. Эта фильтрация идет по текущему индексу и за счет этого выполняется быстрее. Включение/выключение этого метода фильтрации происходит методами ApplyRange и CancelRange. Чтобы задать верхнюю и нижнюю границу диапазона используйте методы SetRangeStart и SerRangeEnd соответственно и затем присвойте нужные значения полям фильтра. Пример:
procedure TForm1.Button1Click(Sender: TObject);
begin
with Table1 do begin
IndexName:='indNameBirthday';{выбираем текущий индекс}
SetRangeStart; {задаем начало диапазона}
FieldByName('Name').AsString:='А'; { Имя от “А”…}
FieldByName('BirthDay').AsString:='01.01.80'; {и день рожденья не раньше чем 01.01.80}
SetRangeEnd; { задаем конец диапазона }
FieldByName('Name').AsString:='Б'; { Имя …до “Б”}
ApplyRange; {включаем фильтрацию}
end;
end;
-
Поиск записей
Поиск записи, удовлетворяющей определенным условиям, означает переход на эту запись
Функция Locate ищет записи с заданными значениями полей. Если удовлетворяющие условиям поиска записи существуют, то текущей становится первая из них и функция возвращает значение True, иначе – значение False и смены текущей записи не происходит. Первым параметром функции Locate задается список имён полей, по которым ведется поиск. Если полей несколько, то они разделяются точкой с запятой. Второй параметр типа Variant содержит значения этих полей для поиска. При поиске по нескольким полям, для приведения значений к типу вариантного массива используйте функцию VarArrayOf. Значения должны разделяться запятыми и быть заключены в квадратные скобки, порядок и количество значений должны соответствовать порядку и количеству полей в первом параметре. Третий параметр Locate задает опции поиска:
-
loCaseInsensitive – регистр букв не учитывается;
-
loPartialKey – допускается частичное совпадение полей.
Примеры поиска по одному и нескольким полям: