Sei sulla pagina 1di 4

Loggetto RECORDSET

I databases con Visual Basic


Lezione 2

Concetto di recordset
Loggetto RECORDSET

Loggetto RECORDSET

Il recordset un SET DI RECORD risultante


dall
dall esecuzione di una stringa SQL sul database
o dal richiamo di una tabella del database.
I passaggi da seguire per utilizzare tale strumento
sono:
- Dichiarazione e creazione dell
delloggetto, passaggi
simili, per sintassi, a quelli visti per lloggetto
connection;
- Apertura del recordset;
- Manipolazione del recordset tramite l
lutilizzo dei
suoi metodi e delle sue collezioni.

Apertura del recordset

Il passaggio successivo consiste nell


nellapertura del
recordset, operazione che si esegue richiamando il
metodo OPEN del recordset, seguito da una serie di
parametri che permettono di definire meglio
lapertura del recordset stesso.
I parametri vanno elencati nell
nellordine richiesto,
separati da una virgola.
Visual Basic in grado di aiutare il programmatore
nella fase di inserimento dei dati suggerendo il
parametro, o addirittura i possibili valori, che
devono essere inseriti.

Dopo aver completato la fase consistente


nella creazione del ponte
ponte di
collegamento tra il nostro programma e il
database, occorre iniziare la conoscenza
dell
delloggetto che ci permetter
permetter di
manipolare il nostro database,
interrogandolo o modificandolo.
Tale oggetto loggetto RECORDSET,
RECORDSET, un
oggetto molto potente e complesso.

Dichiarazione e creazione
dell
delloggetto REDORDSET

DICHIARAZIONE DEL RECORDSET


(nella sezione generale o nel modulo)

DIM nomerecordset AS ADODB.RECORDSET


CREAZIONE DEL RECORDSET
(nella routine generale o di gestione dell
dellevento)

SET nomerecordset = NEW ADODB.RECORDSET


Anche in questi casi nomerecordset il nome che
volete assegnare all
alloggetto recordset che
intendete utilizzare

Apertura del recordset


Il parametro SOURCE

Il primo parametro richiesto dal metodo OPEN dell


delloggetto
recordset costituito dall
dallorigine del recordset, ovvero la
stringa SQL o il nome della tabella dalla quale il
recordset deve attingere.
Ovviamente possibile indicare quale origine del recordset
una variabile, una costante o il testo contenuto in un
oggetto del nostro form.
form.
Nel caso in cui si inserisca direttamente il nome della
tabella o la stringa SQL queste vanno inserite tra le
virgolette
Esempio:
Nazioni
Nazioni
select * from Nazioni
Nazioni

Apertura del recordset

Il parametro ACTIVECONNECTION

Il secondo parametro da specificare la


connessione attiva sulla quale il recordset
deve operare.
Il valore di questo parametro sar
sar il nome
dell
delloggetto connection che abbiamo
precedentemente dichiarato, creato e
tramite il quale abbiamo aperto la
connessione al database.

Apertura del recordset

Il parametro CURSORTYPE (2)

Lanalisi dei diversi tipi di cursore alquanto


complessa in quanto coinvolge conoscenze
relative alla condivisione dei databases.
databases.
Il tipo pi
pi adeguato alle nostre esigenze
comunque quello che ci consente la
massima flessibilit
flessibilit e libert
libert nella
manipolazione del database ovvero il tipo
adOpenDynamic.
adOpenDynamic.

Apertura del recordset


Il parametro LOCKTYPE (2)

Anche il tipo di blocco da attuare sul database


costituisce un elemento la cui analisi
approfondita richiede una adeguata conoscenza
dell
dell accesso a database condivisi.
Rispetto alle nostre esigenze e dato che non
opereremo su database condivisi, utilizzeremo il
tipo di blocco che ci consente la maggiore libert
libert
di azione ovvero il tipo adLockOptimistic.
adLockOptimistic.

Apertura del recordset

Il parametro CURSORTYPE (1)

Il cursore loggetto che indica la posizione corrente


all
allinterno del recordset.
Il parametro CURSORTYPE permette di stabilire quali
movimenti tale cursore deve essere in grado di compiere
e pu assumere i seguenti valori:
- adOpenForwardOnly:
adOpenForwardOnly: visualizza ciascuna riga una sola
volta (si muove, cio
cio, solo in avanti (forward
(forward)) nel
recordset;
- adOpenStatic:
adOpenStatic: non visualizza le modifiche eventualmente
fatte da altri utenti connessi al database in quanto crea
una copia statica del database in memoria centrale;
- adOpenKeyset:
adOpenKeyset: visualizza le righe modificate, aggiunte o
eliminate da altri utenti;
- adOpenDynamic:
adOpenDynamic: consente invece un accesso completo
al database anche riguardo alle modifiche da effettuare;

Apertura del recordset


Il parametro LOCKTYPE (1)

Il parametro LOCKTYPE permette di scegliere il tipo di gestione


della concorrenza nel caso di database condivisi cui accedono
contemporaneamente pi
pi utenti.
Pu assumere i seguenti valori:
- adLockReadOnly:
adLockReadOnly: il valore predefinito. Il recordset sar
sar di sola
lettura e non sar
sar quindi possibile modificare i dati;
- adLockPessimistic:Blocco
adLockPessimistic:Blocco pessimistico, record per record: il
provider esegue le operazioni necessarie per completare la
modifica dei record, bloccando i record nella fonte dati subito
dopo llavvenuta modifica;
- adLockOptimistic:Blocco
adLockOptimistic:Blocco ottimistico, record per record: il
provider blocca i record solo quando viene chiamato il metodo
Update;
Update;
- adLockBatchOptimistic:Aggiornamenti
adLockBatchOptimistic:Aggiornamenti batch ottimistici: viene
utilizzato quando il tipo di modifica effettuata sul database non
non
viene eseguita in maniera immediata ma in modalit
modalit batch.
batch.

Apertura del recordset


Il parametro OPTIONS (1)

Il parametro OPTIONS si riferisce al parametro


SOURCE e ne specifica la consistenza.
Pu assumere i seguenti valori:
- adCmdText:
adCmdText: interpreta il parametro SOURCE
come una stringa SQL;
- adCmdTable:
adCmdTable: interpreta il parametro SOURCE
come il nome di una tabella;
- adCmdUnknown:
adCmdUnknown: interpreta il parametro
SOURCE in maniera automatica a seconda del
suo contenuto.

Apertura del recordset Il parametro OPTIONS (2)


Sebbene il valore adCmdUnknown sia senza
dubbio quello di pi
pi facile utilizzo bene
specificare, quando possibile, llesatta
consistenza del parametro SOURCE
attribuendo al parametro OPTIONS il
giusto valore.

Apertura del recordset


Esempio riepilogativo

Riepilogando, llapertura del recordset avviene


richiamando il metodo OPEN dell
delloggetto
RECORDSET facendolo seguire da tutti i
parametri che ne perfezionano la definizione.
Esempio di apertura completa di recordset:
SOURCE

CURSORTYPE

ACTIVECONNECTION

LOCKTYPE

OPTIONS

I metodi di movimento nel recordset (1)

I metodi di movimento nel recordset (2)

Dopo aver aperto il recordset occorre muoversi


all
allinterno di esso, ovvero occorre essere in
grado di spostare il cursore da un record
all
allaltro del recordset.
Tali spostamenti sono possibili richiamando i
metodi di spostamento dell
delloggetto recordset
appena aperto.

I principali metodi di movimento dell


delloggetto
recordset sono i seguenti:
- MOVEFIRST:
MOVEFIRST: sposta il cursore al primo
record del recordset;
- MOVELAST:
MOVELAST: sposta il cursore all
allultimo record
del recordset;
- MOVENEXT:
MOVENEXT: sposta il cursore record
successivo a quello attuale;
- MOVEPREVIOUS:
MOVEPREVIOUS: sposta il cursore al record
precedente quello attuale.

I metodi di movimento nel recordset


Esempio

Se, ad esempio, in una fase del mio applicativo


volessi portarmi al primo record del recordset
attivo scriverei:

nomerecordset.MOVEFIRST
dove nomerecordset il nome assegnato
all
alloggetto recordset definito e creato nel mio
programma.

La collezione FIELDS
Un
Unaltra importante notazione sui recordset
riguarda la collezione FIELDS dell
delloggetto
recordset.
FIELDS una collezione (o insieme) in quanto
racchiude tutti gli oggetti FIELD (cio
(cio tutti i
campi dei record che compongono il
recordset) ed in grado di fornirci numerose
informazioni sui campi stessi, compresi il loro
numero, il loro nome e il loro contenuto.

La collezione FIELDS
Lidentificazione dei campi

All
All interno dell
dell insieme FIELDS ogni campo del record
pu essere identificato inserendo tra parentesi:
- il suo nome tra virgolette;
- il suo indice. L
Lindice di numerazione dei campi
parte da 0, quindi il primo campo del record sar
sar
FIELDS(0), il secondo FIELDS(1) e cos
cos via.

La collezione FIELDS

Esempio di identificazione dei campi

Ad esempio le seguenti istruzioni Visual Basic:


For i = 0 To 3
MsgBox RecSet.Fields(i)
RecSet.Fields(i)
Next i

Lidentificazione di un campo nel record tramite il suo


indice ci permetter
permetter di leggere tutti i campi del
record tramite una struttura di ripetizione
enumerativa (ciclo FOR)

Mi permetteranno di dare in output con una


MessageBox il contenuto,
contenuto, uno per uno,
uno, di tutti
i campi di un record che ne contiene quattro.
quattro.

La collezione FIELDS

La collezione FIELDS

Il nome del campo

Il conteggio dei campi

Dopo aver identificato un campo possibile


conoscerne il nome tramite la propriet
propriet NAME
della collezione FIELDS.
FIELDS.

Infine possibile conoscere il numero dei campi di un


record richiamando la propriet
propriet COUNT dell
dellinsieme
FIELDS.
FIELDS.

Esempio:

Esempio:
Dopo llesecuzione dell
dellistruzione

nomerecordset.FIELDS(0)
.NAME
.FIELDS(0).NAME
restituir
restituir il nome del primo campo del recordset.

numcampi=nomerecordset.FIELDS.COUNT
la variabile numcampi avr
avr come valore il numero dei
campi di cui composto il record del recordset.

Le propriet
propriet EOF e BOF
La propriet
propriet EOF (sigla di End Of File) e BOF
(sigla di Begin Of File) sono propriet
propriet di tipo
booleano di sola lettura che assumono il
valore VERO (TRUE)
TRUE) quando il cursore si trova
oltre llultimo record del recordset attivo (nel
caso di EOF) o prima del primo record del
recordset attivo (nel caso di BOF).
Tali propriet
propriet ci permetteranno quindi di
determinare se il cursore si trova alla fine
(end) o all
allinizio (begin
(begin)) del recordset.

Il metodo CLOSE
Losservazione fatta a suo tempo in merito alla chiusura della
connessione al database valida anche per il recordset.
Non appena abbiamo terminato di operare sul recordset attivo
tale recordset deve essere immediatamente chiuso
richiamando il metodo CLOSE dell
delloggetto recordset per
evitare errori di runrun-time che si verificano quando si tenta di
effettuare operazioni illecite su un recordset aperto.
Esempio:

nomerecordset.CLOSE
dove nomerecordset il nome dell
delloggetto recordset che si
intende chiudere.