Il Modello ad Oggetti di ADO - Il Recordset (metodi)


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Imposta lingua:en it | Login/Register


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.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

Nessun messaggio this document does not accept new posts

Precedente Successivo


Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di Hosting in Olanda.

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gojira