Министерство образования Республики Беларусь
Учреждение образования
«Брестский государственный технический университет»
Кафедра ЭВМиС
Лабораторная работа №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();
}
//
Вывод: получил навыки по организации поиска и отбора данных в создаваемой БД.


