Функции для поиска и перемещения в таблице VFP
« Назад Функция BOF([nWorkArea | cTableAlias])возвращает .T., если выполнена попытка установить файловый указатель перед первой записью таблицы, или .F. – в противном случае. Установить файловый указатель в начало таблицы может, например, команда SKIP, выполняемая с отрицательным параметром. Пример. Выводятся фамилии авторов, занесенные в записи 10, 9, …, 1 таблицы . close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors select Authors if Reccount( ) < 10 go bottom else goto 10 endif do while not Bof( ) ? Author skip -1 && Переход на предыдущую запись enddo Функция EOF([nWorkArea | cTableAlias])возвращает .T., если выполнена попытка установить файловый указатель вслед за последней записью таблицы, или .F. – в противном случае. В частности, EOF( ) вернет .T., если поиск командами FIND, LOCATE или SEEK оказался нерезультативным. Функция вернет .F., если в области таблица не открыта, и сгенерирует ошибку, если указан неиспользуемый псевдоним cTableAlias. Пример. Перебираются все записи таблицы Authors. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors select Authors do while not Eof( ) ? Author skip 1 && Переход на следующую запись enddo Функция LOOKUP(ReturnField, eSearchExpression, SearchedField [, cTagName])ищет первую запись таблицы, значение поля SearchedField которой отвечает заданному выражению eSearchExpression. Возвращает, если запись найдена, значение, имеющееся в поле ReturnField, или пустую строку, длина которой равна длине поля ReturnField. Тип результата совпадает с типом поля ReturnField. Если поиск удачен, то LOOKUP( ) перемещает таблицу на найденную запись. Если неудачен, то таблица позиционируется в конце файла, где EOF( ) возвращает .T. Если LOOKUP( ) применяется для поиска в родительской таблице, то файловые указатели дочерних таблиц в результате поиска перемещаются на соответствующие записи. Функция не использует рашмор-оптимизацию. Параметры: ReturnField – поле, значение которого в случае успешного поиска возвращает функция LOOKUP( ). eSearchExpression – искомое значение. Обычно – это значение, которое может хранить поле SearchedField. Также выражение может соответствовать индексному выражению активного индекса или активного тега составного индекса. SearchedField – поле, в котором ищется eSearchExpression. Если таблица не имеет активного индекса и если опущен параметр cTagName, то функция LOOKUP( ) выполняет последовательный поиск. Если имеется активный индекс или тег, индексное выражение которого – это SearchedField, то LOOKUP( ) использует этот индекс или тег (выполняет бинарный поиск) ускоряя тем самым получение результата. cTagName – имя тега составного индекса, используя который LOOKUP( ) осуществляет бинарный поиск. Замечание. Если поиск выполняется не в текущей таблице, поля ReturnField и SearchedField должны предваряться псевдонимом таблицы-объекте поиска.. Пример 1. Возвращается значение поля InputDate таблицы Authors для записи, имеющей AuthorId = 14. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors inDate = Lookup(Authors.InputDate, 14, Authors.AuthorId, "AuthorId") ? inDate && Напечатает: 11.21.2004 && Напечатает фамилию автора, хранимую в найденной записи ? Authors.Author Пример 2. Выводятся названия книг, написанных автором с AuthorId = 14. close databases open database d:\HomeLibrary\HomeLibrary.dbc use Authors in 0 use Books in 0 use BooksAuthors order tag AuthorId in 0 select BooksAuthors auIdSearched = 14 if Seek(auIdSearched) then do while BooksAuthors.AuthorId = auIdSearched and not Eof( ) ? Lookup(Books.Book, BooksAuthors.BookId, Books.BookId, "BookId") skip && Переход к следующей записи enddo else auName = Lookup(Authors.Author, auIdSearched, Authors.AuthorId, "AuthorId") if not Empty(auName) then MessageBox("В библиотеке нет книг автора " + Rtrim(auName)) else MessageBox("Нет автора с кодом " + Transform(auIdSearched)) endif endif Функция FOUND([nWorkArea | cTableAlias])возвращает .T., если команда CONTINUE, LOCATE или SEEK выполнена результативно, или .F. – в противном случае. Функция оперирует либо текущей, либо указанной параметром nWorkArea | cTableAlias таблицей. Пример см. в описании команды LOCATE. Функция SEEK(eExpression [, nWorkArea | cTableAlias
|