Un database
è un insieme di dati strutturati in cui è possibile effettuare
ricerche e modifiche.
Le operazioni fondamentali che si
possono eseguire su un database sono: inserimento, ricerca,
aggiornamento e cancellazione.
I dati memorizzati nei
database vengono raccolti in tabelle.
Le tabelle vanno
immaginate come delle matrici bidimensionali (righe e
colonne). L'incrocio tra una riga ed una colonna rappresenta
un dato del database. Le righe sono chiamate record, le
colonne campi.
I database possono essere composti da più
tabelle.
Come si possono gestire i database con ASP?
Si
utilizza ADO (ActiveX Data Objects):
ADO consente di
scrivere un'applicazione per la gestione e l'accesso ai dati
contenuti in un server di database tramite un provider OLE DB.
Poiché tuttavia ciascun provider dispone di caratteristiche
uniche, le modalità di interazione tra l'applicazione e ADO
variano leggermente a seconda del provider stesso. Di seguito
tratteremo il provider Microsoft OLE DB per ODBC.
Stabilito
a priori il provider da utilizzare si deve stabilire una
connessione al database, quindi introduciamo l'oggetto
CONNECTION.
L'oggetto Connection rappresenta una
connessione aperta a una fonte dati.
Per creare questo
oggetto bisogna utilizzare la seguente sintassi:
<% Dim objConn Set objConn = Server.CreateObject("ADODB.Connection") %>
|
Una volta creato l'oggetto lo dobbiamo
configurare (indicare quale è la nostra fonte dati e dove si
trova fisicamente) utilizzando la proprietà ConnectionString.
Sintassi:
<% objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& _ Server.MapPath("database.mdb") %>
|
Non ci rimane che aprire la connessione
con
E' possibile evitare l'utilizzo della proprietà
ConnectionString utilizzando la seguente sintassi:
<% objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _ Server.MapPath("database.mdb") %>
|
Molta importanza riveste la chiusura della
connessione, alla fine delle operazioni eseguite su una fonte
dati, per non collassare il server. Queste operazione libera
la parte di memoria associata alla connessione. Per fare ciò
si deve chiudere la connessione e distruggere l'oggetto
connection creato
<% objConn.Close Set objConn = Nothing %>
|
Ora che sappiamo come gestire una connessione
non ci resta che manipolare il nostro
database.
Introduciamo l'oggetto RECORDSET: un oggetto
Recordset rappresenta il set di record estratti da una tabella
del databse interrogato. La sintassi per creare l'oggetto
RecordSet è la seguente:
<% Dim objRS Set objRS = Server.CreateObject("ADODB.RecordSet") %>
|
Per
poter popolare il nostro RecordSet con i record di una tabella
bisogna utilizzare il metodo OPEN
<%objRS.Open Fonte, ConnessioneAttiva, TipoCursore, TipoBlocco, Opzioni%>
|
dove Fonte rappresenta un elemento
Variant che restituisce un nome di variabile oggetto Command
valido, un'istruzione SQL, un nome di tabella, una chiamata di
una stored procedure oppure il nome del file di un recordset
protetto (opzionale); ConnessioneAttiva rappresenta
l'elemento Variant che restituisce un nome di variabile
oggetto Connection valido (nel nostro caso è objConn) o un
elemento String contenente i parametri ConnectionString
(opzionale); TipoCursore rappresenta il valore
CursorTypeEnum che determina il tipo di cursore che il
provider deve utilizzare quando apre il Recordset (è
opzionale). Tale valore può essere una delle costanti che
seguono:
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;
TipoBlocco rappresenta il valore LockTypeEnum che
determina il tipo di blocco o concorrenza che il provider deve
utilizzare quando apre il recordset (è opzionale). Tale valore
può essere una delle costanti che
seguono:
adLockReadOnly Sola lettura;
adLockPessimistic 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 Il provider utilizza il
blocco ottimistico, vincolando i record solo quando viene
chiamato il metodo Update;
adLockBatchOptimistic
Aggiornamento batch ottimistico - Richiesto per la modalità di
aggiornamento batch in contrapposizione con la modalità di
aggiornamento immediato;
Opzioni rappresenta il
valore Long che indica come il provider deve valutare
l'argomento Fonte se questo non rappresenta un oggetto Command
o che il recordset deve essere ripristinato da un file in cui
era stato precedentemente salvato (è
opzionale).
Utilizziamo il seguente esempio per
sintetizzare gli argomenti trattati sino ad ora:
abbiamo un
database di nome mydb.mdb contente una tabella di nome Utenti
composta da due campi (Nome e Cognome) e vogliamo che ne
vengano rappresentati a video tutti i record.
10 <% 20 Dim objConn 30 Set objConn = Server.CreateObject("ADODB.Connection") 40 objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _ 50 Server.MapPath("mydb.mdb") 60 70 Dim objRS 80 Set objRS = Server.CreateObject("ADODB.RecordSet") 90 objRS.Open "Utenti", objConn ...
|
Il mio RecordSet è stato popolato con tutti i
record presenti nella tabella Utenti di mydb.mdb;
come fare
per rappresentarli a video?
Quando si apre un Recordset, il
record corrente corrisponde al primo record se disponibile,
mentre le
proprietà BOF e EOF vengono impostate a False. Se
non sono disponibili record, l'impostazione per BOF
e EOF è
True.
È possibile utilizzare i metodi MoveFirst, MoveLast,
MoveNext, MovePrevious e Move, e le
proprietà
AbsolutePosition, AbsolutePage e Filter per
riposizionare il record corrente, purché il provider
supporti
la relativa funzionalità. Gli oggetti Recordset a
scorrimento in avanti supportano solo il metodo
MoveNext.
Quando si utilizzano i metodi Move per
visualizzare ciascun record o enumerare il Recordset, è
possibile
utilizzare le proprietà BOF ed EOF per verificare
se è stato superato l'inizio o la fine del
Recordset.
Quindi per scorrere il RecodSet utilizzeremo il
metodo MOVENEXT e la proprietà EOF (End Of File)
... 100 Do While Not objRS.EOF 110 Response.Write objRS("Nome") & " " & objRS("Cognome") 120 objRS.MoveNext 130 Loop 140 objRS.Close 150 Set objRS = Nothing 160 170 objConn.Close 180 Set objConn = Nothing 190 %>
|
come per la connessione anche il RecordSet va
chiuso e distrutto per liberare la memoria associata.
Si è
visto come implementare un database in una pagina ASP
(Connection e RecordSet). Vedremo in altre occasioni come
aggiornare, inserire o cancellare dati dai nostri
database.