Freigeben über


_DBSeek( ), API-Bibliotheksroutine

Durchsucht eine indizierte Tabelle im aktuellen Arbeitsbereich nach dem ersten Datensatz, dessen Indexschlüssel dem Wert in val entspricht.

long _DBSeek(Value FAR *val)
Value FAR *val;            /* Sought value. */

Hinweise

Findet _DBSeek( ) einen passenden Datensatz, wird der Datensatzzeiger auf den passenden Datensatz verschoben, und die Datensatznummer wird zurückgegeben. Es muss zu einer exakten Übereinstimmung kommen, es sei denn, SET EXACT ist auf OFF gesetzt. Findet _DBSeek( ) keinen passenden Datensatz, wird 0 zurückgegeben. Wenn keine Übereinstimmung gefunden wird und SET NEAR auf ON gesetzt ist, wird der Datensatzzeiger unmittelbar nach dem Datensatz gesetzt, der am ehesten passt. Ist SET NEAR auf OFF gesetzt, wird der Datensatzzeiger an das Dateiende gesetzt.

Wenn der übereinstimmende Datensatz ein hinzugefügter gepufferter Datensatz ist, der nicht übernommen worden ist, unterscheidet sich der von _DBSeek( ) zurückgegebene Wert von dem von RECNO( ) zurückgegebenen Wert. RECNO( ) gibt einen negativen Wert zurück, was darauf hinweist, dass der Datensatz gepuffert ist. Der von _DBSeek( ) zurückgegebene Wert ist um eins größer als die Summe aus der Anzahl der Datensätze in der Tabelle und der Anzahl der gepufferten Datensätze vor dem übereinstimmenden Datensatz.

Beim Auftreten eines Fehlers gibt _DBSeek( ) eine negative ganze Zahl zurück, deren absoluter Wert eine Visual FoxPro-Fehlernummer darstellt.

Beim Suchen nach einem numerischen Feld muss val auf ev_type N gesetzt sein. Dies gilt auch, wenn das Feld keine Dezimalstellen hat. Ist I der ev_type von val, gibt _DBSeek( ) den internen Fehler Nr. -302, Datentyp stimmt nicht überein, zurück.

Weitere Informationen zum Erstellen einer API-Bibliothek und ihrer Integration in Visual FoxPro finden Sie unter Zugreifen auf die Visual FoxPro-API.

Beispiel

Im folgenden Beispiel wird eine Suche auf dem Index durchgeführt, der die Reihenfolge der Einträge in der im aktuellen Arbeitsbereich geöffneten Tabelle steuert. Beachten Sie bitte, dass das Fragezeichen (?) in der FoxInfo-Struktur erforderlich ist, da der Typ des Indexausdrucks nicht bekannt ist.

Visual FoxPro-Code

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-Code

#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
};

Siehe auch

_DBRecCount( ), API-Bibliotheksroutine | _DBRecNo( ), API-Bibliotheksroutine | _DBSkip( ), API-Bibliotheksroutine | SET EXACT-Befehl