Oggetto Recordset (ADO)

Rappresenta l'intero set di record di una tabella di base o i risultati di un comando eseguito. In qualsiasi momento, l'oggetto Recordset fa riferimento a un solo record all'interno del set come record corrente.

Osservazioni

Si usano oggetti Recordset per modificare i dati da un provider. Quando si usa ADO, si modificano quasi completamente i dati usando oggetti Recordset. Tutti gli oggetti Recordset sono costituiti da record (righe) e campi (colonne). A seconda delle funzionalità supportate dal provider, alcuni metodi o proprietà dell'oggetto Recordset potrebbero non essere disponibili.

ADODB.Recordset è il ProgID che deve essere usato per creare un oggetto Recordset. Applicazioni esistenti che fanno riferimento al progID ADOR.Recordset obsoleto continueranno a funzionare senza ricompilare, ma il nuovo sviluppo deve fare riferimento ad ADODB.Recordset.

In ADO sono definiti quattro tipi di cursore diversi:

  • Cursore dinamico Consente di visualizzare aggiunte, modifiche ed eliminazioni da parte di altri utenti, consente tutti i tipi di spostamento nell'oggetto Recordset che non si basano sui segnalibri e consente i segnalibri, se il provider li supporta.

  • Cursore keyset Si comporta come un cursore dinamico, ad eccezione del fatto che impedisce di visualizzare i record aggiunti da altri utenti e impedisce l'accesso ai record eliminati da altri utenti. Le modifiche dei dati da parte di altri utenti saranno ancora visibili. Supporta sempre i segnalibri e quindi consente tutti i tipi di spostamento nell'oggetto Recordset.

  • Cursore statico Fornisce una copia statica di un set di record da usare per trovare dati o generare report; consente sempre i segnalibri e quindi tutti i tipi di spostamento tramite nell'oggetto Recordset. Aggiunte, modifiche o eliminazioni da parte di altri utenti non saranno visibili. Questo è l'unico tipo di cursore consentito quando si apre un oggetto Recordset lato client.

  • Cursore forward-only Consente di scorrere in avanti solo nell'oggetto Recordset. Aggiunte, modifiche o eliminazioni da parte di altri utenti non saranno visibili. Questo migliora le prestazioni in situazioni in cui è necessario eseguire un solo passaggio in un oggetto Recordset.

Impostare la proprietà CursorType prima di aprire l'oggetto Recordset per scegliere il tipo di cursore oppure passare un argomento CursorType con il metodo Open. Alcuni provider non supportano tutti i tipi di cursore. Per informazioni dettagliate, vedere la documentazione del provider. Se non si specifica un tipo di cursore, ADO apre un cursore forward-only per impostazione predefinita.

Se la proprietà CursorLocation è impostata su adUseClient per aprire un oggetto Recordset, la proprietà UnderlyingValue per gli oggetti Field non è disponibile nell'oggetto Recordset restituito. Se utilizzato con alcuni provider, ad esempio il provider Microsoft ODBC per OLE DB insieme a Microsoft SQL Server, è possibile creare oggetti Recordset indipendentemente da un oggetto Connection definito in precedenza passando una stringa di connessione con il metodo Open. ADO crea ancora un oggetto Connection, ma non lo assegna a una variabile oggetto. Tuttavia, se si aprono più oggetti Recordset tramite la stessa connessione, è necessario creare e aprire in modo esplicito un oggetto Connection. In questo modo l'oggetto Connection viene assegnato a una variabile oggetto. Se non si utilizza questa variabile oggetto all'apertura degli oggetti Recordset, ADO crea un nuovo oggetto Connection per ogni nuovo oggetto Recordset, anche se si passa la stessa stringa di connessione.

È possibile creare tutti gli oggetti Recordset necessari.

Quando si apre un oggetto Recordset, il record corrente viene posizionato sul primo record (se presente) e le proprietà BOF e EOF sono impostate su False. Se non sono presenti record, le impostazioni delle proprietà BOF e EOF sono True.

È possibile utilizzare i metodi MoveFirst, MoveLast, MoveNext e MovePrevious, il metodo Move, le proprietà AbsolutePosition, AbsolutePage e Filter per riposizionare il record corrente, presupponendo che il provider supporti la funzionalità pertinente. Gli oggetti Recordset forward-only supportano solo il metodo MoveNext. Quando si usano i metodi Move per visitare ogni record o enumerare l'oggetto Recordset, è possibile usare le proprietà BOF e EOF per determinare se ci si è spostati oltre l'inizio o la fine dell'oggetto Recordset.

Prima di usare qualsiasi funzionalità di un oggetto Recordset, è necessario chiamare il metodo Supports sull'oggetto per verificare che la funzionalità sia supportata o disponibile. Non è necessario usare la funzionalità quando il metodo Supports restituisce "false". Ad esempio, è possibile usare il metodo MovePrevious solo se Recordset.Supports(adMovePrevious) restituisce True. In caso contrario, verrà visualizzato un errore, perché l'oggetto Recordset potrebbe essere stato chiuso e la funzionalità potrebbe essere stata resa non disponibile nell'istanza. Anche se una funzionalità a cui si è interessati non è supportata, Supports restituirà false. In questo caso, è consigliabile evitare di chiamare la proprietà o il metodo corrispondente nell'oggetto Recordset.

Gli oggetti Recordset possono supportare due tipi di aggiornamento: immediato e in batch. Nell'aggiornamento immediato, tutte le modifiche ai dati vengono scritte immediatamente nell'origine dati sottostante dopo aver chiamato il metodo Update. È anche possibile passare matrici di valori come parametri con i metodi AddNew e Update e aggiornare simultaneamente diversi campi in un record.

Se un provider supporta l'aggiornamento in batch, è possibile che la cache del provider venga modificata in più record e quindi trasmetterli in una singola chiamata al database con il metodo UpdateBatch. Questo vale per le modifiche apportate con i metodi AddNew, Update e Delete. Dopo aver chiamato il metodo UpdateBatch, è possibile usare la proprietà Status per verificare la presenza di conflitti di dati per risolverli.

Nota

Per eseguire una query senza usare un oggetto Command, passare una stringa di query al metodo Open di un oggetto Recordset. Tuttavia, è necessario un oggetto Command quando si desidera rendere persistente il testo del comando ed eseguirlo nuovamente oppure usare i parametri di query.

La proprietà Mode controlla le autorizzazioni di accesso.

La raccolta Fields è il membro predefinito dell'oggetto Recordset. Di conseguenza, le due istruzioni di codice seguenti sono equivalenti.

Debug.Print objRs.Fields.Item(0)  ' Both statements print   
Debug.Print objRs(0)              '  the Value of Item(0).  

Quando un oggetto Recordset viene passato tra processi, viene eseguito il marshalling solo dei valori del set di righe e le proprietà dell'oggetto Recordset vengono ignorate. Durante l'unmarshalling, il set di righe viene decompresso in un oggetto Recordset appena creato, che imposta anche le relative proprietà sui valori predefiniti.

L'oggetto Recordset è sicuro per lo scripting.

Questa sezione contiene l'argomento seguente.

Vedere anche

Oggetto Connection (ADO)
Raccolta Fields (ADO)
Raccolta Properties (ADO)
Appendice A: Provider