Министерство образования Республики Беларусь
Учреждение образования
«Брестский государственный технический университет»
Кафедра ЭВМиС

Лабораторная работа №3
по базам данных, знаний и экспертных систем
«Поиск и отбор данных»

Выполнил:
студент 3 курса,
факультета ЭИС,
группы Э-47

Проверила:

Брест 2013г.

Цель работы: получить навыки по организации поиска и отбора данных в создаваемой БД.

Задание:

Создать форму для просмотра данных таблицы. Дополнить форму элементами управления (создать интерфейс) для реализации следующих действий:

1) Организовать поиск записи по ключевому значению с помощью метода Locate компонента TTable.

//

void __fastcall TForm1::Button1Click(TObject *Sender)

{

TLocateOptions SearchOptions;

SearchOptions. Clear();

SearchOptions << loCaseInsensitive << loPartialKey;

Table1->Locate(RadioGroup1->Items->operator [](RadioGroup1->ItemIndex),Edit1->Text, SearchOptions);

}

//

void __fastcall TForm1::FormActivate(TObject *Sender)

{

RadioGroup1->ItemIndex=0;

}

//

2) Задать любое условие отбора данных в таблице (например: найти книги указанного автора).

Установить фильтр двумя способами:

- свойство Filter компонента TTable (при Filtered = True)

- событие OnFilterRecord

Организовать интерфейс для ввода условия фильтрации с клавиатуры.

Предоставить пользователю возможность перемещаться между записями, удовлетворяющими фильтру, при отключенной фильтрации. (Методы FindFirst, FindLast, FindNext, FindPrior).

//

void __fastcall TForm1::Button2Click(TObject *Sender)

НЕ нашли? Не то? Что вы ищете?

{

AnsiString str="[Номер камеры]=";

str. Insert(Edit2->Text, str. Length()+1);

Table1->Filtered=true;

Table1->Filter=str;

}

//

void __fastcall TForm1::Button8Click(TObject *Sender)

{

Table1->Filter="";

Table1->Filtered=false;

}

//

void __fastcall TForm1::Table2FilterRecord(TDataSet *DataSet, bool &Accept)

{

Accept=(DataSet->FieldValues["Номер заключенного"]>=StrToIntDef(Edit4->Text,0)) && (DataSet->FieldValues["Номер заключенного"]<=StrToIntDef(Edit5->Text,));

}

//

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Table2->FindFirst();

}

//

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Table2->FindNext();

}

//

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Table2->FindPrior();

}

//

void __fastcall TForm1::Button7Click(TObject *Sender)

{

Table2->FindLast();

}

//

3) Создать еще два индексных файла (индексация по ключу существует по умолчанию) с помощью Dekstop - Restructure - Secondary Index

I - по любому полю, кроме ключевого.

II - по двум полям; (при этом внести записи в таблицу таким образом, чтобы в первом поле были повторяющиеся значения).

Добавить на форму кнопки, обработчиком события OnClick которых является установка текущего индекса.

//

void __fastcall TForm1::Button9Click(TObject *Sender)

{

Table1->IndexName="date";

}

//

void __fastcall TForm1::Button10Click(TObject *Sender)

{

Table1->IndexName="num";

}

//

void __fastcall TForm1::Button11Click(TObject *Sender)

{

Table1->IndexName="";

}

//

4) Осуществить поиск записей по условию п.2 в проиндексированном файле с помощью метода FindKey, неточный поиск с помощью метода FindNearest. Дополнить форму полем ввода данных для поиска. Организовать инкрементальный локатор с помощью метода FindNearest для поиска записи.

//

void __fastcall TForm1::Button12Click(TObject *Sender)

{

Table1->FindKey(&TVarRec(Edit6->Text),0) ;

}

//

void __fastcall TForm1::Button13Click(TObject *Sender)

{

Table1->FindNearest(&TVarRec(Edit6->Text),0) ;

}

//

5) Отфильтровать записи в проиндексированном файле используя методы SetRange, CancelRange.

//

void __fastcall TForm1::Button14Click(TObject *Sender)

{

AnsiString strr1, strr2;

strr1=Edit7->Text;

strr2=Edit8->Text;

if(strr1=="\0")

strr1="0";

if(strr2=="\0")

strr2="";

Table1->SetRange(&TVarRec(strr1),0,&TVarRec(strr2),0);

}

//

void __fastcall TForm1::Button15Click(TObject *Sender)

{

Table1->CancelRange();

}

//

Вывод: получил навыки по организации поиска и отбора данных в создаваемой БД.