Funzione JetSetColumn

Si applica a: Windows | Windows Server

Funzione JetSetColumn

La funzione JetSetColumn modifica un singolo valore di colonna in un record modificato da inserire o aggiornare il record corrente. Può sovrascrivere un valore esistente, aggiungere un nuovo valore a una sequenza di valori in una colonna multivalore, rimuovere un valore da una sequenza di valori in una colonna multivalore oppure aggiornare tutto o parte di un valore long, una colonna di tipo JET_coltypLongText o JET_coltypLongBinary.

    JET_ERR JET_API JetSetColumn(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          JET_COLUMNID columnid,
      __in_opt      const void* pvData,
      __in          unsigned long cbData,
      __in          JET_GRBIT grbit,
      __in_opt      JET_SETINFO* psetinfo
    );

Parametri

sesid

Sessione da utilizzare per questa chiamata.

tableid

Cursore da utilizzare per questa chiamata.

columnid

JET_COLUMNID della colonna da recuperare. In alternativa, è possibile specificare un valore columnid pari a 0 (zero). Quando viene specificato columnid 0 (zero), tutte le colonne con tag sparse e multivalore vengono considerate come una singola colonna. Ciò semplifica il recupero di tutte le colonne di tipo sparse presenti in un record.

pvData

Buffer di input contenente dati da usare per il valore della colonna.

cbData

Dimensioni in byte del buffer di input.

grbit

Gruppo di bit che contengono le opzioni da usare per questa chiamata, che includono zero o più dei seguenti elementi:

Valore

Significato

JET_bitSetAppendLV

Questa opzione consente di aggiungere dati a una colonna di tipo JET_coltypLongText o JET_coltypLongBinary. Lo stesso comportamento può essere ottenuto determinando le dimensioni del valore lungo esistente e specificando ibLongValue in psetinfo. Tuttavia, è più semplice usare questo grbit perché non è necessario conoscere le dimensioni del valore di colonna esistente.

JET_bitSetOverwriteLV

Questa opzione viene usata per sostituire il valore long esistente con i dati appena forniti. Quando si usa questa opzione, è come se il valore lungo esistente sia stato impostato su 0 (zero) lunghezza prima di impostare i nuovi dati.

JET_bitSetRevertToDefaultValue

Questa opzione è applicabile solo per le colonne con tag, sparse o multivalore. Fa in modo che la colonna restituisca il valore di colonna predefinito nelle successive operazioni di recupero delle colonne. Tutti i valori di colonna esistenti vengono rimossi.

JET_bitSetSeparateLV

Questa opzione viene utilizzata per forzare un valore lungo, le colonne di tipo JET_coltypLongText o JET_coltypLongBinary, da archiviare separatamente dal resto dei dati del record. Ciò si verifica normalmente quando le dimensioni del valore lungo impediscono l'archiviazione con i dati dei record rimanenti. Tuttavia, questa opzione può essere usata per forzare l'archiviazione separata del valore long. Si noti che i valori lunghi quattro byte di dimensioni inferiori non possono essere costretti a essere separati. In questi casi, l'opzione viene ignorata.

JET_bitSetSizeLV

Questa opzione viene usata per interpretare il buffer di input come numero intero di byte da impostare come lunghezza del valore lungo descritto dall'id colonna specificato e, se specificato, il numero di sequenza in psetinfo-itagSequence>. Se le dimensioni specificate sono maggiori del valore della colonna esistente, la colonna verrà estesa con 0s. Se le dimensioni sono inferiori al valore della colonna esistente, il valore verrà troncato.

JET_bitSetUniqueMultiValues

Questa opzione viene usata per imporre che tutti i valori in una colonna multivalore siano distinti. Questa opzione confronta i dati della colonna di origine, senza trasformazioni, con altri valori di colonna esistenti e viene restituito un errore se viene trovato un duplicato. Se questa opzione viene specificata, non è possibile JET_bitSetAppendLV JET_bitSetOverwriteLV e JET_bitSetSizeLV.

JET_bitSetUniqueNormalizedMultiValues

Questa opzione viene usata per imporre che tutti i valori in una colonna multivalore siano distinti. Questa opzione confronta la trasformazione normalizzata della chiave dei dati della colonna, con altri valori di colonna esistenti trasformati in modo analogo e viene restituito un errore se viene trovato un duplicato. Se questa opzione viene specificata, non è possibile JET_bitSetAppendLV JET_bitSetOverwriteLV e JET_bitSetSizeLV.

JET_bitSetZeroLength

Questa opzione viene usata per impostare un valore su lunghezza zero. In genere, un valore di colonna è impostato su NULL passando un cbMax pari a 0 (zero). Tuttavia, per alcuni tipi, ad esempio JET_coltypText, un valore di colonna può essere 0 (zero) lunghezza anziché NULL e questa opzione viene usata per distinguere tra NULL e 0 (zero) lunghezza.

Nota In generale, se la colonna è una colonna a lunghezza fissa, questo bit viene ignorato e la colonna è impostata su NULL. Tuttavia, se la colonna è una colonna con tag a lunghezza fissa, la lunghezza della colonna è impostata su 0. Quando la colonna con tag a lunghezza fissa è impostata su 0, tenta di recuperare la colonna con JetRetrieveColumn o JetRetrieveColumns avrà esito positivo, ma la lunghezza effettiva restituita nel parametro cbActual è 0.

JET_bitSetIntrinsicLV

Questa opzione viene usata per archiviare l'intero valore long nel record.

JET_bitSetCompressed

Questa opzione viene usata per tentare la compressione dei dati durante l'archiviazione dei dati.

Windows 7: JET_bitSetCompressed è stato introdotto in Windows 7.

JET_bitSetUncompressed

Questa opzione non viene usata per tentare la compressione durante l'archiviazione dei dati.

Windows 7: JET_bitSetUnCompressed è stato introdotto in Windows 7.

psetinfo

Puntatore a parametri di input facoltativi che possono essere impostati per questa funzione usando la struttura JET_SETINFO .

Se psetinfo viene assegnato come NULL , la funzione si comporta come se fosse stato assegnato un itagSequence pari a 1 e un valore ibLongValue pari a 0 (zero). In questo modo, il set di colonne imposta il primo valore di una colonna multivalore e imposta i dati lunghi a partire dall'offset 0 (zero).

Per questo parametro è possibile impostare le opzioni seguenti:

Valore

Significato

ibLongValue

Offset binario in un valore di colonna lungo in cui devono iniziare i dati impostati.

itagSequence

Numero di sequenza del valore di colonna multivalore desiderato da impostare. Se itagSequence è impostato su 0 (zero), il valore fornito deve essere aggiunto alla fine della sequenza di valori multivalore. Se il numero di sequenza specificato è maggiore dell'ultimo valore multivalore esistente, viene aggiunto di nuovo il valore specificato alla fine della sequenza di valori. Se il numero di sequenza corrisponde a un valore esistente, tale valore viene sostituito con il valore specificato.

Valore restituito

Questa funzione restituisce il tipo di dati JET_ERR con uno dei codici restituiti seguenti. Per altre informazioni sui possibili errori ESE, vedere Errori del motore di archiviazione estendibile e parametri di gestione degli errori.

Codice restituito

Descrizione

JET_errSuccess

Operazione riuscita.

JET_errBadColumnId

L'ID di colonna specificato non rientra nei limiti legali di un ID di colonna.

JET_errClientRequestToStopJetService

Non è possibile completare l'operazione perché tutte le attività sull'istanza associata alla sessione sono cessate a seguito di una chiamata a JetStopService.

JET_errColumnNotFound

La colonna descritta dall'id colonna specificato non esiste nella tabella.

JET_errColumnNotUpdatable

È stato effettuato un tentativo non valido di aggiornare un valore long durante un'operazione di eliminazione dell'aggiornamento originale di copia di inserimento.

JET_errColumnTooBig

I dati del valore di colonna specificati nel buffer di input superano la limitazione delle dimensioni naturale per una colonna a lunghezza fissa o configurata per colonne di testo a lunghezza fissa o binarie. Questo errore viene restituito anche quando si passano più di 1024 byte di dati per una colonna lunga e si imposta il flag JET_bitSetIntrinsicLV.

JET_errInstanceUnavailable

Non è possibile completare l'operazione perché l'istanza associata alla sessione ha rilevato un errore irreversibile che richiede la revoca dell'accesso a tutti i dati per proteggere l'integrità dei dati.

Windows XP: Questo errore verrà restituito solo da Windows XP e versioni successive.

JET_errInvalidBufferSize

Le dimensioni dei dati del valore di colonna specificate non corrispondono a ciò che è naturale per il tipo di dati a lunghezza fissa.

JET_errInvalidColumnType

È stato effettuato un tentativo non valido di aggiornare una colonna di incremento automatico durante un'operazione di inserimento o aggiornamento o di aggiornare una colonna di versione durante un'operazione di sostituzione.

JET_errInvalidgrbit

Le opzioni fornite sono sconosciute o una combinazione non valida di impostazioni di bit note.

JET_errInvalidParameter

La proprietà psetinfo-cbStruct> specificata non è una dimensione valida per la struttura JET_SETINFO .

JET_errMultiValuedDuplicate

L'operazione imposta colonna ha tentato di creare un valore duplicato e di specificare JET_bitSetUniqueMultiValues o JET_bitSetUniqueNormalizedMultiValues.

JET_errNotInitialized

Non è possibile completare l'operazione perché l'istanza associata alla sessione non è ancora stata inizializzata.

JET_errNotInTransaction

È stato effettuato un tentativo non valido di aggiornare un valore di colonna lungo quando la sessione chiamante non era in una transazione.

JET_errNullInvalid

È stato effettuato un tentativo non valido di impostare una colonna non NULL su NULL.

JET_errColumnIllegalNull

Uguale a JET_errNullInvalid.

JET_errRecordTooBig

Impossibile impostare il valore della colonna sul valore nel buffer di input perché avrebbe causato il superamento della limitazione delle dimensioni della pagina del record. Le colonne di tipo JET_coltypLongText o JET_coltypLongBinary possono essere archiviate separatamente dai dati dei record rimanenti. Tuttavia, è necessario archiviare altre colonne con il record e può causare il superamento della limitazione delle dimensioni del record. Anche le colonne lunghe richiedono 5 byte di spazio all'interno del record come collegamento e questo può causare la restituzione di JET_errRecordTooBig.

JET_errRestoreInProgress

Non è possibile completare l'operazione perché è in corso un'operazione di ripristino nell'istanza associata alla sessione.

JET_errSessionSharingViolation

La stessa sessione non può essere usata contemporaneamente per più thread.

Windows XP: 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_errUpdateNotPrepared

Il cursore non è attualmente in corso di inserimento di un nuovo record o dell'aggiornamento di un record esistente.

JET_errVersionStoreOutOfMemory

Questo errore si verifica quando le dimensioni configurate dell'archivio versioni non sono sufficienti per contenere tutti gli aggiornamenti in sospeso.

JET_wrnColumnMaxTruncated

Il valore della colonna nel buffer di input ha superato la lunghezza massima configurata per una colonna a lunghezza variabile ed è stato troncato.

In caso di esito positivo, la parte desiderata di un valore di colonna per la colonna specificata viene impostata con i dati copiati dal buffer di input. È possibile che il set di dati sia stato troncato se ha superato la lunghezza massima specificata per una colonna a lunghezza variabile.

In caso di errore, la posizione del cursore rimane invariata e nel buffer di copia non vengono aggiornati dati relativi ai valori di colonna.

Commenti

L'impostazione di valori lunghi, valori per le colonne JET_coltypLongBinary di tipo JET_coltypLongText o JET_coltypLongBinary, deve essere eseguita solo quando la sessione chiamante si trova in una transazione. Se la sessione chiamante non si trova in una transazione, è possibile eseguire il commit completo delle modifiche ai valori lunghi archiviati separatamente anche quando l'operazione di aggiornamento viene successivamente annullata. Se la sessione chiamante si trova in una transazione, è possibile eseguire il rollback completo degli effetti dell'aggiornamento annullando l'aggiornamento e eseguendo il rollback della transazione di sessione.

Gli aggiornamenti degli indici non vengono eseguiti in seguito alle operazioni JetSetColumn . Gli indici vengono invece aggiornati solo dopo aver completato tutte le modifiche alle colonne e viene chiamato JetUpdate . Ciò consente l'aggiornamento più efficiente degli indici quando gli indici comportano la modifica di più colonne.

Le dimensioni di un record sono limitate in base alle dimensioni della pagina del database. Tutti i valori lunghi nel record maggiori di cinque byte verranno archiviati separati dal record se i dati nel record superano il limite in seguito a un'operazione JetSetColumn . L'errore JET_errRecordTooBig verrà restituito solo dopo che tutti i dati di colonna record separabili sono stati archiviati separatamente dal record e il record supera ancora il limite di dimensioni del record.

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_COLUMNID
JET_ERR
JET_SESID
JET_TABLEID
JET_SETINFO
JetRetrieveColumn
JetSetColumns