Settima Lezione
Sommario:
I Database:
- Concetto, applicazioni, struttura
- Connessione a un database
- L'oggetto Recordset
Concetto, applicazioni, struttura
Finalmente eccoci ai database! Già abbiamo avuto occasione di dirvi che Asp trova il meglio della
sua potenzialità applicativa nei database. Abbiamo anche visto nella lezione 6 come creare, leggere
e scrivere nei files, il che può essere utile in determinate circostanze; c'è però una differenza
rispetto al fare le stesse azioni con i database: i files vanno utilizzati in maniera sequenziale mentre i
database in maniera causale. Facciamo un esempio: se i dati relativi agli utenti li aveste tutti dentro
a files diversi, per trovare uno di tali dati dovreste esaminare il contenuto dei vari files o, ammesso
che gli stessi fossero in un unico file, dovreste comunque esaminarlo tutto non essendo possibile limitare e
mirare la lettura soltanto al dato che vi occorre.
Questo non avviene con i database i quali hanno delle caratteristiche che consentono l'agevole creazione,
lettura e manipolazione con la possibilità di estrarre, con poche righe di codice, anche un solo elemento
inserito entro altre migliaia di dati.
Un database (o base di dati) è come un archivio in cui possono essere memorizzati grandi quantità di dati.
In questo archivio i dati possono essere inseriti, cancellati, aggiornati e aggiunti; ma ancora di più:
specificando determinate premesse, possono essere filtrati i risultati della ricerca di dati ed anche ordinati
secondo le nostre esigenze. Pensate che potenzialità hanno!
Accenniamo al fatto che esistono diversi database; per quantità enormi di dati (portali, gradi siti commerciali)
i prodotti più utilizzati sono Microsoft SQL Server 2000, Oracle e MySQL: tuttavia, al di là del loro costo, sono di
difficile configurazione e amministrazione. Per i siti di più modeste dimensioni viene usato Access (compreso in Office) di più facile uso.
Quasi tutti voi, se non tutti, sapete che un database può contenere più tabelle.
Potete immaginare una tabella come un riquadro suddiviso in righe e colonne: il contenuto di un'intera riga
costituisce un record; il contenuto di ogni singola cella è denominato campo.
Se effettuiamo una ricerca con una query (interrogazione) su un database, il risultato dei records trovati forma un cosiddetto recordset.
Pippo è il valore di un campo (il nome del campo relativo è Username), 2 Mario finferlo Roma mario@email.it è un record.
Non ci soffermiamo ulteriormente sulla creazione e manipolazione dei database esulando questo argomento dal contenuto delle nostre lezioni;
se del caso farete una ripassatina da qualsiasi testo che tratti di Access.
Connessione a un database
Per leggere e scrivere in un database occorre prima connettersi allo stesso. Premettiamo la cognizione dell'acronimo ADO (ActiveX Data Objects):
si tratta di un insieme di oggetti che consentono di accedere ai database. Noi ci serviremo dell'oggetto connection
che è usato per contenere le informazioni dell'archivio dati a cui si vuole accedere. E' creato nella stessa maniera con cui
sono stati creati tutti gli altri componenti studiati e cioè usando Server.CreateObject. Quindi:
<%
Dim objConn (ovviamente questa variabile possiamo chiamarla come vogliamo, ad es.: conn, con, connessione...)
Set (vi ricordiamo che con set creiamo un'istanza dell'oggetto) objConn = Server.CreateObject_("ADODB.Connection")
%>
Per effettuare una connessione ci si può servire di due sistemi:
1) Usare un DSN di sistema.
DSN (Data Source Name) è un file che contiene informazioni relative al percorso e al tipo di database.
Come si crea un DSN: dopo aver creato il database (ad es.: dbUtenti.mdb), dal desktop entrate nel pannello di controllo,
Strumenti di Amministrazione, Origine dati ODBC. Selezionate la scheda DSN di sistema come nella seguente immagine:
fate click su Aggiungi: apparirà un elenco di driver come nell'immagine seguente:
selezionate Driver Microsoft Access(*.mdb) e cliccate su Fine. Apparirà la finestra che vedete sotto dove dovrete scrivere,
come nome origine dati, il nome del vostro database con estensione .dsn (potete, ma non è obbligatorio, inserire sotto una breve
descrizione del database):
cliccate su Seleziona, cercate nella finestra successiva il vostro file mdb, selezionatelo e date OK. Nella finestra DSN di
sistema apparirà il vostro database: cliccate ancora su OK.
Una volta attivato il DSN di sistema la connessione potrà avvenire così:
<%
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.ConnectionString = "DSN = dbUtenti.dsn"
Conn.Open
%>
Poichè è molto probabile che in un'applicazione Asp si debba ricorrere alla connessione più volte, è opportuno salvare il suddetto listato,
oppure quello alternativo senza DSN di cui parleremo più tardi, in un file tipo "connessione.asp" da inserire dove occorre
mediante un include (v. lezione 6) tipo: <!--#include file = "connessione.asp"--> (ricordare che, se il file
"connessione.asp" non si trova nella stessa directory occorre specificare il percorso).
N.B.: La connessione mediante DSN è possibile con sistemi operativi superiori a Windows 2000 diversamente si adotterà l'altro
tipo senza DSN (v.sotto). Inoltre, quando pubblicherete il database e le pagine Asp che lo richiamano, dovrà essere il
vostro Provider a configurare nel server il file DSN.
2) Connettersi senza usare un DSN.(Lo consigliamo per evitare eventuali disguidi con il Provider). In questo caso useremo
il metodo Ole-db anzichè quello ODBC; sulla differenza tra i due sistemi non ci soffermiamo per motivi di spazio ed anche perchè avrebbe
un significato quasi esclusivamente teorico. Sappiate, comunque, che molti dei provider oggi sono organizzati per fornire prestazioni
migliori con Ole-db piuttosto che con ODBC.
Il listato relativo è il seguente (ci riferiamo sempre a database creati con Access):
<%
Dim Conn, strConn
strConn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "&_
Server.MapPath("utenti.mdb")
Set Conn = Server.CreateObject("ADODB.connection")
Conn.Open StrConn
%>
Ricordiamo anche qui che, se il database si trova in una dir diversa, occorre indicare il percorso dopo "Server.MapPath".
Quando avrete terminato di operare con il database, la connessione andrà chiusa così:
<%
Conn.close
set Conn = Nothing
%>
tanto occorre per liberare memoria e risorse per altri utenti connessi.
L'oggetto Recordset
Ricordiamo che l'oggetto recordset può essere usato per contenere, se si vuole, anche tutti i records di una tabella, ma molto spesso
per contenere un sottoinsieme specifico della stessa. Per esempio, potremmo avere bisogno di estrarre dalla tabella tutti gli utenti
della zona di Roma.
Per creare un'istanza dell'oggetto recordset si può usare il seguente listato:
1 - <!--#include file = "connessione.asp"-->
<%
2 - SQL = "Select * FROM utenti"
3 - Set objRS = Server.CreateObject("ADODB.Recordset")
4 - objRS.Open SQL, Conn
5 - Do While Not objRS.Eof
6 - Response.Write objRS("Username")&"<br>"
7 - Response.Write objRS("Password")&"<br>"
8 - Response.Write objRS("Citta")&"<br>"
9 - Response.Write objRS("Email")&"<br>"&"<hr>"
10 - objRS.MoveNext
11 - Loop
12 - objRS.Close
13 - Set objRS = Nothing
14 - Conn.Close
15 - Set.Conn = Nothing
%>
Analisi:
Nella linea 1 includiamo il file per la connessione. Nella linea 2 viene introdotta una nuova istruzione di ADO: Select.
La sintassi di Select è: SELECT nomeCampo (nel caso si vogliano estrarre tutti i campi si scrive *) FROM nomeTabella WHERE
(opzionale) condizione (es.: nomeCampo = "Roma") ORDER BY(opzionale) nomeCampo Asc (o Desc). Sempre la linea 2 assegna
alla variabile SQL i valori di tutti i campi della tabella utenti. La linea 3 crea l'oggetto recordset. La linea 4
apre il recordset (assegnandogli l'istruzione SQL). La linea 5 crea un ciclo Do...Loop che continua finchè il record non è vuoto
(eof indica la fine dei records mentre bof indica che un record è pieno); all'interno del loop vi sono le istruzioni per scrivere i
contenuti dei campi dei records entro i quali il puntatore (quello che consente il movimento da un record all'altro) si sposta:
il puntatore si sposta con l'istruzione Move.Next. Le linee dalla 12 alla 15 liberano risorse chiudendo e annullando gli oggetti
che abbiamo precedentemente creato e cioè quello del recordset e quello della connessione applicando la regola di Html:
si chiude per primo quello aperto per ultimo e per ultimo quello aperto per primo.
Se vi sono problemi su questa o su successive lezioni, comunicatecelo nel
forum oppure scriveteci.
Stampa questa pagina
|