ADO's Object Model - Il Recordset


Home Page | Comments | Articles | Faq | Documents | Search | Archive | Tales from the Machine Room | Contribute | Set language to:en it | Login/Register


A cura di Davide Bianchi ADO e' l'interfaccia piu' usata per accedere ai database sotto Windows, non solo mediante ASP, ma anche mediante Visual Basic, C/C++ ed altri ambienti di sviluppo.


Davide Bianchi, works as Unix/Linux administrator for an hosting provider in The Netherlands.

Do you want to contribute? read how.  
 


This site is made by me with blood, sweat and gunpowder, if you want to republish or redistribute any part of it, please drop me (or the author of the article if is not me) a mail.


This site was composed with VIM, now is composed with VIM and the (in)famous CMS FdT.

This site isn't optimized for vision with any specific browser, nor it requires special fonts or resolution.
You're free to see it as you wish.

Web Interoperability Pleadge Support This Project Powered By Gigan
Il Recordset

Proprieta':
AbsolutePage, AbsolutePosition, ActiveConnection, BOF ed EOF, Bookmark, CacheSize, CursorLocation, CursorType, EditMode, Filter, LockType, MarshalOptions, MaxRecords, PageCount, PageSize, RecordCount, Sort, Source, State, Status

Metodi:
Open, MoveFirst, MoveLast, MoveNext e MovePrevious , Move, Resync, Requery, Save, Delete, UpdateBatch, CancelBatch, CancelUpdate, Update, AddNew, Supports, Clone, GetRows.

Il RecordSet fornisce dei metodi per manipolare ed accedere ai risultati di una query o di una Stored Procedure.

L'oggetto fornisce i metodi necessari per aggiungere, aggiornare, cancellare e scorrere i records che compongono il recordset stesso.

Ogni record puo' essere reperito ed aggiornato utilizzando la collection Fields ed i corrispondenti oggetti Field che essa contiene. Ogni Field fornisce informazioni ed il contenuto del singolo campo.

Quando un RecordSet e' creato, un cursore e' automaticamente aperto per permettere l'accesso ai dati.

Il Recordset consente di specificare il tipo di cursore e la locazione per il reperimento dei dati. Con la proprieta' CursorType e' possibile specificare il tipo di cursore da utilizzare. Un cursore puo' essere Forward-Only, Static, Keyset-Driven o Dynamic. Il tipo di cursore determina se il Recordset puo' essere "scorso" in avanti e all'indietro o aggiornato.

Il tipo di cursore influisce anche sulla visibilita' dei cambiamenti sui singoli record.

Per default, il cursore e' di tipo Read-Only e Forward-Only, cioe' e' di sola lettura (non si possono modificare i dati) e puo' essere "scorso" solo in avanti.

Si puo' specificare l'utilizzo di un cursore Client-Side o Server-Side usando la proprieta' CursorLocation. La "locazione" del cursore gioca un ruolo molto importante nei Recordset Disconnessi.

Un Recordset puo' essere creato tramite il metodo Connection.Execute o Command.Execute, oppure puo' essere creato a se' stante e quindi "aperto" mediante Open.

Questo esempio usa una Connection per creare e reperire un Recordset:


Dim rs As New ADODB.Recordset
rs.Open "select * from titles", "DSN=pubs;UID=sa"
While (Not rs.EOF)
  Debug.Print rs(0)
  rs.MoveNext
Wend
rs.Close

Torna alla mappa

Proprieta'

AbsolutePage Imposta o restituisce un valore compreso tra 1 e il numero di "pagine" contenute nel Recordset, oppure restituisce una delle seguenti costanti:

  • adPosUnknown
    Il Recordset e' vuoto, la posizione corrente e' sconosciuta o il provider non supporta questa proprieta'.
  • adPosBOF
    Il puntatore del record corrente si trova in corrispondenza dell'inizio del file, vale a dire BOF e' True.
  • adPosEOF
    Il puntatore del record corrente si trova in corrispondenza della fine del file, vale a dire EOF e' True.

Osservazioni
Utilizzare questa proprieta' per leggere o impostare la pagina attuale. Se si imposta la pagina attuale il Recordset si posizionera' automaticamente sul primo record della "pagina" selezionata.

Per ottenere il numero totale di pagine, utilizzare PageCount.

Utilizzare PageSize per impostare il numero di record che costituiscono ogni pagina.

Nota: la possibilita' di gestire le "pagine" e' fornita dal driver di database che si sta' utilizzando. Non e' detto che tutti i driver forniscano questa possibilta'.

AbsolutePosition Consente di specificare la posizione ordinale del record corrente.

Imposta o restituisce un valore compreso tra 1 e il numero di record totali contenuti nel Recordset (RecordCount) oppure restituisce una delle seguenti costanti:

  • adPosUnknown
    Il Recordset e' vuoto, la posizione corrente e' sconosciuta oppure il driver non supporta il posizionamento assoluto.
  • adPosBOF
    Il puntatore del record corrente si trova in corrispondenza dell'inizio del recordset.
  • adPosEOF
    Il puntatore del record corrente si trova in corrispondenza della fine del recordset.

Osservazioni
Utilizzare questa proprieta' per posizionarsi su di un record in base alla sua posizione all'interno del Recordset, oppure per determinare la posizione del record corrente. Il driver deve supportare il posizionamento assoluto.

Per ottenere il numero totale di record interrgoare RecordCount.

Quando si imposta AbsolutePosition, anche se su un record della cache corrente, ADO carica di nuovo nella cache un nuovo gruppo di record a partire dal record specificato. CacheSize determina le dimensioni del gruppo.

Nota La posizione di un record puo' cambiare se altri record vengono aggiunti o eliminati dal Recordset, inoltre la posizione varia in funzione dell'ordinamento che viene impostato. Non utilizzare pertanto AbsolutePosition come identificativo di un record. Utilizzare invece i Bookmark per questo scopo.

ActiveConnection Ritorna o imposta la Connection a cui e' collegato il Recordset.

Osservazioni
Per Recordset aperti o per Recordset la cui proprieta' Source e' impostata su un Command valido, questa proprieta' e' di sola lettura, in tutti gli altri casi puo' essere modificata.

e' possibile impostare questa proprieta' su una Connection esistente o su una stringa di connessione valida. In questo caso il provider creera' una nuova connessione utilizzando questa definizione. Il provider potra' inoltre impostare questa proprieta' alla nuova Connection in modo da ottenere informazioni piu' complete sull'errore o eseguire altri comandi.

Se si utilizza conn di Open per aprire il Recordset, ActiveConnection ne ereditera' il valore.

Se si imposta Source su un Command valido, questa proprieta' ereditera' l'impostazione della equivalente proprieta' del Command usato.

Utilizzo di Remote Data Service
Se utilizzata su un Recordset del client (ADOR), questa proprieta' puņ essere impostata solo su una stringa di connessione o su Nothing in Microsoft Visual Basic o VBScript.

BOF ed EOF
  • BOF indica che il record corrente si trova prima del primo record del Recordset
  • EOF indica che il record corrente si trova dopo l'ultimo record del Recordset

Le proprieta' BOF ed EOF restituiscono TRUE o FALSE

Osservazioni
Utilizzare queste proprieta per stabilire se il Recodset contiene dei dati oppure se sono stati superati i limiti durante lo spostamento nell'insieme dei record.

BOF restituisce True se il record corrente si trova prima del primo record e False in qualunque altro caso.

EOF restituisce True se il record corrente si trova dopo l'ultimo record e False in qualunque altro caso.

Se il Recordset e' vuoto (non contiene nessun record), entrambe le proprieta' ritornano True.

Nota:
Se si elimina l'ultimo record del Recordset, e' possibile che BOF ed EOF ritornino False, fino a che non si prova a spostare il record corrente.

Bookmark Restituisce un "segnalibro" che identifica in modo univoco il record corrente, oppure imposta il record corrente sul record identificato da un segnalibro valido.

Osservazioni
Utilizzare questa proprieta' per salvare la posizione attuale all'interno del Recordset e per ritornare al record in qualsiasi momento. I segnalibri sono disponibili solo se il Driver supporta la funzionalita' e se il Recordset e' stato aperto con le opzioni di posizionamento assoluto (vedere Open).

Quando si accede ad un Recordset, ciascuno dei record dispone di un segnalibro univoco. Per memorizzare il segnalibro del record corrente, leggere il valore di Bookmark e memorizzarlo in una variabile, per ritornare a quel record in qualunque momento, impostare Bookmark al valore precedentemente letto.

Il valore letto da Bookmark potrebbe non essere visualizzabile.

Se si utilizza Clone per creare una copia del Recordset, i Bookmark dei due Recordset saranno perfettamente identici.

La proprieta' Bookmark e' sempre disponibile quando e' utilizzata sui Recordset del client (ADOR).

CacheSize Indica il numero di record memorizzati nella cache locale.

Osservazioni
Utilizzare questa proprieta' per controllare il numero di record mantenuti dal driver nel buffer e il numero di record da recuperare contemporaneamente nella memoria locale. Se ad esempio il valore e' 10, dopo aver aperto il Recordset, il driver recuperera' i primi 10 record nella memoria locale.

Durante gli spostamenti all'interno del Recordset, il driver restituira' i dati presenti nel buffer finche' non si cerca di superare i limiti della cache, a questo punto il driver recuperera' un altro gruppo di record dal database.

Il valore di CacheSize puo' essere modificato anche se il Recordset e' aperto, la modifica del valore tuttavia ha effetto solo sul numero di record contenuti nella cache dopo l'esecuzione di piu' letture successive.

Se sono disponibili meno record di quelli specificati in CacheSize, il provider restituira' i record restanti senza generare alcun errore.

Il valore di CacheSize deve essere >=1.

I record memorizzati nella cache non riflettono le modifiche contemporanee apportate da altri utenti sul database. Per eseguire un aggiornamento di tutti i dati nella cache, utilizzare Resync.

CursorLocation Imposta o restituisce la posizione del motore del cursore.

Osservazioni
Consente di scegliere tra varie librerie di cursori accessibili da parte del driver. E' in genere possibile scegliere se utilizzare una libreria di cursori del client oppure una presente sul server. L'impostazione della proprieta' non ha effetto sulle connessioni gia' aperte. Inoltre non e' possibile modificarla se la connessione e' gia' aperta.

I cursori ottenuti usando la Connection.Execute erediteranno quest'impostazione. I Recordset erediteranno automaticamente quest'impostazione dalle relative connessioni.

Valori possibili:

  • adUseNone
    Non sono utilizzati servizi del cursore. Questa costante non e' aggiornata ed e' disponibile solo per garantire la compatibilita' con le versioni precedenti.
  • adUseClient
    Utilizza i cursori del client forniti da una libreria di cursori locale. I motori di cursore locale consentono in genere di eseguire molte funzioni non supportate dai cursori forniti da driver. Utilizzando quindi tale impostazione sara' possibile usufruire dei vantaggi offerti dalle funzioni che verranno abilitate.

    Per garantire la compatibilita' con le versioni precedenti, e' supportato anche il sinonimo adUseClientBatch.

  • adUseServer
    Predefinita. Utilizza cursori forniti da driver o dal provider di dati. Si tratta a volte di cursori molto flessibili che garantiscono una riservatezza supplementare per le modifiche apportate da altri utenti alla fonte dati. Alcune funzioni del Microsoft Client Cursor Provider, quali i recordset non associati, non possono essere simulate con i cursori del server, rendendo quindi tali funzioni non disponibili con questa impostazione.

Utilizzo di Remote Data Service
Quando viene utilizzata su un Recordset o Connection del client (ADOR), questa proprieta' puņ essere impostata solo su adUseClient.

CursorType Indica il tipo di cursore utilizzato.

Valori possibili:

  • adOpenForwardOnly
    Valore predefinito. Cursore a scorrimento in avanti. Si comporta come un cursore statico tranne per il fatto che consente di scorrere i record solo in avanti. In questo modo e' possibile ottenere un miglioramento delle prestazioni quando e' necessario effettuare un unico passaggio all'interno di un recordset.
  • adOpenKeyset
    Cursore direzionale. Si comporta in modo simile a un cursore dinamico ad eccezione del fatto che non consente di visualizzare record aggiunti da altri utenti, anche se i record eliminati da altri utenti non sono accessibili dal proprio recordset. I dati modificati da altri utenti sono ancora visibili.
  • adOpenDynamic
    Cursore dinamico. Consente di visualizzare aggiunte, modifiche ed eliminazioni eseguite da altri utenti e di effettuare tutti i tipi di movimento tramite il recordset, ad eccezione dei segnalibri se non supportati dal provider.
  • adOpenStatic
    Cursore statico. Copia statica di un set di record da utilizzare per Ricerca di dati o la generazione di relazioni. Le aggiunte, modifiche o eliminazioni eseguite da altri utenti non sono visibili.

Osservazioni
Utilizzare questa proprieta' per specificare il tipo di cursore da utilizzare quando viene aperto il Recordset. La proprieta' e' di lettura/scrittura quando il Recordset e' chiuso e di sola lettura quando e' aperto.

Se viene impostato un valore non supportato, non verra' generato alcun errore e verra' utilizzato il tipo di cursore supportato piu' vicino.

Se il driver non supporta il tipo di cursore richiesto, e' possibile che ne venga restituito un tipo diverso. CursorType verra' modificata in modo da corrispondere al tipo di cursore attualmente in uso quando il Recordset e' aperto. Per verificare la funzionalita' specifica del cursore restituito, utilizzare Supports.

Nella tabella che segue viene illustrata la funzionalita' del driver (identificata dalle costanti di Supports) necessaria per ciascun tipo di cursore.

Per un Recordset del tipo indicato, Supports dovra' restituire True per tutte le costanti indicate di seguito:

Tipo cursore Costanti
adOpenForwardOnly nessuna
adOpenKeyset adBookmark, adHoldRecords, adMovePrevious, adResync
adOpenDynamic adMovePrevious
adOpenStatic adBookmark, adHoldRecords, adMovePrevious, adResync

Nota Anche se Supports (adUpdateBatch) puo' risultare valida per cursori dinamici e a scorrimento in avanti, si consiglia di utilizzare un cursore statico o direzionale per gli aggiornamenti batch. Impostare LockType su adLockBatchOptimistic e CursorLocation su adUseClient per abilitare il Microsoft Client Cursor Engine, necessario per gli aggiornamenti batch.

Utilizzo di Remote Data Service
Quando CursorType viene utilizzata su un Recordset del client (ADOR), puo' essere impostata solo su adOpenStatic.

EditMode Indica se il record corrente e' in fase di modifica oppure no.

Questa proprieta' e' di sola lettura, il suo valore puo' essere:

  • adEditNone
    Indica che non e' in esecuzione alcuna operazione di modifica.
  • adEditInProgress
    Indica che i dati nel record corrente sono stati modificati ma non salvati.
  • adEditAdd
    Indica che e' stato chiamato AddNew e che il record corrente e' un nuovo record non salvato nel database.
  • adEditDelete
    Indica che il record corrente e' stato eliminato.

Osservazioni
ADO gestisce un buffer di modifica associato al record corrente. Questa proprieta' indica se sono state apportate modifiche al buffer o se e' stato creato un nuovo record. E' possibile verificare le modifiche in sospeso qualora sia stato interrotto un processo di modifica e determinare se sia necessario utilizzare Update o CancelUpdate.

Vedere anche AddNew per una descrizione piu' dettagliata di EditMode in condizioni di modifica diverse.

Filter Consente di specificare un filtro sui dati del Recordset.

Impostazioni e valori restituiti
Imposta o restituisce un valore che contiene uno degli elementi seguenti:

  • Stringa di criterio
    una stringa costituita da uno o piu' proposizioni concatenate con gli operatori AND o OR.
  • Serie di segnalibri
    una serie di valori di segnalibro univoci che si riferiscono ai record dell'oggetto Recordset.
  • Una delle seguenti costanti:
    • adFilterNone
      Rimuove il filtro corrente e ripristina tutti i record da visualizzare.
    • adFilterPendingRecords
      Consente di visulizzare solo i record modificati ma non inviati al server. Applicabile solo per la modalita' di aggiornamento batch.
    • adFilterAffectedRecords
      Consente di visualizzare solo i record interessati dall'ultima chiamata Delete, Resync, UpdateBatch, o CancelBatch.
    • adFilterFetchedRecords
      Consente di visualizzare i record della cache corrente, vale a dire i risultati dell'ultima chiamata, per recuperare record dal database.
    • adFilterConflictingRecords
      Consente di visualizzare i record che non sono stati aggiornati in modalita' batch nel corso dell'ultimo tentativo.

Osservazioni
Utilizzare questa proprieta' per scegliere in modo selettivo i record del Recordset. Questa operazione ha effetto su altre proprieta' quali AbsolutePosition, AbsolutePage, RecordCount e PageCount che restituiscono valori basati sul cursore corrente, poiche' l'impostazione di Filter su un valore specifico spostera' il record corrente sul primo record che soddisfa il criterio indicato.

La stringa di criteri e' costituita da proposizioni del tipo NomeCampo-Operatore-Valore, ad esempio


"LastName = 'Smith'"
E' possibile creare proposizioni composte concatenando proposizioni singole con AND o OR:

"LastName = 'Smith' AND FirstName = 'John'"
"LastName = 'Smith' OR LastName = 'Jones'"
NomeCampo deve corrispondere a un nome di campo valido dal Recordset. Se il nome di campo contiene spazi, e' necessario racchiudere il nome tra parentesi quadre.

Operatore deve corrispondere a uno degli elementi: <, >, <=, >=, <>, = oppure LIKE.

Valore corrisponde al valore con cui verranno confrontati i valori di campo, ad esempio 'Smith', #8/24/95#, 12,345 o L. 50.000. Utilizzare le virgolette singole con le stringhe e diesis (#) con le date. E' possibile ad esempio utilizzare le virgole decimali, i segni di dollaro e la notazione scientifica. Se Operatore corrisponde a LIKE, in Valore potranno essere utilizzati caratteri jolly. Sono consentiti solo l'asterisco (*) e il segno percentuale (%) purche' siano l'ultimo carattere della stringa. Valore non puo' essere Null.

Non c'e' precedenza tra AND e OR. Č possibile raggruppare le proposizioni tra parentesi. Non e' tuttavia possibile raggruppare le proposizioni unite da OR e quindi unire il gruppo a un'altra proposizione con AND:


(LastName = 'Smith' OR LastName = 'Jones') AND _
  FirstName = 'John'
(LastName = 'Smith' AND FirstName = 'John') OR _
  (LastName = 'Jones' AND FirstName = 'John')
Le costanti del filtro facilitano la risoluzione dei conflitti tra record singoli durante l'aggiornamento in modalita' batch, consentendo di visualizzare ad esempio solo i record modificati durante l'ultima chiamata del metodo UpdateBatch.

E' possibile che Filter non possa essere impostata a causa di un conflitto con i dati del livello inferiore, quando ad esempio un record sia gia' stato eliminato da un altro utente. In tal caso il provider restituira' degli avvisi all'insieme Errors ma non interrompera' l'esecuzione del programma. Si verifichera' un errore in fase di esecuzione solo se esistono conflitti su tutti i record richiesti. Utilizzare Status per individuare i record che presentano conflitti.

Impostando Filter su una stringa di lunghezza zero ("") si otterra' lo stesso risultato ottenuto utilizzando la costante adFilterNone.

Quando viene impostato Filter, la posizione del record corrente viene spostata sul primo record all'interno del sottogruppo filtrato di record del Recordset. Quando il filtro viene eliminato, la posizione del record corrente viene spostata sul primo record del Recordset.

Vedere la proprieta' Bookmark per una descrizione dei valori di segnalibro da cui e' possibile creare una serie da utilizzare con Filter.

LockType Indica il tipo di Lock utilizzato durante la fase di modifica dei dati.

Valori possibili:

  • adLockReadOnly
    Valore predefinito. Di sola lettura: non e' possibile modificare i dati.
  • adLockPessimistic
    Blocco pessimistico, record per record: il provider esegue le operazioni necessarie per completare la modifica dei record, in genere bloccando i record nella fonte dati subito dopo la modifica.
  • adLockOptimistic
    Blocco ottimistico, record per record: il provider blocca i record solo quando viene chiamato il metodo Update.
  • adLockBatchOptimistic
    Aggiornamenti batch ottimistici: necessari per la modalita' di aggiornamento batch rispetto a quella di aggiornamento immediato.

Osservazioni
Utilizzare questa proprieta' prima di aprire il Recordset per specificare il tipo di lock da utilizzare durante le modifiche. Leggere il valore per conoscere il tipo di lock in uso da un Recordset gia' aperto. La proprieta' e' di lettura/scrittura quando il Recordset e' chiuso e di sola lettura quando e' aperto.

E' possibile che il driver non supporti tutti i tipi di lock. Se il tipo di lock richiesto non e' supportato verra' sostituito con un altro supportato. Per determinare la funzionalita' di lock disponibili utilizzare Supports con adUpdate e adUpdateBatch.

Se CursorLocation e' impostata su adUseClient, l'impostazione adLockPessimistic non sara' supportata.

Utilizzo di Remote Data Service
Quando si usa un Recordset del client (ADOR), l'unico valore valido di lock e' adLockOptimisticBatch.

MarshalOptions Quando si utilizza un Recordset del client (ADOR), i record modificati sul client vengono riscritti sul livello intermedio o sul server Web utilizzando una tecnica denominata marshaling. Con questo termine si indica il processo di assemblaggio e invio dei parametri di metodo dell'interfaccia attraverso limiti di thread o processo.
L'impostazione di MarshalOptions consente di ottenere un sensibile miglioramento delle prestazioni quando i dati remoti modificati vengono inviati di nuovo al livello intermedio o al server Web per l'aggiornamento.

I valori possibili sono:

  • adMarshalAll
    Valore predefinito. Indica che tutte le righe verranno restituite al server.
  • adMarshalModifiedOnly
    Indica che solo le righe modificate verranno restituite al server.

MaxRecords Utilizzare questa proprieta' per limitare il numero di record che il driver restituira' dalla fonte dati. L'impostazione predefinita di questa proprieta' e' zero, vale a dire che il provider restituira' tutti i record richiesti.

La proprieta' e' di lettura/scrittura quando il Recordset e' chiuso e di sola lettura quando e' aperto.

PageCount Utilizzare questa proprieta' per determinare il numero di "pagine" di dati contenute nel Recordset.

Le pagine sono gruppi di record le cui dimensioni sono pari all'impostazione di PageSize. Anche se l'ultima pagina e' incompleta, poiche' e' disponibile un numero minore di record rispetto al valore di PageSize, verra' contata come pagina supplementare nel valore di PageCount.

Se il Recordset non supporta questa proprieta', verra' restituito -1 a indicare che non e' possibile determinarne il valore.

Per ulteriori informazioni sulla funzionalita' delle pagine, vedere anche PageSize e AbsolutePage.

PageSize Indica il numero di record che costituiscono una "pagina" del Recordset.

Il valore predefinito e' 10.

Osservazioni
Utilizzare questa proprieta' per determinare il numero di record che costituiscono una pagina logica di dati. L'impostazione delle dimensioni di una pagina consente di utilizzare AbsolutePage per spostarsi sul primo record di una pagina specifica. Si tratta di una funzione utile in ambienti basati su server Web, quando si desidera consentire all'utente di scorrere i dati visualizzando ogni volta solo un numero limitato di record.

Questa proprieta' puņ essere impostata in qualsiasi momento e il valore ottenuto verra' utilizzato per calcolare la posizione del primo record di una pagina specifica.

RecordCount Indica il numero corrente di record contenuti nel Recordset.

Osservazioni
La proprieta' restituira' -1 se il driver non e' in grado di determinare il numero di record. Se la viene letta in un Recordset chiuso, verra' restituito un errore.

Se il Recordset supporta il posizionamento approssimativo o i segnalibri, vale a dire Supports(adApproxPosition) o Supports(adBookmark), RecordCount restituira' il numero esatto di record presenti indipendentemente dal fatto che il RecordSet sia stato completamente compilato oppure no.

In caso contrario e' possibile che il driver tenti il recupero ed il conteggio di tutti i record in modo da restituire un valore preciso.

Sort Permette di specificare uno o piu' nomi di campo in base ai quali viene effettuato l'ordinamento del Recordset, nonche' il tipo di ordinamento, crescente o decrescente.

Il valore deve essere una stringa di nomi di campo separati da virgole, se il nome del campo e' preceduto dalla parola chiave ASCENDING verra' usato un ordinamento crescente, se viene usata la parola chiave DESCENDING verra' usato l'ordinamento decrescente.

I dati non vengono riordinati fisicamente, ma l'accesso viene eseguito in base alla sequenza di ordinamento.

Se CursorLocation e' impostata su adUseClient e non e' ancora disponibile alcun indice, per ciascun campo specificato verra' creato un indice temporaneo.

Impostando questa proprieta' su una stringa vuota verra' ripristinato l'ordinamento originale delle righe e verranno eliminati gli indici temporanei, mentre gli indici esistenti non verranno cancellati.

Source Indica l'origine dei dati del Recordset, cioe' una istruzione SQL, il nome di una tabella, un oggetto Command o il nome di una Stored Procedure.

Osservazioni
Questa proprieta' viene utilizzata per specificare una fonte dati per il Recordset utilizzando un'oggetto Command oppure un'istruzione SQL o una stored procedure o un nome di tabella. La proprieta' e' di lettura/scrittura se il Recordset e' chiuso e di sola lettura quando il Recordset e' aperto.

Se la Source viene impostata su un oggetto Command, la proprieta' ActiveConnection del Recordset ereditera' il valore della stessa proprieta' dell'oggetto Command specificato. La lettura della proprieta' tuttavia non restituira' un oggetto Command bensi' la proprieta' CommandText dell'oggetto Command.

Se Source e' un'istruzione SQL, una stored procedure o un nome di tabella, sara' possibile ottimizzare le prestazioni richiamando l'argomento opz appropriato tramite Open.

State Indica lo stato corrente del Recordset che esegue un metodo asincrono ovvero se e' in fase di connessione, di esecuzione o se sta eseguendo un'operazione di fetch.

Il valore restituito puo' essere una o una combinazione delle seguenti costanti:

  • adStateClosed
    Predefinita. L'oggetto e' chiuso.
  • adStateOpen
    L'oggetto e' aperto.
  • adStateConnecting
    L'oggetto Recordset e' in fase di connessione.
  • adStateExecuting
    L'oggetto Recordset sta eseguendo un comando.
  • adStateFetching
    E' in corso un'operazione di fetch per le righe dell'oggetto Recordset.

Osservazioni
Questa proprieta' puņ essere utilizzata per determinare lo stato corrente di un determinato oggetto in qualsiasi momento. Si tratta di una proprieta' di sola lettura.

Status Indica lo stato del record corrente in relazione agli aggiornamenti in modalita' batch o ad altre operazioni di gruppo.

Restituisce la somma di uno o piu' dei seguenti valori:

  • adRecOK
    L'aggiornamento del record e' riuscito.
  • adRecNew
    Il record e' nuovo.
  • adRecModified
    Il record e' stato modificato.
  • adRecDeleted
    Il record e' stato eliminato.
  • adRecUnmodified
    Il record non e' stato modificato.
  • adRecInvalid
    Il record non e' stato salvato perche' il segnalibro non e' valido.
  • adRecMultipleChanges
    Il salvataggio del record non e' stato eseguito poiche' avrebbe riguardato piu' record.
  • adRecPendingChanges
    Il record non e' stato salvato poiche' si riferisce a un inserimento in sospeso.
  • adRecCanceled
    Il record non e' stato salvato poiche' l'operazione e' stata annullata.
  • adRecCantRelease
    Il nuovo record non e' stato salvato a causa del blocco dei record esistenti.
  • adRecConcurrencyViolation
    Il record non e' stato salvato poiche' era attiva la concorrenza ottimistica.
  • adRecIntegrityViolation
    Il record non e' stato salvato a causa della violazione dei vincoli di integrita' da parte dell'utente.
  • adRecMaxChangesExceeded
    Il record non e' stato salvato a causa di un numero eccessivo di modifiche in sospeso.
  • adRecObjectOpen
    Il record non e' stato salvato a causa di un conflitto con un oggetto di memorizzazione aperto.
  • adRecOutOfMemory
    Il record non e' stato salvato poiche' la memoria necessaria non e' sufficiente.
  • adRecPermissionDenied
    Il record non e' stato salvato poiche' l'utente non dispone delle autorizzazioni sufficienti.
  • adRecSchemaViolation
    Il record non e' stato salvato poiche' viola la struttura del database di origine.
  • adRecDBDeleted
    Il record e' gia' stato eliminato dalla fonte dati.

Osservazioni
Questa proprieta' viene utilizzata per visualizzare le modifiche in sospeso per i record modificati durante l'aggiornamento in modalita' batch.
E' possibile utilizzarla anche per visualizzare lo stato dei record che presentano problemi durante l'esecuzione di operazioni di gruppo come ad esempio quando vengono richiamati i metodi Resync, UpdateBatch o CancelBatch oppure quando la proprieta' Filter viene impostata su una matrice di segnalibri.

Questa proprieta' consente di stabilire la causa dell'errore di un determinato record e correggerlo di conseguenza.

Metodi

Open Apre un recordset.

Sintassi


recordset.Open src, conn, tipo, lock, opz
  • src
    oggetto Command, un'istruzione SQL, un nome di tabella, una chiamata di una Stored Procedure oppure il nome del file di un recordset precedentemente salvato.
  • conn
    oggetto Connection valido o stringa contenente i parametri ConnectionString
  • tipo
    valore che determina il tipo di cursore che il provider deve utilizzare quando apre il Recordset (opzionale).

    Tale valore puņ essere una seguenti costanti:

    • adOpenForwardOnly
      Apre un cursore a scorrimento in avanti (impostazione predefinita).
    • adOpenKeyset
      Apre un cursore direzionabile.
    • adOpenDynamic
      Apre un cursore dinamico.
    • adOpenStatic
      Apre un cursore statico.
    Vedere anche CursorType
  • lock
    Valore che determina il tipo di blocco o concorrenza che il provider deve utilizzare quando apre il recordset (opzionale). Tale valore puo' essere una delle seguenti costanti:
    • adLockReadOnly
      Sola lettura: e' Impossibile modificare i dati (impostazione predefinita).
    • adLockPessimistic
      Blocco pessimistico record per record - Il provider esegue le operazioni necessarie per assicurare la corretta modifica dei record, in genere vincolando i record nella fonte dati in fase di modifica.
    • adLockOptimistic
      Blocco ottimistico record per record - Il provider utilizza il blocco ottimistico, vincolando i record solo quando viene chiamato il metodo Update.
    • adLockBatchOptimistic
      Aggiornamento batch ottimistico - Richiesto per la modalita' di aggiornamento batch in contrapposizione con la modalita' di aggiornamento immediato.
    Vedere anche LockType
  • opz
    Valore che indica come il provider deve valutare l'argomento src se questo non rappresenta un oggetto Command o che il recordset deve essere ripristinato da un file in cui era stato precedentemente salvato (opzionale). Tale valore puņ essere una delle seguenti costanti:
    • adCmdText
      Indica che il provider dovra' valutare src come una definizione in formato testo di un comando.
    • adCmdTable
      Indica che ADO dovra' generare una query SQL per restituire tutte le righe della tabella indicata nell'argomento src.
    • adCmdTableDirect
      Indica che il provider dovra' restituire tutte le righe della tabella indicata nell'argomento src.
    • adCmdStoredProc
      Indica che il provider dovra' valutare src come una stored procedure.
    • adCmdUnknown
      Indica che il tipo di comando nell'argomento src non e' conosciuto.
    • adCommandFile
      Indica che il Recordset fissato o salvato dovra' essere ripristinato dal file indicato nell'argomento src.
    • adExecuteAsync
      Indica che src dovra' essere eseguito in modalita' asincrona.
    • adFetchAsync
      Indica che dopo il fetch della quantita' iniziale specificata nella proprieta' CacheSize deve essere eseguito il fetch asincrono sulle righe rimanenti.

Osservazioni
Utilizzando il metodo Open su un Recordset, si apre un cursore che rappresenta record di una tabella di base, i risultati di una query o un recordset salvato in precedenza.

Utilizzare l'argomento src opzionale per specificare una fonte dati con un oggetto Command, un'istruzione SQL, una stored procedure, un nome di tabella o il percorso completo di un file.

L'argomento conn corrisponde alla proprieta' ActiveConnection e specifica durante quale connessione aprire il Recordset. Se si passa una definizione di connessione per questo argomento, verra' aperta una nuova connessione utilizzando i parametri specificati. E' possibile modificare il valore di questa proprieta' dopo avere aperto il recordset per inviare aggiornamenti a un altro provider.

In Microsoft Visual Basic e' anche possibile impostare questa proprieta' su Nothing per disconnettere il recordset da qualsiasi provider.

Per gli altri argomenti che corrispondono direttamente alle proprieta' del Recordset, ovvero src, tipo e lock, la relazione tra gli argomenti e le proprieta' e' la seguente:

  • La proprieta' e' di lettura/scrittura prima che il Recordset venga aperto.
  • Le impostazioni delle proprieta' vengono utilizzate a meno che non si passino gli argomenti corrispondenti durante l'esecuzione di Open. Se si passa un argomento, questo avra' la priorita' sull'impostazione della proprieta' corrispondente e l'impostazione verra' aggiornata con il valore dell'argomento.
  • Dopo l'apertura del Recordset queste proprieta' diventano di sola lettura.
Nota Nel caso di Recordset di cui Source e' impostata su un oggetto Command valido la proprieta' ActiveConnection e' di sola lettura anche se il Recordset non e' stato aperto.

Se si passa un oggetto Command nell'argomento src insieme a un argomento conn, si verifichera' un errore.

La proprieta' ActiveConnection dell'oggetto Command deve essere gia' impostata su una Connection o su una stringa di connessione.

Se non si passa un oggetto Command nell'argomento src, sara' possibile utilizzare l'argomento opz per ottimizzare la valutazione dell'argomento src. Se l'argomento opz non e' definito, le prestazioni potranno risultare ridotte dal momento che e' necessario effettuare chiamate al provider per determinare se l'argomento e' un'istruzione SQL, una stored procedure o un nome di tabella. Se si conosce il tipo di src in uso, impostando l'argomento opz si indichera' ad ADO di andare direttamente al codice che interessa.

Se l'argomento opz non corrisponde al tipo src, si verifichera' un errore.

Il valore predefinito per l'argomento opz sara' adCommandFile se non vi e' alcuna connessione associata al recordset. Questo e' il caso tipico per i Recordset salvati.

Se la fonte dati non restituisce alcun record, il provider impostera' le proprieta' BOF e EOF su True e la posizione del record corrente non verra' definita. E' ancora possibile aggiungere nuovi dati a questo oggetto Recordset vuoto se il tipo di cursore lo consente.

Una volta concluse le operazioni su un oggetto Recordset aperto, utilizzare il metodo Close per rendere disponibili le risorse di sistema associate. Se si chiude un oggetto, questo non verra' rimosso dalla memoria. Sara' infatti possibile modificarne le impostazioni delle proprieta' e utilizzare il metodo Open per riaprirlo in un secondo momento. Per eliminare completamente un oggetto dalla memoria impostare la variabile oggetto su Nothing.

MoveFirst, MoveLast, MoveNext e MovePrevious Spostano la posizione del record corrente rispettivamente sul primo, sull'ultimo, sul successivo o sul precedente record.

Sintassi


recordset.MoveFirst
recordset.MoveLast
recordset.MoveNext
recordset.MovePrevious
Osservazioni
Un Recordset ha un record definito come "corrente", questo record e' quello a cui e' possibile accedere tramite la collection Fields, e che e' possibile manipolare con i metodi Edit e Delete, i metodi MoveX, consentono di spostarsi all'interno del Recordset, rendendo un altro record come "corrente".

MoveFirst imposta il primo record come corrente, MoveLast imposta l'ultimo, questi sono spostamenti di tipo "assoluto", MoveNext e MovePrevious si basano invece sul record corrente per impostare il successivo o il precedente.

Se l'ultimo record e' il record corrente e si chiama il metodo MoveNext, il record corrente verra' impostato sulla posizione successiva all'ultimo record del recordset, ed EOF sara' impostata a True. Se si tenta di spostare in avanti la posizione del record quando EOF e' True, si generera' un errore.

Allo stesso modo, se il primo record e' il record corrente e si chiama MovePrevious, il record corrente verra' impostato sulla posizione precedente al primo record e BOF verra' impostata a True. Cercare di spostare all'indietro il Recordset quando


Comments are added when and more important if I have the time to review them and after removing Spam, Crap, Phishing and the like. So don't hold your breath. And if your comment doesn't appear, is probably becuase it wasn't worth it.

1 message  this document does not accept new posts

Paolo

Paolo By Paolo posted 23/11/2008 17:10

Grazie. Chiaro e dettagliato.

Previous Next