Attenzione: Causa la quantita' di informazioni, questa pagina e'
divisa in due. In questa meta' si trovano i metodi', le
proprieta' sono invece in questa.
Torna alla mappa
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 EOF è True, si 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.
|
|