Программирование компонента TADOTable
Проделав вышеописанные операции, мы получили небольшое, но уже довольно серьезное приложение, позволяющее в полной мере работать с нашей базой. Однако анализировать имеющиеся данные несколько затруднительно. Неплохо было бы добавить в программу поиск записей и фильтрацию по определенным критериями.
Для начала поиск. Для этого у компонента TADOTable предусмотрено множество функций:
TADOTable.Locate(const AnsiString KeyFields, const System::Variant &KeyValues, TLocateOptions Options); Ищет в ключевом поле, заданном в переменной KeyFields, значение переменной KeyValues. В случае если совпадение найдено, найденная запись становится текущей, т.е. курсор устанавливается на нее. В переменной Options указывается как преобразовывать значения для поиска может быть: loCaseInsensitive или loPartialKey.
TADOTable.Seek(const Variant &KeyValues, TSeekOption SeekOption =soFirstEQ); Используется при поиске с помощью индексов. SeekOption определяет как поступать если запись найдена: soFirstEQ, soLastEQ, soAfterEQ , soAfter, soBeforeEQ, soBefore. Подробное описание их вы найдете в мануале.
TADOTable.LookUp (const AnsiString KeyFields, const Variant &KeyValues, const AnsiString ResultFields); Возвращает в качестве результата набор типа Variant со значениями всех найденных значений, удовлетворяющих запросу.
Существует еще несколько способов поиска информации в таблице: перебор всех элементов вручную, использование FindFirst, Next и т.д. Но мы перечислили только основные и необходимые, на мой взгляд, методы.
Приведем пример использования метода Locate. Поместите на форму компонент TComboBox, TButton и TEdit, занесите в КомбоБокс названия всех полей вашей таблицы (для этого используется свойство Items). В Edit мы будем вводить значение необходимое для поиска, а из ComboBox выбирать поле, по которому осуществлять поиск.
Теперь дважды щелкните по Button или выберите событие OnClick в инспекторе объектов.
Впишете в него следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOTable1->Locate(ComboBox1->Text,Edit1->Text,[loCaseInsensitive]);
//здесь по указанному в Combo полю ищем значении из Edit. Все просто
//loCaseInsensitive - это поиск без ориентации на строчные и прописные буквы
}
Видите, для организации простого поиска достаточного всего одной строчки кода.
Настало время добавить в наш проект фильтрацию. Добавить еще один TEdit и TButton на форму. Для понимания принципа этого будет достаточно. И разберите вот этот код:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ADOTable1->Filtered=false; // Отменяем предыдущую фильтрацию если была
ADOTable1->Filter=Edit2->Text; // Выставляем критерий фильтрации
ADOTable1->Filtered=true; // И снова включает фильтрацию
}
Объясню, что может вводиться в Edit2. Мы создали некий очень далекий аналог командной строки. Вот шаблон, по которому работает фильтрация:
<имя поля> |параметр (=,>,<,>=,<= и т.д.)| <значение>
Вот пример:
ФИО = Иванов Иван Петрович
В результате в таблице останутся только записи где, поле ФИО имеет значение "Иванов Иван Петрович" без внесения физических изменений в таблицу.
Do'stlaringiz bilan baham: |