Il wiki della programmazione - ADO - Creare uno script che legge un recordset

Home :: Pagine che puntano a questa :: Login/Register

ADO - Creare uno script che legge un recordset

Un Recordset è una struttura dati che contiene molte righe (record) ciasuna delle quali è suddivisa in una serie di campi (field) che hanno dati di un certo tipo.
Per esempio un recordset che contiene un'anagrafica può essere il risultato di una query, e avere una struttura simile a questa:
-- query che popola il recordset
SELECT nome, cognome, data_nascita FROM anagrafica

Recordset di esempio (anagrafica)
Nome Cognome Data_nascita
Mario Rossi 05/06/1984
Franca Bianchi 12/08/1966

Quando si crea un recordset automaticamente è creato un cursore, che tiene traccia di qual è il record corrente.

Creare un recordset

Ci sono almeno tre modi per creare un recordset: tramite il metodo execute di Connection, tramite il metodo execute di Command o creandolo direttamente tramite CreateObject

Usare connection per ottenere un recordset

Un oggetto di tipo Connection può eseguire una query. A seconda del tipo di query eseguita può essere restituito un recordset chiuso (quindi niente di utilizzabile), come per esempio per query di tipo INSERT, UPDATE o DELETE, oppure un recordset aperto per query che iniziano con SELECT o stored procedure che restituiscono un recordset.
Dopo aver aperto la connessione utilizzare Execute per ottenere il recordset:
Set conn = CreateObject("ADODB.Connection")
' StringaDiConnessione va sostituita con una stringa di connessione valida
conn.open "StringaDiConnessione"
' Questo esempio legge una tabella tramite query:
Set rs = conn.execute("SELECT * FROM tabella")
' Questo esempio esegue una stored procedure che restituisce un recordset:
Set rs_SP = conn.execute("SP_LeggiTabella", , adCmdStoredProc)

Esecuzione di un command che restituisce un recordset

Un oggetto di tipo Command esegue un comando su una connessione. Tipicamente Command è usato per passare parametri a una stored procedure, o per rendere più formale - anche se più prolisso - il codice.
Set conn = CreateObject("ADODB.Connection")
' StringaDiConnessione va sostituita con una stringa di connessione valida
conn.open "StringaDiConnessione"
Set comm = CreateObject("ADODB.Command")
comm.ActiveConnection = conn
comm.CommandText = "SP_LeggiTabella"
comm.CommandType = adCmdStoredProc
Set rs = comm.execute

Aprire un recordset esistente

Infine è possibile ottenere un recordset creandolo in anticipo e usando il metodo Open, che prende come parametri la query e la connessione:
Set conn = CreateObject("ADODB.Connection")
' StringaDiConnessione va sostituita con una stringa di connessione valida
conn.open "StringaDiConnessione"
Set rs = CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM tabella", conn

Leggere i dati dal recordset

Leggere una riga alla volta in avanti

Ora che abbiamo un recordset aperto possiamo leggerne i dati, per esempio tramite un ciclo while che si interrompe solo arrivati all'End-Of-File.
EOF è una proprietà del recordset che è vera se il cursore è arrivato alla fine; fa il paio con BOF (Begin-Of-File), che ne indica l'inizio.
Il metodo movenext è supportato da tutti i cursori, e serve a posizionare il cursore al record successivo.
L'esempio seguente presuppone di aver creato un recordset che ha i campi nome e cognome. Crea una stringa vuota, alla quale accoda nome[spazio]cognome[a capo].
' omissis: si parte da un recordset già aperto
elenco = ""
while not rs.EOF
  elenco = elenco & rs("nome") & " " & rs("cognome") & vbNewLine
  rs.MoveNext
wend

Al termine del ciclo la stringa appare simile a:
Mario Rossi
Gina Bianchi
Bruno Verdi

Leggere una riga alla volta indietro

Nota: non tutti i driver supportano l'uso di cursori che scorrono avanti e indietro. Consultare la documentazione del driver di connessione al database per verificare la possibilità di utilizzare questa funzionalità

Aprendo il recordset con un'opzione diversa da quella predefinita (adOpenForwardOnly), che consente di leggere il recordset solo dall'inizio verso avanti, è possibile scorrere il recordset in tutte le direzioni, usando anche MovePrevious, MoveLast, MoveFirst e Move.
L'esempio seguente legge il recordset al contrario (dalla fine all'inizio):
' omissis: si parte da un recordset già aperto
elenco = ""
rs.MoveLast
while not rs.BOF
  elenco = elenco & rs("nome") & " " & rs("cognome") & vbNewLine
  rs.MovePrevious
wend

Leggere più righe contemporaneamente

Nota: non tutti i driver supportano l'uso del metodo GetRows. Consultare la documentazione del driver di connessione al database per verificare la possibilità di utilizzare questa funzionalità

È possibile recuperare più righe contemporaneamente da un recordset utilizzando la funzione GetRows.
L'esempio seguente legge tre record e li memorizza in un array bidimensionale:
' omissis: si parte da un recordset già aperto
elenco = ""
TreRecord = rs.GetRows(3)
for i = lBound(TreRecord) to uBound(TreRecord)
  elenco = elenco & TreRecord(0, i) ' estrae il primo campo della i-esima riga; i campi sono numerati da 0 (zero) a n-1
next

Riferimenti
Il recordset ADO
La connessione ADO
Il comando ADO
Cateogries
ADO

Non ci sono commenti. [Aggiungere un commento]

Valid XHTML 1.0 Strict :: Valid CSS :: Realizzato con Wikka Wakka Wiki 1.1.6.3
Page was generated in 0.0709 seconds