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]