Продолжаем работу с базами данных. На этот раз, хотел бы рассмотреть фильтрацию данных в БД. Вообще, хотелось бы поговорить, для чего она предназначена, а также способы фильтрации данных, другими словами поиска данных в БД, с использованием технологии ADO.
Как, я уже говорил, на мой взгляд, фильтрация данных – это, грубо говоря, поиск данных. Но фильтрация данных проходит гораздо быстрее, чем обычный поиск по всей БД, с перебором каждой записи.
Давайте в этой статье и рассмотрим, как быстро можно осуществлять поиск данных, даже если БД имеет большой объем.
Ну, как я уже говорил, это фильтрация данных, кроме этого можно поиск организовать с помощью sql-запросов и с помощью функции Locate. Не забываем, что сейчас мы разговариваем про технологию ADO.
Давайте вернемся к нашему проекту, на форме у меня следующие компоненты:
- TADOConnection
- TADOQuery
- TDBGrid
- TButton
- TDataSource
Создадим в MS Access произвольную базу данных и таблицу в ней. У меня она получилась, следующей структуры:
Теперь необходимо сделать подключение к нашей БД, как это делать, мы рассматривали в данной статье, а также необходимо связать между собой компоненты. Для этого, выделяем компонент TADOQuery и в свойстве Connection, выбираем компонент TADOConenction. Далее, выделяем компонент TDataSource и в свойстве выбираем компонент TADOQuery. Затем, выделяем компонент TDBGrid и в свойстве DataSet выбираем компонент TDataSource. Все подключение к нашей БД настроено, теперь приступаем к поиску данных.
Первый способ
Фильтрация данных
Ну, тут много говорить не буду, уже итак все сказал, что фильтрация данных — это тот же поиск по определенному условию, который указывается в свойстве Filter, например
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Filtered:=True;
ADOQuery1.Filter:='names='+'''Andrey''';
end;
В данном свойстве, указывается поле, которое необходимо фильтровать и условия отбора. Работает достаточно быстро, при большом количестве записей. Не забываем, что его необходимо еще и активировать Filtered:=True
Второй способ
С помощью SQL-запросов
Ну, тут, я много ничего не буду говорить, так как мы много рассматривали подобных примеров, просто выбираем записи, по определенному условию, например:
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Test WHERE names=''Andrey''');
ADOQuery1.Active:=True;
end;
Тут будут найдены записи, которые полностью удовлетворяют условию, а чтобы были найдены записи, по начальному совпадению, то необходимо использовать LIKE, например:
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Test WHERE names LIKE ''%Andr%''');
ADOQuery1.Active:=True;
end;
Данным способом, будут выбраны все записи, которые начинаются на Andr.
Третий способ
С помощью функции Locate
Есть также, замечательная функция, которая позволяет также находить записи по неполному совпадению, например:
procedure TForm1.Button3Click(Sender: TObject);
begin
if ADOQuery1.Locate('names','Andr',[loCaseInsensitive,loPartialKey])=True then
begin
ShowMessage('True');
end;
end;
Ну вот такая небольшая заметка, по поиску данных в БД, с использованием ADO. Исходники выкладывать не буду, так как тут итак, думаю, все понятно.