
Наиболее известная задача, которую приложения решают, работающие именно с базами данных – представляет собой поиск нужных записей по заданному нами критерию. В Дельфи, компоненты ADOExpress в себя включают способы поиска записей, которые являются фактически полностью идентичными к тем, используются которые в BDE...
Давайте в этом посте рассмотрим разные варианты поиска данных разработки ADO-приложений в среде программирования Дельфи.
В большинстве случаев, алгоритм поиска по следующей схеме строится – сам поиск начинается с начала таблицы, далее в каждой строке проверяем поле на вопрос удовлетворения критерию нашему, далее цикл на записи нами выбранной останавливаем.
Попробуем рассмотреть парочку методов расположения данных, которые полученные из БД с помощью компонента под названием ADODataset (предназначен он для Таблицы и для Запроса).
Locate
Данный универсальный способ поиска, текущую запись устанавливает именно как первую строку, которая удовлетворяет критерии поиска.
Используя способ Locate мы без проблем искать можем значения одного либо двух и более полей, которые расположенные в самом массиве переменных.
В коде, который мы привели ниже, способ Locate первую запись ищет, которая содержит строку под названием 'Zoom' в поле 'Name'.
В том случае, когда вызов Locate сам возвращает True - то найдена и установлена запись именно как текущая.
AdoTable1.Locate('Name','Zoom',[]);
{...либо...}
var ffield, fvalue: string;
opts : TLocateOptions;
ffield := 'Name';
fvalue := 'zoom';
opts := [loCaseInsensitive];
if not AdoTable1.Locate(ffield, fvalue, opts) then
ShowMessage(fvalue + ' not found in ' + ffield);
Lookup
Методика Lookup курсор и вовсе не перемещает в аналогичную строку, а возвращает лишь значение её.
Lookup массив переменных возвращает, которые содержат значения из полей, которые и есть указанные в списке имён разделённом точкой с запятой, значения которых обьязательно быть должны возвращены из строки, которая нас интересует. Когда соответствующих запросу нашему строк вообще не найдено, то Lookup пустую переменную вернёт.
Приведенный пример заполняет сам массив переменных LookupRes
var LookupRes: Variant;
LookupRes := ADOTable1.Lookup
('Name', 'Zoom', 'Author; Description');
if not VarIsNull(LookupRes) then
ShowMessage(VarToStr(LookupRes[0])) // здесь имя автора
Одними из плюсов методов Locate и Lookup, является то, что не нужно им проиндексированности таблицы. Но, все же, функция Locate работать будет быстрее, когда таблица проиндексирована будет.
Индексирование
Индексирование, нам находить и сортировать помогает записи довольно быстро.
Вы спокойно создавать можете индексы, которые основанные на 1 поле или 2 и более полях. Индексирование же сразу нескольких полей, Вам дает возможность различать именно те записи, в которых может первое поле то же самое иметь значение.
В большом количестве случаев при очень частом поиске/сортировке, сильно желательно поля индексировать.
К примеру, в том случае, когда ищете Вы некий тип приложения в Type-поле, то можете Вы индекс создать на данное поле для возможности ускорения поиска именно по типу.
Также обьязательно следует сказать, что таблицы первичный ключ проиндексирован автоматически, к тому же не можете Вы поля индексировать с типом данных OLE Object.
А также, внимание здесь нужно обратить, что в том случае, когда многие из значений в поле одинаковые, то в этом случае индексирование, сам процесс получения данных из БД вообще не ускорит.
Продолжение в статье - Как правильно делать поиск в ADO? Часть 2
+0