Funzione JetRetrieveKey
Si applica a: Windows | Windows Server
Funzione JetRetrieveKey
La funzione JetRetrieveKey recupera la chiave per la voce di indice nella posizione corrente di un cursore. Tali chiavi vengono costruite dalle chiamate a JetMakeKey. La chiave recuperata può quindi essere usata per restituire in modo efficiente tale cursore alla stessa voce di indice tramite una chiamata a JetSeek.
JET_ERR JET_API JetRetrieveKey(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__out_opt void* pvData,
__in unsigned long cbMax,
__out_opt unsigned long* pcbActual,
__in JET_GRBIT grbit
);
Parametri
sesid
Sessione da usare per questa chiamata.
tableid
Cursore da usare per questa chiamata.
pvData
Buffer di output che riceverà la chiave.
cbMax
Dimensione massima in byte del buffer di output.
pcbActual
Riceve le dimensioni effettive in byte della chiave.
Se questo parametro è NULL, le dimensioni effettive della chiave non verranno restituite.
Se il buffer di output è troppo piccolo, le dimensioni effettive della chiave verranno comunque restituite. Ciò significa che questo numero sarà maggiore delle dimensioni del buffer di output.
grbit
Un gruppo di bit che contengono le opzioni da usare per questa chiamata, che includono zero o più dei seguenti.
Valore |
Significato |
---|---|
JET_bitRetrieveCopy |
Se specificato, il motore restituirà la chiave di ricerca per il cursore. La chiave di ricerca viene compilata usando una o più chiamate precedenti a JetMakeKey ai fini della ricerca di tale chiave usando JetSeek o impostando un intervallo di indici usando JetSetIndexRange. |
Valore restituito
Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sugli errori ESE possibili, vedere Errori del motore di archiviazione estendibili e parametri di gestione degli errori.
Codice restituito |
Descrizione |
---|---|
JET_errSuccess |
Operazione riuscita. |
JET_errClientRequestToStopJetService |
Non è possibile completare l'operazione perché tutte le attività nell'istanza associata alla sessione non sono state interrotte in seguito a una chiamata a JetStopService. |
JET_errInstanceUnavailable |
Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede che l'accesso a tutti i dati venga revocato per proteggere l'integrità dei dati. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errKeyNotMade |
Non esiste alcuna chiave di ricerca corrente per il cursore. Ciò avviene per JetRetrieveKey se viene specificato JET_bitRetrieveCopy e non è stata creata una chiave di ricerca per questo cursore usando una chiamata precedente a JetMakeKey. La chiave di ricerca verrà eliminata da una chiamata precedente a qualsiasi API di spostamento nel cursore diverso da JetMove. |
JET_errNoCurrentRecord |
Il cursore non è posizionato su un record. I motivi possono essere diversi. Si verificherà, ad esempio, se il cursore è attualmente posizionato dopo l'ultimo record dell'indice corrente. |
JET_errNotInitialized |
Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata. |
JET_errRestoreInProgress |
Non è possibile completare l'operazione perché un'operazione di ripristino è in corso nell'istanza associata alla sessione. |
JET_errSessionSharingViolation |
La stessa sessione non può essere usata contemporaneamente per più thread. Questo errore verrà restituito solo da Windows XP e versioni successive. |
JET_errTermInProgress |
Non è possibile completare l'operazione perché l'istanza associata alla sessione viene arrestata. |
JET_wrnBufferTruncated |
L'operazione è stata completata correttamente, ma il buffer di output era troppo piccolo per ricevere l'intera chiave. Il buffer di output è stato riempito con la quantità di chiave adatta. Le dimensioni effettive della chiave sono state restituite anche, se richiesto. Nota Questo errore non verrà restituito se viene specificato JET_bitRetrieveCopy. Per altre informazioni, vedere la sezione Osservazioni. |
In caso di esito positivo, la chiave per la voce di indice nella posizione corrente di un cursore verrà restituita nel buffer di output. Se JET_wrnBufferTruncated viene restituito, il buffer di output conterrà la quantità di chiave adattata nello spazio fornito e le dimensioni effettive della chiave saranno accurate. Non verrà eseguita alcuna modifica allo stato del database.
In caso di errore, lo stato del buffer di output e le dimensioni effettive della chiave non verranno definiti. Non verrà eseguita alcuna modifica allo stato del database.
Commenti
Le chiavi devono essere generalmente considerate blocchi opachi di dati. Non è necessario eseguire alcun tentativo di sfruttare la struttura interna di questi dati. Tuttavia, le proprietà seguenti possono essere note su tutte le chiavi ESENT:
Le chiavi possono essere confrontate tra loro usando la funzione memcmp per stabilire l'ordinamento relativo nell'indice di origine sulla tabella delle voci dell'indice di origine.
È senza significato confrontare le chiavi delle voci di indice da indici diversi tra loro.
Una chiave è sempre minore o uguale a JET_cbKeyMost (255) byte di lunghezza prima di Windows Vista. In Windows Vista e versioni successive le chiavi possono essere maggiori. La dimensione massima di una chiave è uguale al valore corrente di JET_paramKeyMost.
Oltre alle proprietà precedenti delle chiavi ESENT in generale, è importante notare che una chiave di ricerca è diversa dalla chiave per una voce di indice. In particolare, una chiave di ricerca può essere più lunga di una chiave normale. Questa lunghezza aggiuntiva si verifica quando viene usata un'opzione con caratteri jolly durante la costruzione della chiave di ricerca. Per altre informazioni, vedere JetMakeKey .
C'è un bug importante in questa API presente in tutte le versioni. Se la chiave di ricerca viene richiesta usando l'uso di JET_bitRetrieveCopy e il buffer di output è troppo piccolo per ricevere l'intera chiave, JET_wrnBufferTruncated non verrà restituito. JET_errSuccess verrà restituito invece. È importante verificare che le dimensioni effettive della chiave restituite usando pcbActual siano inferiori o uguali alle dimensioni del buffer di output. Se la dimensione effettiva è maggiore della dimensione del buffer di output, il chiamante di JetRetrieveKey deve reagire come se JET_wrnBufferTruncated fosse restituito.
Requisiti
Requisito | Valore |
---|---|
Client |
Richiede Windows Vista, Windows XP o Windows 2000 Professional. |
Server |
Richiede Windows Server 2008, Windows Server 2003 o Windows 2000 Server. |
Intestazione |
Dichiarato in Esent.h. |
Libreria |
Usare ESENT.lib. |
DLL |
Richiede ESENT.dll. |
Vedere anche
JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JetMakeKey
JetSeek
JetSetIndexRange