Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_7.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
223 Кб
Скачать
☆

7.7 Выполнение поиска по некоторому параметру

Поиск можно реализовать с помощью компонентов TADOTable, TADOQuery.

Для поиска в компоненте TADOTable есть свойство Filter. В нем можно указывать условие, по которому будут отображаться данные.Чтобы фильтр заработал, нужно установить значения свойств TADOTable:

Свойство значение

Filtered true

Filter текст условия в виде Поле [оператор сравнения]’значение’

Например, если нужно отобразить все записи таблицы tovar, в которых название товара (поле title-tovar) равно значению «ватман», то нужно записать:

ADOTable1->Filter="title_tovar=’ватман’";

Для возможности изменения фильтра, можно использовать строку ввода TЕdit. Поместить на форму дополнительно компонент Tedit1, где вводятся названия товара, и кнопку - «Фильтрация по названию товара». В этом случае поиск задается программно и будет иметь вид:.

void __fastcall TForm2::Button1Click(TObject *Sender)

{

ADOTable1->Filtered=False;

ADOTable1->Filter="title_tovar='"+Edit1->Text+" '"; //фильтр

ADOTable1->Active=True; //активизируется таблица

ADOTable1->Filtered=True; //включается фильтр

}

Значение нужно указывать в одинарных кавычках (апострофы), а строк ввода заключается в кавычки, поэтому условие имеет вид '"+Edit1->Text+". Это конструкция будет использоваться и дальше.

7.8 Использование языка запросов sql для поиска

Если просто вписать запрос в свойство SQL компонента ADOQuery и его не изменять в течение всей программы, то такой запрос называется статическим. Но если в течение выполнения программы надо изменять текст запроса, то это динамический запрос.

Например, надо выбрать поля title_tovar, price_tovar (название товара и цена товара) из таблицы tovar, где поле title_tovar равно названию определенного товара. Если запрос задать на этапе проектирования, то свойство SQL компонента ADOQuery принимает следующее значение:

Свойство значение

SQL select * from tovar where title_tovar =”ватман”

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

В этом случае удобнее в запрос ввести переменную и изменть ее и запросы задавать на этапе программирования.

Поместить на форму компоненты, как показано на рисунке 3. Edit1 – для ввода названия товара, Label4 - для вывода количества товаров с указанным наименованием.

Код для поиска указанного товара имеет вид

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Add("select title_tovar, price_tovar from tovar where title_tovar='"+Edit1->Text+"'");

ADOQuery1->Open();

Label4->Caption=IntToStr(ADOQuery1->RecordCount);

}

Рисунок 3

Компоненты TADOTable и TADOQuery имеют свойство RecordCount – количество строк в таблице.

Усложним задачу: в компоненте Edit1 указывается название товара, по которому производится поиск, а в компоненте Edit2 – дата покупки.

На форму поместить компоненты, как показано на рисунке 4.

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Text="Select tovar.title_tovar, tovar.price_tovar, orders.qty_order, orders.date_order from tovar,orders where tovar.title_tovar='"+Edit1->Text+"' and orders.date_order='"+Edit2->Text+"' and orders.id_tovar=tovar.id_tovar";

ADOQuery1->Open();

}

Если в запросе используется оператор select, то используется метод Open().

Если в запросе удаляются строки или изменяется структура столбца (в запросе есть такие операторы , как INSERT, UPDATE, DELETE или и CREATE TABLE), необходимо вызвать метод ExecSQL компонента ADOQuery. То есть, если запрос возвращает данные, то достаточно активировать компонент, а если изменяет, то запрос нужно выполнить с помощью ExecSQL, Open() не использовать.

Например, чтобы удалить строку в таблице, можно записать следующий код обработчика

{

ADOQuery1->SQL->Clear();

ADOQuery1->SQL->Text="Delete tovar where id_tovar='"+Edit1->Text+"'";

ADOQuery1->ExecSQL();

}

Рисунок 4

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]