Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка СУБД MySQL Borland Кузин.doc
Скачиваний:
96
Добавлен:
13.05.2015
Размер:
3 Мб
Скачать
☆
    1. Реализация поиска и фильтрации в базе. Программный доступ к элементам набора данных (форма «Проекты)

Отбор данных (поиск, фильтрация) в БД является наиболее распространенной операцией. Такая операция стандартно реализуется посредством SQL-запроса к базе. Однако, реализация такой операции в пользовательском интерфейсе возможна большим количеством разнообразных способов. В данном разделе приведен пример реализации поиска-фильтрации поставщика по наименованию с помощью компонента ComboBox. При этом преимуществом такого подхода является то, что одно и то же поле используется как для ввода подстроки поиска, так и для отображения и редактирования значения.

Создайте новую форму (Form4). Поместите на форму компонентыADODataSet,DataSource,DBGrid. Последний понадобится для отображения множества записей, найденных в результате операции фильтрации. Задайте значение свойстваCaptionкак «Проекты».

Значение свойства CommandTextкомпонентаADODataSet1 необходимо определить какselect * from projects. СвойствоConnectionкомпонентаADODataSet1 определить как Form1->ADOConnection1. При этом в модуль формыUnit4.cppдобавить директиву для включения заголовочного файла главной формы.

Поместите на форму компонент ComboBox, задав пустое значение для свойстваTextи значениеFalseдля свойстваAutoComplete:

Механизм поиска будет заключаться в динамическом формировании набора данных ADODataSet1 и элементов выпадающего спискаComboBoxпосредством формированияSQL-запроса с предикатомLIKE, где в качестве шаблона сравнения используется подстрока, введенная пользователем в полеComboBox1.

В инспекторе объектов найдите событие OnChangeкомпонентаComboBox1. Создайте обработчик события со следующим кодом:

//--------------------------------------------------------------void __fastcall TForm4::ComboBox1Change(TObject *Sender)

{

ADODataSet1->Close();

ADODataSet1->CommandText="select * from Projects where Project like '"+ComboBox1->Text+"%'";

ADODataSet1->Open();

AnsiString S="";

// Сохранение подстроки поиска в S

S=ComboBox1->Text;

ComboBox1->Clear();

// Заполнение выпадающего списка ComboBox1

for(int i = 0; i < ADODataSet1->RecordCount; i++)

{

ComboBox1->Items->Add(ADODataSet1->Fields->Fields[1]->AsString);

ADODataSet1->RecNo++;

}

// Очистка и перезапись подстроки поиска в поле ComboBox1

ComboBox1->Text="";

ComboBox1->Text=S;

// Установка курсора в конец подстроки в поле ComboBox1

ComboBox1->SelStart=S.Length();

ComboBox1->SelLength=0;

}

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

В инспекторе объектов найдите событие OnSelectкомпонентаComboBox1 и пустой обработчик события (это необходимо для того, чтобы выбранное из списка значение сохранялось в поле редактирования):

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

void __fastcall TForm4::ComboBox1Select(TObject *Sender)

{

//

}

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

Свяжите форму с пунктом «Проекты» меню главной формы и проверьте работу механизма поиска и фильтрации:

    1. Сортировка строк в компонентеDbGrid

Для того, чтобы реализовать сортировку строк в компоненте DBGrid(например, в форме «Проекты») по клику на заголовке соответствующего столбца необходимо добавить для событияOnTitleClickобработчик следующего вида:

void __fastcall TForm4::DBGrid1TitleClick(TColumn *Column)

{

if (ADODataSet1->Active)

if ((ADODataSet1->Sort.Pos(Column->FieldName)>0) &&

(ADODataSet1->Sort.Pos("ASC")>0))

ADODataSet1->Sort=Column->FieldName+" DESC";

else ADODataSet1->Sort=Column->FieldName+" ASC";

}