Когда мы работаем с набором данных, нам часто необходимо фильтровать данные. Например: таблица данных с именем «Клиент» имеет поля CustNo, CustName, Country, Address, Phone, State, TaxRate и другие. Если вы хотите просмотреть только страну, Для записей о клиентах с Китаем или номерами клиентов более 1000 набор данных необходимо фильтровать. Вкратце, существуют следующие методы фильтрации:
1. Использование свойств фильтра TTable и TQuery.
1. Установите свойство Filter во время разработки.
Например, задайте для фильтра значение Country='China', а затем измените свойство Filtered на True (обратите внимание, что фильтрация эффективна только в том случае, если Filtered имеет значение True). Тогда вы сможете видеть только те записи, для которых соответствующее поле страны имеет значение «Китай».
Операторы, которые можно использовать при настройке фильтра: <, >, <=, >=, =, <>, AND, OR, NOT.
Например, если вы установите фильтр: CustNo>=1000 и CustNo<=5000, вы сможете видеть только записи о клиентах с номерами клиентов от 1000 до 5000.
2. Динамическая фильтрация во время работы программы.
Чтобы изменить свойство Filter во время работы программы, возможны две ситуации:
(1) Правая часть оператора представляет собой константу, например: Table1Filter:=’State’+’=’+’’’HI’’’;
Примечание. Строковые константы должны быть заключены в три пары одинарных кавычек.
(2) Правая часть оператора не является константой, это может быть значение, заданное переменной, или значение, заданное полем ввода. В это время вам нужно использовать функцию «Формат». Форма кода: Table1Filter:=Format('State'+'='+'''%S''',[StateValue]); где StateValue — строковая переменная, которой присвоено значение, и которая также может быть присвоена. быть в других формах, например: Edit1Text.
2. Используйте ApplyRange для фильтрации записей в наборе данных.
Выполнив следующий код, вы сможете видеть только записи клиентов с номерами клиентов от 1000 до 5000. Эту процедуру составляют несколько процессов:
ПрименитьRange, SetRangeStart, SetRangeEnd.
Таблица 1SetRangeStart;
Таблица1['CustNo']:=1000;
Таблица 1SetRangeEnd;
Таблица1['CustNo']:=5000;
Таблица 1ApplyRange;
Примечание. Этот процесс работает только с индексированными полями. Если вы хотите фильтровать данные на основе неиндексированных полей, вы можете использовать небольшую хитрость: создать поддельный индекс. Метод реализации: Table1.IndexFieldNames:=имя поля; Delphi также предоставляет простые методы вызова SetRangeStart, SetRangeEnd и ApplyRange, например: Table1.SetRange([Edit1.Text],[Edit2.Text]);
3. Используйте событие OnFilterRecord для фильтрации. Событие OnFilterRecord позволяет создавать программы фильтрации на основе неключевых полей, например:
PROcedureTForm1.Table1FilterRecord(DataSet:TDataSet;varAccept:Boolean);
начинать
Принять:=DataSet[’State’]=’CA’;
конец;
4. Операторы SQL с использованием элемента управления TQuery.
1.Операторы SQL не содержат переменных и параметров.
Выберите*от клиента
ГдеCustNo>=1000 и CustNo<=5000
2.Операторы SQL содержат параметры
Выберите*от клиента
ГдеCustNo>=:CustNo
Параметру CustNo присваивается значение во время выполнения.
3.Операторы SQL содержат переменные.
На данный момент код для добавления операторов SQL в элемент управления TQuery должен быть написан следующим образом:
Запрос1.Закрыть;
Запрос1.SQL.Очистить;
Query1.SQL.Add(Format('Select*fromCustomer'+''+'whereState='+'''%S''',[StateValue]));
Query1.Open; Среди четырех вышеперечисленных методов четвертый является самым мощным и наиболее гибким в использовании.