Просматривает индексированную таблицу в текущей рабочей области в поисках первой записи, ключ индекса которой соответствует значению val.
long _DBSeek(Value FAR *val)
Value FAR *val; /* Искомое значение. */ |
Примечания
Если _DBSeek( ) обнаружит требуемую запись, она перемещает к ней указатель записи и возвращает номер этой записи. Ключ индекса должен в точности совпасть со значением, если только не действует SET EXACT OFF. Если _DBSeek( ) не находит нужной записи, возвращается 0. Если совпадений не выявлено и установка SET NEAR имеет значение ON, указатель записи устанавливается непосредственно после записи, которая больше всех похожа на искомую. Если установка SET NEAR имеет значение OFF, указатель записи устанавливается в конце таблицы.
Если соответствующая запись является буферизированной но еще не сброшена, то значение возвращаемое _DBSeek( ) будет отличатся от значения возвращаемого командой RECNO( ). RECNO( ) возвращает отрицательное значение, указывающее что запись буферизирована. Значения возвращаемые _DBSeek( ) будет на единицу больше чем число записей в таблице плюс число буферизированных записей перед соответствующей записью.
Если возникает ошибка, _DBSeek( ) возвращает отрицательное целое число, абсолютное значение которого равно номеру ошибки Visual FoxPro.
При поиске числового поля в качестве val значение ev_type должно быть установлено типа 'N', даже если в этом поле нет десятичных цифр. Если val имеет значение типа ev_type 'I', _DBSeek( ) возвратит внутреннюю ошибку с номером -302, "Data type mismatch" Несоответствие типов данных.
Для получения дополнительной информации о том, как создавать библиотеку API и интегрировать её в Visual FoxPro, смотрите Доступ к API Visual FoxPro.
Пример
В следующем примере производится поиск по индексу, который контролирует порядок в таблице, открытой в текущей рабочей области. Обратите внимание на "?" в структуре FoxInfo: это необходимо, поскольку тип выражения индекса неизвестен.
Код Visual FoxPro
![]() | |
---|---|
SET LIBRARY TO DBSEEK DO CreateTest INDEX ON ABC TAG ABC SET ORDER TO TAG ABC = DBSEEK("This is record 3") && seeks ABC = "This is record 3" LIST NEXT 1 USE PROCEDURE CreateTest CREATE TABLE test (ABC C(20)) APPEND BLANK REPLACE ABC WITH "This is record 1" APPEND BLANK REPLACE ABC WITH "This is record 2" APPEND BLANK REPLACE ABC WITH "This is record 3" APPEND BLANK REPLACE ABC WITH "This is record 4" GO TOP RETURN |
Код C
![]() | |
---|---|
#include <pro_ext.h> FAR Example(ParamBlk FAR *parm) { _DBSeek(&parm->p[0].val); } FoxInfo myFoxInfo[] = { {"DBSEEK", (FPFI) Example, 1, "?"}, }; FoxTable _FoxTable = { (FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo }; |
Смотрите также

c Microsoft Corporation. All rights reserved. Microsoft is not reponsible for the contents of the translated help topics.