КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Поиск записей6.2.1. FindKey– ищет в таблице по первичному или вторичному индексам запись, значения полей которой соответствуют значениям, заданным в параметрах. Заголовок метода имеет вид: function FindKey(const KeyValues: <массив констант или переменных>): Boolean; В параметре KeyValues через запятую перечисляются константы или переменные, определяющие значения полей поиска. Последовательность полей поиска соответствует полям установленного для компонента Table индекса или ключевым полям физической таблицы БД, если индекс не установлен. Если нужная запись найдена, FindKeyвозвращает значение True и делает текущей найденную запись, в противном случае возвращается значение False, и текущей остается та же запись, которая была до поиска.
Пусть таблица БД, представляемая компонентом Table1, содержит три поля: F_Id (S*), F_Date (D*) и F_Text (A). Для поиска в таблице могут использоваться, например, следующие обращения к методу FindKey: 1) Table1.FindKey([PId, '1.01.2001', PText), где PId – переменная целого типа, содержащая значение для поиска в поле таблицы F_Id; '1.01.2001' – константа; PText – переменная строкового типа, содержащая значение для поиска в поле таблицы F_Text. Если в таблице БД существует запись, поля F_Id, F_Date и F_Text, которой содержат указанные значения, то эта запись станет текущей. 2) Table1.FindKey([PId]), где PId – переменная целого типа, содержащая значение для поиска в поле F_Id. Если в таблице БД существует запись, поле F_Id которой содержит указанное значение, то текущей станет первая такая запись в соответствии с порядком первичного ключа. 3) Table1.FindKey([PDate]), где PDate – переменная типа TDate, содержащая значение для поиска в поле F_Date. Для таблицы Table1 должен быть установлен вторичный индекс, в котором первом полем является поле F_Date. Если в таблице БД существует запись, поле F_Date которой содержит заданное в переменной PDate значение, то эта запись станет текущей. Например, следующий фрагмент кода позволяет по вторичному индексу найти в таблице первую запись, относящуюся к введенной дате: // Установка вторичного индекса по полю F_Date Table1.IndexName:='Index_Date'; //Ввод значения даты для поиска в таблице PDate:=StrToDate(InputBox('Поиск по дате', 'Дата', '')); //Поиск записи if not Table1.FindKey([PDate]) then showmessage('Нет такой даты!') Else <обработка данных найденной записи>; Если нет первичного ключа, и не установлен ни один вторичный, то метод не работает! 6.2.2. FindNearest– алгоритм работы аналогичен методу FindKey, однако если в таблице не найдена запись, значения полей которой точно совпадают с заданными значениями параметров поиска, текущей становится следующая по порядку индекса запись. Метод реализован в виде процедуры и имеет следующий заголовок: procedure FindNearest(const KeyValues: <массив констант или переменных>); 6.2.3. Locate – ищет в таблице запись, значения заданных полей которой соответствуют значениям, заданным в параметрах поиска. Если нужная запись найдена, методвозвращает значение true и делает текущей найденную запись, в противном случае возвращается значение false и текущая запись не изменяется.
Заголовок метода имеет вид:
functionLocate(constKeyFields:String; constKeyValues:Variant;Options:TLocateOptions):Boolean; В параметреKeyFieldsчерез точку с запятой перечисляются имена полей поиска. В параметреKeyValues, если поиск осуществляются по одному полю, указывается константа или переменная, задающая значение поиска. Например, Table1.Locate('F_Date', '1.01.2001', []) или Table1. Locate('F_Date', PDate, []). Если поиск осуществляется по нескольким полям, в этом параметре с помощью конструкции VarArrayOfзадается совокупность переменных и констант, определяющих значения для поиска: Table1.Locate('F_Id;F_Text',VarArrayOf([PId, '1.01.2001']), []). КонструкцияVarArrayOf позволяет объединить в одну структуру разные типы данных. Последний параметр Options позволяет осуществлять для строковых полей частичный поиск или поиск без учета регистра. Если значения параметра не задано ([]), ищется запись с полным совпадением значений. Значение параметра loCaseInsensitive предполагает поиск без учета регистра, loPartialKey – поиск по начальным символам. Например, обращение к методу Table1.Locate('F_Text', 'информатика', [loCaseInsensitive]) позволит найти записи со значениями в поле F_Text «информатика», «Информатика», «инФорматика» и т.д. Обращение к методу Table1.Locate('F_Text', 'инфо', [loPartialKey]) найдет записи со значениями в поле F_Text «информатика», «информатизация», «информационные технологии» и т.д. Можно указать оба значения: Table1. Locate('F_Text', 'инфо', [loPartialKey, loCaseInsensitive]). Если нужная запись найдена, она становится текущей и функция возвращает значение True, в противном случае функция возвращает значение False. В тексте программы этот метод вызывается оператором Table1.Locate(<параметры>), где Table1 – имя компонента Table, связанного с таблицей БД, в которой происходит поиск. Например, для определения наличия товара с наименованием «молоко» в соответствующей таблице необходимо использовать следующий программный код: // В поле таблицы БД, связанной с компонентом Table1, ищется первая запись, которая в поле Name_Product содержит значение ‘молоко’ if Table1.Locate('Name_Product ', 'молоко ', []) then // Искомая запись найдена, она становится текущей Showmessage('Товар найден!') Else // Искомая запись не найдена, текущая запись не изменяется Showmessage('Товар не найден!')
|