Il Recordset
Proprietà:
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 può 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 è creato, un cursore
è 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 proprietà
CursorType è
possibile specificare il tipo di cursore da utilizzare. Un cursore può essere
Forward-Only, Static, Keyset-Driven o Dynamic. Il tipo di cursore determina se
il Recordset può essere "scorso" in
avanti e all'indietro o aggiornato.
Il tipo di cursore influisce anche sulla visibilità dei cambiamenti sui singoli
record.
Per default, il cursore è di tipo Read-Only e Forward-Only, cioè è di sola
lettura (non si possono modificare i dati) e può essere "scorso" solo in avanti.
Si può specificare l'utilizzo di un cursore Client-Side o Server-Side usando la
prorpietà
CursorLocation.
La "locazione" del cursore gioca un ruolo molto importante nei Recordset
Disconnessi.
Un
Recordset
può essere creato tramite il metodo
Connection.Execute
o
Command.Execute,
oppure può essere creato a sè 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
|
Proprietà
|
|
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 è vuoto, la posizione corrente è sconosciuta o il provider non supporta
questa proprietà.
- adPosBOF
Il puntatore del record corrente si trova in corrispondenza dell'inizio del file,
vale a dire
BOF è True.
- adPosEOF
Il puntatore del record corrente si trova in corrispondenza della fine del file,
vale a dire
EOF è True.
Osservazioni
Utilizzare questa proprietà per leggere o impostare la pagina attuale. Se si imposta
la pagina attuale il Recordset si posizionerà 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 possibilità di gestire le "pagine" è fornita dal driver di database
che si stà utilizzando. Non è detto che tutti i driver forniscano questa possibiltà.
|
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 è vuoto, la posizione corrente è 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 proprietà 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 può 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 è collegato il Recordset.
Osservazioni
Per Recordset aperti o per Recordset la cui proprietà
Source
è impostata su un
Command
valido, questa proprietà è di sola lettura, in tutti gli altri casi può
essere modificata.
è possibile impostare questa proprietà su una
Connection
esistente o su una stringa di connessione valida. In questo caso il provider creerà
una nuova connessione utilizzando questa definizione. Il provider potrà inoltre
impostare questa proprietà alla nuova
Connection
in modo da ottenere informazioni più complete sull'errore o eseguire altri comandi.
Se si utilizza conn di
Open per aprire il
Recordset,
ActiveConnection ne erediterà il valore.
Se si imposta
Source
su un
Command
valido, questa proprietà erediterà l'impostazione della equivalente proprietà del
Command
usato.
Utilizzo di Remote Data Service
Se utilizzata su un Recordset del client (ADOR), questa proprietà 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 proprietà 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 è vuoto (non contiene nessun record), entrambe le proprietà ritornano
True.
Nota:
Se si elimina l'ultimo record del Recordset, è 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 proprietà 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 funzionalità e se il Recordset è 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 proprietà Bookmark è sempre disponibile quando è utilizzata sui Recordset
del client (ADOR).
|
CacheSize |
Indica il numero di record memorizzati nella cache locale.
Osservazioni
Utilizzare questa proprietà 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 è 10, dopo aver aperto il Recordset,
il driver recupererà i primi 10 record nella memoria locale.
Durante gli spostamenti all'interno del Recordset, il driver restituirà i dati
presenti nel buffer finchè non si cerca di superare i limiti della cache, a questo
punto il driver recupererà un altro gruppo di record dal database.
Il valore di CacheSize
può essere modificato anche se il Recordset è aperto, la modifica del valore tuttavia
ha effetto solo sul numero di record contenuti nella cache dopo l'esecuzione di più
letture successive.
Se sono disponibili meno record di quelli specificati in
CacheSize, il provider restituirà 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.
è in genere possibile scegliere se utilizzare una libreria di cursori del client oppure
una presente sul server. L'impostazione della proprietà non ha effetto sulle connessioni
già aperte. Inoltre non è possibile modificarla se la connessione è già 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 è aggiornata ed
è disponibile solo per garantire la compatibilità 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
sarà possibile usufruire dei vantaggi offerti dalle funzioni che verranno abilitate.
Per garantire la compatibilità con le versioni precedenti, è 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 proprietà 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 è possibile ottenere un miglioramento delle
prestazioni quando è 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 la ricerca
di dati o la generazione di relazioni. Le aggiunte, modifiche o eliminazioni
eseguite da altri utenti non sono visibili.
Osservazioni
Utilizzare questa proprietà per specificare il tipo di cursore da utilizzare
quando viene aperto il Recordset. La proprietà è di lettura/scrittura quando
il Recordset è chiuso e di sola lettura quando è aperto.
Se viene impostato un valore non supportato, non verrà generato alcun errore e
verrà utilizzato il tipo di cursore supportato più vicino.
Se il driver non supporta il tipo di cursore richiesto, è possibile che ne
venga restituito un tipo diverso. CursorType
verrà modificata in modo da corrispondere al tipo di cursore attualmente in uso
quando il Recordset è aperto. Per verificare la funzionalità specifica del cursore
restituito, utilizzare
Supports.
Nella tabella che segue viene illustrata la funzionalità del driver
(identificata dalle costanti di
Supports)
necessaria per ciascun tipo di cursore.
Per un Recordset del tipo indicato,
Supports
dovrà 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) può 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), può essere impostata solo su
adOpenStatic.
|
EditMode |
Indica se il record corrente è in fase di modifica oppure no.
Questa proprietà è di sola lettura, il suo valore può essere:
- adEditNone
Indica che non è in esecuzione alcuna operazione di modifica.
- adEditInProgress
Indica che i dati nel record corrente sono stati modificati ma non salvati.
- adEditAdd
Indica che è stato chiamato
AddNew
e che il record corrente è un nuovo record non salvato nel database.
- adEditDelete
Indica che il record corrente è stato eliminato.
Osservazioni
ADO gestisce un buffer di modifica associato al record corrente. Questa proprietà
indica se sono state apportate modifiche al buffer o se è stato creato un nuovo
record. È 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 più 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 più 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 modalità 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 modalità
batch nel corso dell'ultimo tentativo.
Osservazioni
Utilizzare questa proprietà per scegliere in modo selettivo i record del
Recordset.
Questa operazione ha effetto su altre proprietà quali
AbsolutePosition,
AbsolutePage,
RecordCount e
PageCount
che restituiscono valori basati sul cursore corrente, poichè l'impostazione di
Filter
su un valore specifico sposterà il record corrente sul primo record che soddisfa il
criterio indicato.
La stringa di criteri è costituita da proposizioni del tipo
NomeCampo-Operatore-Valore,
ad esempio
"LastName = 'Smith'"
È 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,
è 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. È 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 (%) purchè siano
l'ultimo carattere della stringa.
Valore non può essere
Null.
Non c'è precedenza tra AND e OR. È possibile raggruppare le proposizioni tra parentesi.
Non è 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 modalità batch, consentendo di visualizzare ad esempio
solo i record modificati durante l'ultima chiamata del metodo UpdateBatch.
È possibile che Filter non possa essere
impostata a causa di un conflitto con i dati del livello inferiore, quando ad esempio
un record sia già stato eliminato da un altro utente. In tal caso il provider restituirà
degli avvisi all'insieme
Errors
ma non interromperà l'esecuzione del programma. Si verificherà 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 otterrà 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 proprietà
Bookmark
per una descrizione dei valori di segnalibro da cui è 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 è 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 modalità di aggiornamento
batch rispetto a quella di aggiornamento immediato.
Osservazioni
Utilizzare questa proprietà 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 già aperto. La proprietà è di
lettura/scrittura quando il Recordset è chiuso e di sola lettura quando è aperto.
È possibile che il driver non supporti tutti i tipi di lock. Se il tipo di lock
richiesto non è supportato verrà sostituito con un altro supportato.
Per determinare la funzionalità di lock disponibili utilizzare
Supports con
adUpdate
e adUpdateBatch.
Se
CursorLocation
è impostata su adUseClient, l'impostazione
adLockPessimistic non sarà supportata.
Utilizzo di Remote Data Service
Quando si usa un Recordset del client (ADOR), l'unico valore valido di lock è
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 proprietà per limitare il numero di record che il driver
restituirà dalla fonte dati. L'impostazione predefinita di questa proprietà è zero,
vale a dire che il provider restituirà tutti i record richiesti.
La proprietà è di lettura/scrittura quando il Recordset è chiuso e di sola lettura
quando è aperto.
|
PageCount |
Utilizzare questa proprietà 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 è incompleta, poichè è disponibile un numero minore di
record rispetto al valore di
PageSize,
verrà contata come pagina supplementare nel valore di
PageCount.
Se il Recordset non supporta questa proprietà, verrà restituito -1 a indicare
che non è possibile determinarne il valore.
Per ulteriori informazioni sulla funzionalità delle pagine, vedere anche
PageSize e
AbsolutePage.
|
PageSize |
Indica il numero di record che costituiscono una "pagina" del Recordset.
Il valore predefinito è 10.
Osservazioni
Utilizzare questa proprietà 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 proprietà può essere impostata in qualsiasi momento e il valore ottenuto
verrà utilizzato per calcolare la posizione del primo record di una pagina specifica.
|
RecordCount |
Indica il numero corrente di record contenuti nel Recordset.
Osservazioni
Questa proprietà ritorna il numero di record contenuti nel Recordset.
La proprietà restituirà -1 se il driver non è in grado di determinare il numero di
record. Se la viene letta in un Recordset chiuso, verrà restituito un errore.
Se il Recordset supporta il posizionamento approssimativo o i segnalibri, vale a dire
Supports(adApproxPosition)
o
Supports(adBookmark),
RecordCount restituirà il numero esatto
di record presenti indipendentemente dal fatto che il RecordSet sia stato completamente
compilato oppure no.
In caso contrario è 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 più nomi di campo in base ai quali viene effettuato
l'ordinamento del Recordset, nonchè 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 è preceduto dalla parola chiave
ASCENDING verrà usato un ordinamento
crescente, se viene usata la parola chiave
DESCENDING verrà usato l'ordinamento
decrescente.
I dati non vengono riordinati fisicamente, ma l'accesso viene eseguito in base alla
sequenza di ordinamento.
Se
CursorLocation
è impostata su
adUseClient e non è ancora disponibile
alcun indice, per ciascun campo specificato verrà creato un indice temporaneo.
Impostando questa proprietà su una stringa vuota verrà 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, cioè una istruzione SQL, il nome di una tabella,
un oggetto
Command
o il nome di una Stored Procedure.
Osservazioni
Questa proprietà 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 proprietà è
di lettura/scrittura se il Recordset è chiuso e di sola lettura quando il Recordset
è aperto.
Se la Source viene impostata su un oggetto
Command,
la proprietà
ActiveConnection
del Recordset erediterà il valore della stessa proprietà dell'oggetto
Command
specificato. La lettura della proprietà tuttavia non restituirà un oggetto
Command
bensì la proprietà
CommandText
dell'oggetto
Command.
Se Source è un'istruzione SQL, una stored
procedure o un nome di tabella, sarà 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 è in fase di connessione, di esecuzione o se sta eseguendo un'operazione di fetch.
Il valore restituito può essere una o una combinazione delle seguenti costanti:
- adStateClosed
Predefinita. L'oggetto è chiuso.
- adStateOpen
L'oggetto è aperto.
- adStateConnecting
L'oggetto Recordset è in fase di connessione.
- adStateExecuting
L'oggetto Recordset sta eseguendo un comando.
- adStateFetching
È in corso un'operazione di fetch per le righe dell'oggetto Recordset.
Osservazioni
Questa proprietà può essere utilizzata per determinare lo stato corrente di un
determinato oggetto in qualsiasi momento. Si tratta di una proprietà di sola lettura.
|
Status |
Indica lo stato del record corrente in relazione agli aggiornamenti in
modalità batch o ad altre operazioni di gruppo.
Restituisce la somma di uno o più dei seguenti valori:
- adRecOK
L'aggiornamento del record è riuscito.
- adRecNew
Il record è nuovo.
- adRecModified
Il record è stato modificato.
- adRecDeleted
Il record è stato eliminato.
- adRecUnmodified
Il record non è stato modificato.
- adRecInvalid
Il record non è stato salvato perchè il segnalibro non è valido.
- adRecMultipleChanges
Il salvataggio del record non è stato eseguito poichè avrebbe riguardato più record.
- adRecPendingChanges
Il record non è stato salvato poichè si riferisce a un inserimento in sospeso.
- adRecCanceled
Il record non è stato salvato poichè l'operazione è stata annullata.
- adRecCantRelease
Il nuovo record non è stato salvato a causa del blocco dei record esistenti.
- adRecConcurrencyViolation
Il record non è stato salvato poichè era attiva la concorrenza ottimistica.
- adRecIntegrityViolation
Il record non è stato salvato a causa della violazione dei vincoli di integrità da parte dell'utente.
- adRecMaxChangesExceeded
Il record non è stato salvato a causa di un numero eccessivo di modifiche in sospeso.
- adRecObjectOpen
Il record non è stato salvato a causa di un conflitto con un oggetto di memorizzazione aperto.
- adRecOutOfMemory
Il record non è stato salvato poichè la memoria necessaria non è sufficiente.
- adRecPermissionDenied
Il record non è stato salvato poichè l'utente non dispone delle autorizzazioni sufficienti.
- adRecSchemaViolation
Il record non è stato salvato poichè viola la struttura del database di origine.
- adRecDBDeleted
Il record è già stato eliminato dalla fonte dati.
Osservazioni
Questa proprietà viene utilizzata per visualizzare le modifiche in sospeso per
i record modificati durante l'aggiornamento in modalità batch.
È 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 proprietà
Filter
viene impostata su una matrice di segnalibri.>br>
Questa proprietà 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 può essere una delle seguenti costanti:
- adLockReadOnly
Sola lettura: è 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 modalità di aggiornamento batch
in contrapposizione con la modalità 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 dovrà valutare src come una definizione in formato
testo di un comando.
- adCmdTable
Indica che ADO dovrà generare una query SQL per restituire tutte le righe della
tabella indicata nell'argomento src.
- adCmdTableDirect
Indica che il provider dovrà restituire tutte le righe della tabella indicata
nell'argomento src.
- adCmdStoredProc
Indica che il provider dovrà valutare src come una stored procedure.
- adCmdUnknown
Indica che il tipo di comando nell'argomento src non è conosciuto.
- adCommandFile
Indica che il Recordset fissato o salvato dovrà essere ripristinato dal file
indicato nell'argomento src.
- adExecuteAsync
Indica che src dovrà essere eseguito in modalità asincrona.
- adFetchAsync
Indica che dopo il fetch della quantità iniziale specificata nella proprietà
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 proprietà
ActiveConnection
e specifica durante quale connessione aprire il Recordset. Se si passa una definizione
di connessione per questo argomento, verrà aperta una nuova connessione utilizzando i
parametri specificati. È possibile modificare il valore di questa proprietà dopo avere
aperto il recordset per inviare aggiornamenti a un altro provider.
In Microsoft Visual Basic è anche possibile impostare questa proprietà su
Nothing per disconnettere il recordset da
qualsiasi provider.
Per gli altri argomenti che corrispondono direttamente alle proprietà del Recordset,
ovvero src, tipo e lock, la relazione tra gli argomenti e le
proprietà è la seguente:
- La proprietà è di lettura/scrittura prima che il Recordset venga aperto.
- Le impostazioni delle proprietà vengono utilizzate a meno che non si passino
gli argomenti corrispondenti durante l'esecuzione di Open. Se si passa un argomento,
questo avrà la priorità sull'impostazione della proprietà corrispondente e
l'impostazione verrà aggiornata con il valore dell'argomento.
- Dopo l'apertura del Recordset queste proprietà diventano di sola lettura.
Nota Nel caso di Recordset di cui
Source
è impostata su un oggetto
Command
valido la proprietà
ActiveConnection
è di sola lettura anche se il Recordset non è stato aperto.
Se si passa un oggetto
Command
nell'argomento src insieme a un argomento
conn, si verificherà un errore.
La proprietà
ActiveConnection
dell'oggetto
Command
deve essere già impostata su una
Connection
o su una stringa di connessione.
Se non si passa un oggetto
Command
nell'argomento src, sarà possibile
utilizzare l'argomento opz per ottimizzare la valutazione dell'argomento
src. Se l'argomento opz non è definito, le prestazioni potranno
risultare ridotte dal momento che è necessario effettuare chiamate al provider per
determinare se l'argomento è 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 indicherà ad ADO di andare direttamente al codice che interessa.
Se l'argomento opz non corrisponde al tipo src, si verificherà un errore.
Il valore predefinito per l'argomento opz sarà
adCommandFile
se non vi è alcuna connessione associata al recordset. Questo è il caso tipico per i
Recordset salvati.
Se la fonte dati non restituisce alcun record, il provider imposterà le proprietà
BOF e EOF
su True e la posizione del record corrente non verrà definita. È 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 verrà rimosso dalla memoria. Sarà infatti possibile modificarne le
impostazioni delle proprietà 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 è quello
a cui è possibile accedere tramite la collection
Fields,
e che è 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 è il record corrente e si chiama il metodo MoveNext, il record
corrente verrà impostato sulla posizione successiva all'ultimo record del recordset,
ed
EOF
sarà impostata a True. Se si tenta di spostare in avanti la posizione del record
quando EOF è True, si genererà un errore.
Allo stesso modo, se il primo record è il record corrente e si chiama MovePrevious,
il record corrente verrà impostato sulla posizione precedente al primo record e
BOF
verrà impostata a True. Cercare di spostare all'indietro il Recordset quando BOF
è True genererà un errore.
Se il recordset è a scorrimento in avanti e si desidera uno scorrimento sia
in avanti che all'indietro, sarà possibile utilizzare la proprietà
CacheSize
per creare una cache di record che supporti lo spostamento all'indietro del
cursore con i metodi MoveX. Dal momento che i record nella cache vengono caricati
in memoria, si consiglia di non inserire nella cache più record di quelli
necessari. È possibile chiamare il metodo MoveFirst in un oggetto Recordset
a scorrimento in avanti, anche se in questo caso il provider potrebbe rieseguire
il comando che ha generato l'oggetto Recordset.
|
Move |
Sposta la posizione del record corrente in un oggetto Recordset.
Sintassi
recordset.Move record, start
Parametri
- record
numero che specifica di quanti record deve essere spostata la posizione del record
corrente. Se si specifica un numero negativo, la posizione viene spostata verso
l'inizio del Recordset, specificando un numero positivo la posizione viene spostata
verso la fine del Recordset.
- start
Specifica da dove partire per applicare lo spostamento, è possibile utilizzare
un
Bookmark
oppure uno dei seguenti valori:
- adBookmarkCurrent
Inizia dal record corrente (impostazione predefinita).
- adBookmarkFirst
Inizia dal primo record.
- adBookmarkLast
Inizia dall'ultimo record.
Osservazioni
Se utilizzando Move si supera l'inizio o la fine del Recordset, la corrispondente
proprietà
EOF
o
BOF
verrà impostata a True, ed il record corrente verrà posizionato appena
oltre il primo o ultimo record.
Utilizzare Move su un Recordset vuoto genera un errore.
Utilizzando start, è possibile controllare da che punto iniziare il movimento,
a condizione che il Recordset supporti i segnalibri. Se non è specificato, lo spostamento
sarà relativo al record corrente.
Se si sta utilizzando la proprietà
CacheSize
per inserire localmente nella cache i
record del provider, il passaggio di un argomento record che comporta lo
spostamento del record corrente al di fuori del gruppo corrente di record presenti nella
cache forzerà il recupero di un nuovo gruppo di record a partire da quello di destinazione.
CacheSize
determina la dimensione del gruppo recuperato e il record di destinazione corrisponde al
primo record recuperato.
Se il Recordset è a solo scorrimento in avanti, sarà comunque possibile passare un
argomento record minore di zero purchè la destinazione sia nell'ambito del
gruppo corrente di record nella cache. Se dopo che è stato chiamato il metodo Move
la posizione del record corrente si sposta oltre il primo record presente nella cache,
si verificherà un errore. È pertanto possibile utilizzare una cache di record che
supporti lo scorrimento in entrambe le direzioni anzichè un provider che supporta solo
lo scorrimento in avanti. Dal momento che i record della cache vengono caricati in
memoria, si consiglia di evitare di inserire nella cache più record di quelli
necessari. Anche se in questo modo un oggetto Recordset a scorrimento in avanti
supporta lo scorrimento all'indietro, se si chiama il metodo
MovePrevious
su un qualsiasi oggetto Recordset a scorrimento in avanti si genererà un errore.
|
Resync |
Aggiorna i dati del Recordset corrente in base al database corrispondente.
Sintassi
recordset.Resync records, valori
Parametri
- records
numero di record che saranno interessati dal metodo Resync (opzionale).
Può essere una delle seguenti costanti:
- adAffectCurrent
Aggiorna solo il record corrente.
- adAffectGroup
Aggiorna i record che soddisfano l'impostazione corrente della proprietà
Filter .
È necessario che
Filter
sia valida per potere utilizzare questa opzione.
adAffectAll
Aggiorna tutti i record inclusi quelli nascosti in base all'impostazione
corrente di
Filter
(impostazione predefinita).
valori
specifica se i valori corrispondenti devono essere sovrascritti (opzionale).
Può essere una delle seguenti costanti:
- adResyncAllValues
I dati vengono sovrascritti e gli aggiornamenti in sospeso vengono annullati
(impostazione predefinita).
- adResyncUnderlyingValues
I dati non vengono sovrascritti e gli aggiornamenti in sospeso non vengono annullati.
Osservazioni
Utilizzare questo metodo per risincronizzare i record del recordset corrente
in base al database corrispondente. Questa funzionalità è utile se si sta utilizzando
un cursore statico o a scorrimento in avanti, ma si desidera vedere le modifiche nel
database corrispondente.
A differenza di
Requery,
Resync non riesegue il comando corrispondente
dell'oggetto Recordset. I nuovi record del database corrispondente non saranno pertanto
visibili.
Se non è possibile risincronizzare i record a causa di un conflitto con i dati
corrispondente, ad esempio perchè un record è già stato eliminato da un altro
utente, il provider restituirà una serie di avvisi all'insieme
Errors
e si verificherà un errore in fase di esecuzione. Utilizzare la proprietà
Filter.
(adFilterConflictingRecords) e la proprietà
Status
per individuare i record con conflitti.
Utilizzo di Remote Data Service
Resync non è disponibile su un Recordset
sul lato client.
|
Requery |
Aggiorna i dati del Recordset rieseguendo la query
Sintassi
recordset.Requery opz
opz: Maschera di bit che indica le opzioni che interessano
l'operazione (opzionale). Se questo parametro è impostato su
adExecuteAsync, l'operazione verrà eseguita
in modalità asincrona e al termine verrà inoltrato un evento
RecordsetChangeComplete.
Osservazioni
Utilizzare questo metodo per aggiornare l'intero contenuto del Recordset in base alla
fonte dati inoltrando di nuovo il comando originale e recuperando i dati una seconda
volta. La chiamata di questo metodo equivale alla chiamata dei metodi
Close
e
Open
in successione. Se si modifica il record corrente o si aggiunge un nuovo record, si
verificherà un errore.
Mentre il Recordset è aperto, le proprietà che definiscono la natura del cursore, ovvero
CursorType,
LockType,
MaxRecords
e così via, sono di sola lettura. Requery
consente pertanto di aggiornare solo il cursore corrente. Per modificare una delle
proprietà del cursore e vedere i risultati, è necessario utilizzare il metodo
Close
in modo che le proprietà diventino nuovamente di lettura/scrittura. È quindi
possibile modificare le impostazioni delle proprietà e chiamare il metodo
Open
per riaprire il cursore.
|
Save |
Salva o fissa il Recordset in un file.
Sintassi
recordset.Save nomefile, formato
Parametri
- nomefile
Path completo del file in cui deve essere salvato il recordset.
- formato
Formato in cui deve essere salvato il recordset (opzionale).
adPersistADTG è attualmente il valore
predefinito e l'unico valore valido.
Osservazioni
Save può essere chiamato solo su un
Recordset aperto. Utilizzare
Open
per ripristinare in un secondo tempo il recordset dal file creato.
Se la proprietà
Filter
è attiva, verranno salvate solo le righe accessibili dopo l'applicazione del
filtro. Se il recordset è gerarchico, verranno salvati il recordset secondario
e le relative righe secondarie associate, ma non il recordset principale.
Se il Recordset viene salvato per la prima volta, specificare nomefile.
Se in seguito viene richiamato nuovamente Save,
omettere nomefile altrimenti si verificherà un errore in fase di esecuzione.
Se in seguito viene richiamato il
Save con un nuovo nomefile,
il Recordset verrà salvato nel nuovo file. Ambedue i file verranno tuttavia aperti.
Chiamando Save il Recordset non si chiude.
È quindi possibile continuare a lavorare e salvare le ultime modifiche apportate.
Il file di salvataggio rimane aperto finchè non viene chiuso il Recordset e in
questo arco di tempo è possibile leggere lo stesso file con altre applicazioni,
ma non scrivere su di esso.
Per motivi di protezione, Save non può
essere utilizzato da uno script eseguito in Internet Explorer.
Durante un fetch, un'esecuzione o un aggiornamento asincrono
Save viene sospeso fino al termine
dell'operazione.
Al termine del salvataggio dei dati, la prima riga del Recordset sarà quella corrente.
|
Delete |
Elimina il record corrente o un gruppo di record.
Sintassi
recordset.Delete records
records numero di record che saranno interessati dalla cancellazione, può
essere una delle seguenti costanti:
- adAffectCurrent
Elimina solo il record corrente (impostazione predefinita).
- adAffectGroup
Elimina i record che soddisfano l'impostazione corrente della proprietà
Filter
. Per potere utilizzare questa opzione, è necessario impostare la proprietà
Filter
su un valore valido.
Osservazioni
Utilizzando Delete si contrassegna per
l'eliminazione il record corrente o un gruppo di record. Se il Recordset non consente
l'eliminazione dei record, si verificherà un errore. Nella modalità di aggiornamento
immediato le eliminazioni verranno eseguite immediatamente nel database.
In caso contrario, i record verranno contrassegnati per l'eliminazione dalla cache
e l'effettiva eliminazione verrà eseguita quando si chiamerà
UpdateBatch.
Per visualizzare i record eliminati, utilizzare la proprietà
Filter.
Il recupero dei valori dei campi dal record eliminato genera un errore. Dopo
l'eliminazione, il record corrente rimane tale fin quando non ci si sposta su un
record differente. Una volta che ci si è spostati dal record eliminato, non sarà
più possibile accedere al record eliminato.
Se in una transazione le eliminazioni vengono nidificate, è possibile recuperare i
record eliminati richiamando
RollbackTrans.
Nella modalità di aggiornamento batch è possibile annullare un'eliminazione o un
gruppo di eliminazioni in sospeso richiamando
CancelBatch.
Se non è possibile eliminare i record a causa di un conflitto con i dati
corrispondenti, ad esempio perchè un record è già stato eliminato da un altro
utente, il provider restituirà una serie di avvisi all'insieme
Errors
ma l'esecuzione del programma non verrà interrotta. Si verificherà un errore in
fase di elaborazione solo se vi sono conflitti su tutti i record richiesti.
Per individuare i record che presentano conflitti, utilizzare la proprietà
Filter
(adFilterAffectedRecords) e la proprietà
Status.
|
UpdateBatch |
Scrive sul disco tutti gli aggiornamenti batch in sospeso.
Sintassi
recordset.UpdateBatch records
records numero di records che saranno interessati dall'aggiornamento (opzionale).
Può essere una delle seguenti costanti:
- adAffectCurrent
Scrive le modifiche in sospeso solo per il record corrente.
- adAffectGroup
Scrive le modifiche in sospeso per i record che soddisfano l'impostazione corrente
della proprietà
Filter
se questa è impostata su un valore valido.
- adAffectAll
Scrive le modifiche in sospeso per tutti i record, inclusi quelli nascosti in
base all'impostazione corrente di
Filter
(impostazione predefinita).
Osservazioni
Usare questo metodo quando si modifica un Recordset nella modalità di aggiornamento
batch per trasmettere tutte le modifiche apportate al database corrispondente.
Se il Recordset supporta l'aggiornamento batch, sarà possibile memorizzare localmente
nella cache diverse modifiche per uno o più record finchè non verrà chiamato
UpdateBatch. Se si modifica il record
corrente o si aggiunge un nuovo record quando si chiama
UpdateBatch, verrà automaticamente chiamato
Update
per salvare le modifiche in sospeso per il record corrente prima di trasmettere al
provider le modifiche in gruppi.
Nota utilizzare l'aggiornamento batch solo con un cursore direzionabile
o statico.
Se non è possibile eliminare i record a causa di un conflitto con i dati
corrispondenti, ad esempio perchè un record è già stato eliminato da un altro
utente, il provider restituirà una serie di avvisi all'insieme
Errors
ma l'esecuzione del programma non verrà interrotta. Si verificherà un errore in
fase di elaborazione solo se vi sono conflitti su tutti i record richiesti.
Per individuare i record che presentano conflitti, utilizzare la proprietà
Filter
(adFilterAffectedRecords) e la proprietà
Status.
Per annullare tutti gli aggiornamenti batch in sospeso, utilizzare
CancelBatch.
|
CancelBatch |
Annulla un aggiornamento batch in sospeso.
Sintassi
recordset.CancelBatch records
records numero di records che verranno interessati (opzionale).
Può essere una delle seguenti costanti:
- adAffectCurrent
solo il record corrente.
- adAffectGroup
tutti i record che soddisfano l'impostazione corrente della proprietà
Filter
se questa è impostata su un valore valido
- adAffectAll
tutti i record del Recordset, inclusi quelli nascosti in base all'impostazione
corrente di
Filter
(impostazione predefinita).
Osservazioni
Utilizzare CancelBatch per annullare qualsiasi aggiornamento in sospeso
nella modalità di aggiornamento batch. Se il recordset è nella modalità di
aggiornamento immediato, chiamando
CancelBatch senza
adAffectCurrent si genererà un errore.
Se si sta modificando il record corrente o si sta aggiungendo un nuovo record
quando si chiama
CancelBatch, verrà innanzitutto chiamato il
metodo
CancelUpdate
per annullare le modifiche nella cache, quindi annullerà tutte le modifiche in sospeso
nel recordset.
Talvolta non è possibile determinare il record corrente dopo una chiamata del
metodo
CancelBatch,
soprattutto in caso di aggiunta di un nuovo record. Si consiglia quindi di
impostare la posizione del record corrente su una posizione conosciuta all'interno
del recordset dopo la chiamata a
CancelBatch. Chiamare ad esempio il
metodo
MoveFirst.
Se non è possibile annullare gli aggiornamenti in sospeso a causa di un conflitto
con i dati corrispondenti, ad esempio perchè un record è già stato eliminato da
un altro utente, il provider restituirà una serie di avvisi all'insieme
Errors
ma l'esecuzione del programma non verrà interrotta. Si verificherà un errore in
fase di elaborazione solo se vi sono conflitti su tutti i record richiesti.
Per individuare i record che presentano conflitti, utilizzare la proprietà
Filter
(adFilterAffectedRecords) e la proprietà
Status.
|
CancelUpdate |
Annulla qualsiasi modifica apportata al record corrente o a un nuovo record prima
di chiamare il metodo
Update.
Sintassi
recordset.CancelUpdate
Osservazioni
Utilizzare CancelUpdate per annullare
qualsiasi modifica apportata al record corrente o per eliminare un record appena
aggiunto. Non è possibile annullare le modifiche nel record corrente o in un nuovo
record dopo avere chiamato
Update,
a meno che queste non facciano parte di una transazione che è possibile annullare con
RollbackTrans
o di un aggiornamento batch che è possibile annullare con
CancelBatch.
Se si sta aggiungendo un nuovo record quando si chiama
CancelUpdate, il record che costituiva
il record corrente prima della chiamata
AddNew
sarà ancora tale.
Se non sono state apportate modifiche al record corrente o non è stato aggiunto un
nuovo record, chiamando CancelUpdate si
genererà un errore.
|
Update |
Salva le modifiche apportate al record corrente.
Sintassi
recordset.Update fields, values
Parametri
- fields
Elemento che rappresenta un singolo nome o elenco di valori che rappresenta i nomi
o le posizioni ordinali del campo o dei campi che si desidera modificare (opzionale).
- values
Elemento che rappresenta un singolo valore o elenco di valori che rappresenta i
valori del campo o dei campi nel nuovo record (opzionale).
Osservazioni
Utilizzare Update per salvare le modifiche
apportate al record corrente a partire dalla chiamata del metodo
AddNew
o dalla modifica di un valore qualsiasi di un campo in un record esistente.
Il Recordset deve supportare gli aggiornamenti.
Per impostare i valori dei campi, effettuare una delle seguenti operazioni:
- Assegnare valori alla proprietà
Value
di un oggetto
Field
e chiamare
Update.
- Passare un nome di campo e un valore come argomenti chiamando
Update.
- Passare una matrice di nomi di campo e una matrice di valori chiamando
Update.
Quando si utilizzano elenchi di campi e di valori, deve essere presente lo stesso
numero di elementi in entrambe gli elenchi. L'ordine dei nomi dei campi deve
inoltre corrispondere all'ordine dei valori dei campi. Se il numero e l'ordine dei
campi e dei valori non corrispondono, si verificherà un errore.
Se il Recordset supporta l'aggiornamento batch, sarà possibile memorizzare localmente
nella cache diverse modifiche per uno o più record ed utilizzare poi
UpdateBatch.
Se si modifica il record corrente o si aggiunge un nuovo record quando si chiama
UpdateBatch,
verrà chiamato automaticamente Update
per salvare le modifiche in sospeso per il record corrente prima di trasmettere al
provider le modifiche in gruppi.
Se ci si sposta dal record che si sta aggiungendo o modificando prima di chiamare
Update, questi verrà automaticamente
richiamato per salvare le modifiche. Se si desidera annullare le modifiche apportate
al record corrente o eliminare un record appena aggiunto, è necessario chiamare
CancelUpdate.
Il record corrente rimane tale anche dopo che è stato chiamato il metodo Update.
|
AddNew |
Crea un nuovo record per un Recordset aggiornabile.
Sintassi
recordset.AddNew fields, values
Parametri
- fields
Nome o elenco di nomi o di posizioni ordinali per i campi nel nuovo record (opzionale).
- values
Valore o elenco di valori per i campi nel nuovo record (opzionale).
Se fields è un elenco, anche values dovrà essere un elenco con lo stesso
numero di elementi, altrimenti si verificherà un errore. L'ordine dei nomi dei campi
deve corrispondere all'ordine dei valori dei campi in ciascun elenco.
Osservazioni
Utilizzare AddNew per creare e inizializzare
un nuovo record. Utilizzare il metodo
Supports
con
adAddNew per verificare se è possibile
aggiungere record al Recordset corrente.
Dopo che è stato chiamato AddNew, il nuovo
record diventa il record corrente e rimane tale finchè non viene richiamato
Update.
Se il Recordset non supporta segnalibri, potrebbe non essere possibile accedere al
nuovo record dopo essersi spostati su un altro record. A seconda del tipo di cursore,
potrebbe essere necessario chiamare
Requery
per rendere accessibile il nuovo record.
Se viene chiamato AddNew durante la modifica
del record corrente o durante l'aggiunta di un nuovo record, ADO chiamerà il metodo
Update
in modo che le modifiche vengano salvate, quindi creerà il nuovo record.
Il comportamento di
AddNew dipende dalla modalità di
aggiornamento del Recordset e dal fatto che vengano o meno passati gli argomenti
fields e values.
Nella modalità di aggiornamento immediato, ovvero nella modalità in cui il provider
apporta le modifiche nella fonte dati corrispondente dopo che è stato chiamato il
Update,
se si chiama il metodo AddNew senza
argomenti
EditMode
verrà impostata su adEditAdd.
Il provider memorizza nella cache qualsiasi modifica dei valori dei campi
apportata localmente. Se si chiama il metodo
Update,
il nuovo record verrà inserito nel database ed
EditMode
verrà reimpostata su
adEditNone.
Se si passano gli argomenti fields e values, il nuovo record verrà
inserito immediatamente nel database, senza che sia necessario chiamare
Update.
Il valore di
EditMode
non verrà tuttavia modificato.
Nella modalità di aggiornamento batch, ovvero nella modalità in cui il provider
memorizza nella cache più modifiche e le apporta nella fonte dati corrispondente
solo quando viene chiamato
UpdateBatch,
se si chiama AddNew senza argomenti,
EditMode
verrà impostata su adEditAdd.
Il provider memorizza nella cache qualsiasi modifica dei valori dei campi apportata
localmente. Se si chiama
Update,
il nuovo record verrà aggiunto al recordset corrente ed
EditMode
verrà reimpostata su adEditNone, ma il
provider non inserirà le modifiche nel database corrispondente finchè non verrà
chiamato
UpdateBatch.
Se si passano gli argomenti fields e values, ADO invierà il nuovo
record al provider perchè lo memorizzi nella cache. Per inoltrare il nuovo record
al database corrispondente, è necessario chiamare
UpdateBatch.
|
Supports |
Consente di determinare se il Recordset supporta o mento una particolare funzione
o caratteristica.
Sintassi
booleano = recordset.Supports( opz )
Ritorna True se le caratteristiche
specificate da opz sono supportate dal Recordset, altrimenti ritorna
False.
Parametri
opz è un valore che può essere composto da uno o più delle costanti
seguenti:
- adAddNew
È possibile utilizzare
AddNew
per aggiungere nuovi record.
- adApproxPosition
È possibile leggere e impostare le proprietà
AbsolutePosition
e
AbsolutePage.
- adBookmark
Il Recordset supporta i
Bookmark.
- adDelete
È possibile utilizzare
Delete
per eliminare record.
- adHoldRecords
È possibile recuperare più record o modificare la successiva posizione di
recupero senza confermare tutte le modifiche in sospeso.
- adMovePrevious
È possibile utilizzare
MoveFirst, MovePrevious...,
Move
o
GetRows
per spostare all'indietro la posizione del record corrente senza utilizzare segnalibri.
- adResync
È possibile aggiornare il cursore con i dati visibili nel database
corrispondente utilizzando
Resync.
- adUpdate
È possibile utilizzare
Update
per modificare i dati esistenti.
- adUpdateBatch
È possibile utilizzare l'aggiornamento batch mediante
UpdateBatch
e
CancelBatch
per trasmettere al provider le modifiche in gruppi.
Osservazioni
Anche se Supports può restituire
True per una determinata funzione, questo non garantisce che il provider possa sempre
rendere disponibile tale funzione. Supports
indica semplicemente se il provider supporta o meno quella specifica funzione, a
condizione che alcuni criteri specificati siano soddisfatti.
Supports consente ad esempio di indicare che
un Recordset supporta gli aggiornamenti anche se il cursore è basato su un join a più
tabelle di cui alcune colonne non sono aggiornabili.
|
Clone |
Crea un Recordset duplicato da un Recordset esistente. Se lo si desidera, è
possibile specificare che il clone sia di sola lettura.
Sintassi
Set rstDuplicato = rstOriginale.Clone(lock)
Valori restituiti
Restituisce un riferimento ad un nuovo Recordset
Parametri
- rstDuplicato
Variabile che identifica il nuovo Recordset che si sta creando.
- rstOriginale
Recordset che si desidera duplicare.
- lock
specifica il tipo di lock del Recordset originale o un recordset di sola lettura (opzionale).
- adLockUnspecified
Clone creato con lo stesso tipo di blocco dell'originale (impostazione predefinita).
- adLockReadOnly
Clone di sola lettura.
Osservazioni
Utilizzare Clone per creare più Recordset
duplicati, in particolare se si desidera mantenere più di un record corrente in un
dato gruppo di record. L'utilizzo di Clone
è più efficace rispetto alla creazione e all'apertura di un nuovo Recordset con la
stessa definizione dell'originale.
Il record corrente di un clone appena creato viene impostato sul primo record.
Le modifiche apportate ad un Recordset sono visibili in tutti i relativi cloni,
indipendentemente dal tipo di cursore. Dopo avere eseguito
Requery
sul recordset originale, i cloni non saranno tuttavia più sincronizzati con
l'originale.
Chiudendo il recordset originale non si chiudono le relative copie e chiudendo
una copia non si chiude l'originale o alcuna delle altre copie.
È possibile clonare solo Recordset che supportano i segnalibri. I valori dei
segnalibri sono intercambiabili, vale a dire che un segnalibro di un Recordset
fa riferimento allo stesso record di tutti i relativi cloni.
|
GetRows |
Recupera più righe da un Recordset.
Sintassi
Set varMatrice = recordset.GetRows(numrighe)
varMatrice Lista in cui vengono memorizzati i record restituiti
numrighe Numero di record da recuperare
Osservazioni
Utilizzare GetRows per copiare record
da un Recordset. GetRows restituisce una
matrice bidimensionale. Il primo indice identifica il campo, mentre il secondo identifica
il numero di riga.
Nel seguente esempio, intCampo identifica
il campo e intRecord identifica il
numero di riga:
avarRecord(intCampo, intRecord)
Per ottenere il primo valore di campo nella seconda riga, utilizzare un codice simile
a questo:
campo1 = avarRecord(0,1)
Per ottenere il secondo valore di campo nella prima riga, utilizzare un codice
simile a questo:
campo2 = avarRecord(1,0)
Quando GetRows restituisce i dati, la
variabile avarRecord diventa
automaticamente una matrice bidimensionale.
Se si richiedono più righe di quante ne sono disponibili,
GetRows restituisce solo il numero di
righe disponibili. È possibile utilizzare la funzione
UBound per determinare il numero di
righe effettivamente recuperato da
GetRows, in quanto la matrice viene
dimensionata per contenere la quantità di righe restituite.
Il numero di righe che è possibile recuperare è vincolato dalla quantità di memoria
disponibile. Non utilizzare
GetRows per recuperare in una matrice
un'intera tabella se quest'ultima è di grandi dimensioni.
Poichè GetRows restituisce nella matrice
tutti i campi del Recordset, compresi i campi di tipo Memo e di tipo Long Binary,
per limitare il numero di campi restituiti si potrebbe utilizzare una query.
Dopo una chiamata a GetRows, il record
corrente viene posizionato sulla successiva riga non letta. Questo significa che
GetRows ha sul record corrente lo stesso
effetto di
Move numrighe.
Se si sta tentando di recuperare tutte le righe utilizzando più chiamate a
GetRows, utilizzare la proprietà
EOF
per essere sicuri di essere alla fine del Recordset. Se si trova alla fine del
Recordset, o se non riesce a recuperare una riga inclusa nell'intervallo richiesto,
GetRows restituisce un numero di
righe minore rispetto a quello richiesto. Se, ad esempio, si sta tentando di
recuperare 10 record, ma non si riesce a recuperare il quinto di essi,
GetRows restituisce quattro record e
rende corrente il quinto. Non verrà generato alcun errore di run-time. Questo
errore può verificarsi se un record in un Recordset di tipo dynaset viene eliminato
da un altro utente.
|
|