back to top

Creare pagine dinamiche con ASP e Database

La potenza di ASP, e di qualsiasi linguaggio di scripting lato server, si concentra nella possibilità offerta di interagire con una fonte di dati stabile, flessibile ed affidabile come un database.

ASP non dispone di funzioni native per l’interazione con i database ma utilizza un oggetto esterno, ADO (ActiveX Data Object) che introdurremo nel quarto capitolo della guida e che ci accompagnerà per il seguito.

Interagendo con un database è possibile creare vere e proprie applicazioni Web, dalla più semplice come un guestbook (libro degli ospiti), a più complesse come forum di discussione, fino a veri e propri gestionali di una certa complessità.

ASP può interagire con qualsiasi gestore di database che supporti gli standard ODBC (Open Database Connectivity), ovvero con i più conosciuti e famosi gestori di database presenti sul mercato.

In questa guida affronteremo l’interazione di ASP con il gestore di database MS Access, dato che si tratta del prodotto più semplice da reperire ed utilizzare, ed anche perchè l’interazione con questi è praticamente perfetta, essendo sia ASP che Access prodotti di casa Microsoft.

Affronteremo i codici di esempio sia col linguaggio VBScript che JScript, in modo da soddisfare le esigenze di chi ha una preferenza piuttosto che l’altra.

Concludo una precisazione: per quanto gratuita e non completa in tutte le sue sfumature, questa guida affronta concetti piuttosto avanzati e molti concetti di base verranno dati per scontati.

Allo scopo di tenersi al passo con i concetti trattati, consiglio a coloro che non ritengono di essere ancora sufficientemente preparati, la preventiva lettura delle guide base ad ASP messe a disposizione da questo sito.

I database

Come anticipato nel capitolo precedente, un database è una fonte di dati stabile, flessibile, affidabile e sicura. Un database viene gestito da un apposito gestore, ovvero un software che fa parte della categoria dei DBMS (Database Management System).

I principali DBMS sul mercato sono Access ed SQL Server, entrambi prodotti di casa Microsoft. Esistono poi altri come Oracle e MySQL, delle omonime case produttrici, ed altri di minore utilizzo ma non importanza.

Questi prodotti hanno delle notevoli differenze tra loro che si possono inquadrare in diversi aspetti. Consiglio quindi di studiarli singolarmente nella sezione Database di Mr. Webmaster per farsi un’idea precisa.

Come anticipato nel capitolo precedente, ci baseremo su Microsoft Access per l’implementazione dei nostri esempi. Allo scopo consiglio la consultazione della Guida ad MS Access di questo sito.

Le principali porzioni di un database con le quali ci si può interfacciare sono le tabelle, ovvero contenitori di dati organizzati in campi; tutti i dati di una tabella, composti dai relativi campi, formano i record.

Per maggiori informazioni consultare la lezione della guida ad SQL Introduzione ai database.

A questo punto non ci resta che creare un database di esempio che ci servirà per gli esempi dei prossimi capitoli.

Aprite la vostra copia di MS Access e create la tabella "utenti" corredata dai campi "id" di tipo Contatore "nome" e "cognome" di tipo Testo ed "eta" di tipo Numerico.

Salvate il tutto e proseguite con la lettura della guida.

Introduzione all’SQL

L’SQL (acronimo di Structured Query Language) è il linguaggio universale per la manipolazione e la gestione dei dati di un database.

Salvo alcune sfaccettature possiamo quindi dire che l’SQL è "parlato" da tutti i DBMS del mercato, i cui più importanti sono stati accennati nel capitolo precedente.

Si tratta di un linguaggio molto semplice che si avvicina moltissimo al linguaggio umano parlato, quindi non è difficile impararlo ed usarlo: il difficile sta nell’entrare nella forma-mentis di un gestore di database, quale il programmatore deve comunque essere.

Allo scopo di imparare le basi (ed anche qualcosa in più) dell’SQL e di iniziare il proprio percorso verso la conoscenza del mondo dei database, consiglio la lettura della Guida ad SQL di Mr. Webmaster.

All’occorrenza, per i più interessati alla materia data la sua estrema importanza che prescinde da ASP, consiglio anche il nostro Corso SQL della nostra piattaforma di E-Learning.

Introduciamo comunque i comandi principali, ovvero:

  • SELECT – effettua ricerche su una tabella;
  • INSERT – effettua inserimenti in una tabella;
  • UPDATE – effettua modifiche ai campi di una tabella;
  • DELETE – effettua cancellazioni dai campi di una tabella.

Una precisazione: il termine query, che sta per ricerca e che fa parte del gergo di uso comune dai programmatori quando si interfacciano con un database, sarebbe da utilizzare solo per le ricerche, quindi con l’istruzione SELECT, ma si usa anche per indicare le altre istruzioni SQL citate in precedenza, definendole "query di inserimento", "query di aggiornamento" e "query di eliminazione".

Trovo inutile ripetere in questa sede cose già dette, in maniera più completa, nella guida SQL segnalatavi in precedenza, ragion per cui ribadisco il consiglio di leggerla anche parallelamente alla lettura di questa guida, tenendola come punto di riferimento all’occorrenza.

Introduzione ad ADO

Nel capitolo introduttivo della presente guida abbiamo accennato ad ADO (ActiveX Data Object), oggetto mette a disposizione di ASP (e non solo) connettività ed operabilità in fase di interazione con un database.

Si tratta di un oggetto molto potente, completo ed anche moderatamente semplice da usare, premessa una buona conoscenza del "da farsi" in fase di lavoro con un database, ed anche grazie all’esperienza, la quale però si acquisisce solo col tempo ed affrontando problemi reali.

ADO mette a sua volta a disposizione tre oggetti:

  • Connection – fornisce connettività verso un database e permette di espletare semplici operazioni di routine;
  • Recordset – è il materiale contenitore dei dati su effettua controlli ed esegue operazioni SQL oppure native che, in qualche modo, sostituiscono l’SQL;
  • Command – è un oggetto specialistico che permette di effettuare particolari transazioni verso un database.

Nei prossimi tre capitoli affronteremo più nel dettaglio questi tre oggetti e nei successivi metteremo in pratica quanto appreso fino a quel punto, usando ADO e family solo come strumento, concentrandoci più sulla logica di programmazione che ci compete in questo ambito.

ADO – L’oggetto Connection

L’oggetto Connection della libreria ADO fornisce connettività ad un database, permette di eseguire alcune basilari operazioni di routine e di eseguire stringhe SQL.

Come qualsiasi oggetto ActiveX va (dichiarato) settato, aperto, utilizzato, chiuso e svuotato, come nell’esempio di codice che segue:

<%
    Dim cn
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open <em>stringa di connessione</em>

    ' Utilizzo dell'oggetto Connection...

    cn.Close
    Set cn = Nothing
%>

La "stringa di connessione" ad un database è la dichiarazione che serve ad individuare il provider che fornirà materialmente connettività verso il database, ed il database che verrà utilizzato.

Esistono tre sistemi di connessione: stringa via ODBC, stringa via OleDB ed i file UDL (Universal data Link) che si connettono al database e vengono richiamati al posto della stringa di connessione. In genere, per MS Access, si utilizza la stringa ODBC, come nel codice che segue:

cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" ' percorso

dove il percorso si stabilisce con

Server.MapPath("database.mdb")

Tutte le stringhe di connessione a tutti i database esistenti sul mercato sono disponibili sul sito ConnectionStrings.com.

Vediamo adesso i principali metodi e proprietà dell’oggetto Connection.

<strong>METODI</strong>

<strong>Close</strong>
Chiude la connessione al database

<strong>Execute</strong>
Esegue una stringa SQL

<strong>Open</strong>
Apre la connessione al database, accettando come unico
(ed obbligatorio) parametro la stringa di connessione
<strong>PROPRIETA'</strong>

<strong>State</strong>
Restituisce 0 o 1 a seconda del fatto che la connessione sia
chiusa o aperta; serve come verifica in una funzione creata
ad hoc, oppure allo sviluppatore per eseguire un test al volo
in caso di malfunzionamenti di un'applicazione

<strong>Version</strong>
Restituisce come informazione la versione di ADO in uso

L’oggetto Connection mette a disposizione moltissimi altri metodi e proprietà ma non sono stati presi in considerazione in questo caso perchè di scarso utilizzo o di rara utilità.

ADO – L’oggetto Recordset

L’oggetto Recordset della libreria ADO è il materiale gestore e contenitore dei dati estratti da una o più tabelle di un database.

La sua dichiarazione ed utilizzo è la seguente (in grassetto)

<%
    Dim cn, <strong>rs</strong>
    Set cn = Server.CreateObject("ADODB.Connection")
    <strong>Set rs = Server.CreateObject("ADODB.Recordset")</strong>
    cn.Open <em>stringa di connessione</em>
    <strong>rs.Open "<em>stringa sql...</em>", cn, 1</strong>

    ' Utilizzo degli oggetti Connection e Recordset...

    <strong>rs.Close
    Set rs = Nothing</strong>
    cn.Close
    Set cn = Nothing
%>

L’oggetto Recorsert può essere usati sia in lettura che in scrittura; all’apertura può caricare una stringa SQL oppure il nome della tabella su cui agire; è importante associargli la connessione al database in uso ed un cursore.

I cursori sono proprietà che gestiscono l’utilizzo del Recordset; in lettura si utilizza "1" ed in scrittura "3, 3", indicando il nome della tabella in cui scrivere al posto della stringa SQL.

Per il resto si utilizza come un normale oggetto ActiveX come Connection, esaminato nel capitolo precedente e ripetuto in questa sede, dato che non ha senso utilizzare il Recordset senza una connessione.

Vediamo adesso i principali dei tantissimi metodi e proprietà messi a disposizione dell’oggetto Recordset.

<strong>METODI</strong>

<strong>AddNew</strong>
Indica al Recordset che si stà effettuando un'operazione
di inserimento

<strong>Close</strong>
Chiude il Recordset

<strong>MoveNext</strong>
In fase di estrazione di più record con un ciclo, si utilizza
questo metodo per indicare al Recordset di leggere il record
successivo, qualora ve ne sia uno

<strong>Open</strong>
Apre il Recordset secondo le modalità indicate in precedenza

<strong>Update</strong>
Indica al Recordset che si stà effettuando un'operazione
di aggiornamento
<strong>PROPRIETA'</strong>

<strong>AbsolutePage</strong>
Restituisce un valore che rappresenta il numero di pagina corrente
in una query

<strong>EOF</strong>
Booleano, restituisce True se i record estratti da una query
sono finiti, oppure False in caso contrario

<strong>PageCount</strong>
Indica il numero di pagine in cui una query viene paginata

<strong>PageSize</strong>
Indica quanti record per pagina devono essere mostrati

<strong>Status</strong>
Indica lo stato del Recordset: 1 = aperto / 0 = chiuso

Al fine di comprendere a pieno il senso di "paginazione" e l’utilità di alcune delle proprietà elencate, consiglio la lettura dell’articolo Paginazione dei risultati di query di grandi dimensioni.

L’oggetto Recordset mette a disposizione moltissimi altri metodi e proprietà ma non sono stati presi in considerazione in questo caso perchè di meno frequente utilizzo o di rara utilità.

ADO – L’oggetto Command

L’oggetto Command della libreria ADO, come anticipato nel quarto capitolo della guida, è un oggetto specialistico che permette di effettuare particolari transazioni verso un database come Stored Procedures su MS SQL Server, oppure Stored Queries su MS Access, Trigget su Oracle, e cosi via.

Vediamo comunque un utilizzo semplice dell’oggetto Command:

<%@LANGUAGE = VBScript%>
<%
    Dim cn, Cmd

    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open <em>stringa di connessione</em>

    <strong>Set cmd = Server.CreateObject("ADODB.Command")
    cmd.ActiveConnection = cn

    cmd.CommandText = "<em>stringa SQL</em>"
    cmd.Execute</strong>

    cn.Close
    Set cn = Nothing
%>

Command, al contrario della Connection e del Recordset, non necessita ne di essere svuotato ne di essere chiuso.

Vediamo adesso i principali metodi e proprietà messi a disposizione dell’oggetto Command.

<strong>METODI</strong>

<strong>Execute</strong>
Esegue un comando o una stringa SQL
<strong>PROPRIETA'</strong>

<strong>ActiveConnection</strong>
Imposta la connessione utilizzata

<strong>CommandTimeout</strong>
Imposta il numero di secondi che devono trascorrere prima che
l'operazione venga terminata se non ancora eseguita

<strong>State</strong>
Indica lo stato del Command: 1 = aperto / 0 = chiuso

Lettura dei dati da un database

Una volta affrontati, in via sia pur teorica, gli oggetti che fanno parte della libreria ADO, possiamo passare a degli esempi pratici sulla scorta di un database di test.

Creiamo innanzitutto la struttura che dovrà ospitare una piccola e semplice applicazione ASP che svilupperemo nel corso di questo e dei prossimi capitoli.

All’interno del nostro server Web creiamo, sotto la cartella

C:\Inetpub\wwwroot

la cartella

test_db

in cui creeremo il file di database MS Access

database.mdb

Il database in oggetto avrà la seguente stuttura (tabelle/campi):

  • autori
    • aut_id (Contatore)
    • aut_nome (Numerico)
  • libri
    • lib_id (Contatore)
    • lib_autore (Numerico)
    • lib_titolo (Testo)

Per ora limitiamoci a popolare la tabella "autori" con dei dati di prova, ad esempio:

aut_id | aut_nome
--------------------
1      | E. A. Poe
2      | B. Stocker
3.     | M. Shelley

Andiamo adesso ad applicare quanto appreso nei capitoli precedenti sull’oggetto Connection e l’oggetto Recordset.

Una precisazione: essendo l’oggetto Command molto poco usato e, come rimarcato più volte, adatto ad un uso specialistico, non lo prenderemo in considerazione nei nostri esempi pratici.

Segue il codice del file "leggi.asp" che estrae tutti i dati dalla tabella "autori":

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
%>
<html>
<head>
<title>Lettura dei dati</title>
</head>
<body>

<h1>Lettura dei dati</h1>

<%
    rs.Open "SELECT * FROM autori ORDER BY aut_id ASC", cn, 1
    If rs.EOF Then
%>
<p>Nessun record trovato!</p>
<%
    Else
        While rs.EOF = False
%>
<p>
ID: <%=rs("aut_id")%><br>
Nome: <%=rs("aut_nome")%>
</p>
<%
            rs.MoveNext
        Wend
    End If
    rs.Close
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Lanciate il file all’indirizzo

http://localhost/test_db/leggi.asp

per gustare il risultato.

Apriamo la Connection ed il Recordset, facendo riferimento al database MS Access creato in precedenza.

Nel corpo della pagina eseguiamo una query aprendo il Recordset ed estraendo tutti i dati con un ciclo che fa riferimento alla proprietà "EOF" per verificare che il Recordset sia ancora pieno, ed al metodo "MoveNext" per spostarsi al record successivo.

Prima dell’estrazione dei dati, naturalmente, verifico con una condizione che effettivamente esistano dati disponibili per la query lanciata e, in caso negativo, lancio un messaggio statico di avviso.

Chiudiamo il Recordset appena non serve più, stesso all’interno della pagina.

Distruggiamo il Recordset, chiudiamo e distruggiamo la Connection alla fine della pagina.

Lascio a voi il compito di visualizzare i dati dalla tabella "libri" e vi do una dritta: provate ad inserire nel database manualmente alcuni record, ad esempio il libro "Dracula" di "B. Stocker" e "Frankenstein" di "M. Shelley".

Nella tabella "autori" Stocker ha ID 2 e Shelley ha ID 3. Questi i valori numerici da specificare nel campo "lib_autore" della tabella "libri". Nell’ultimo capitolo vedremo e capiremo il perchè.

Scrittura dei dati in un database

Vediamo adesso come inserire, attraverso un form HTML, i dati all’interno della tabella "autori" e della tabella "libri" con due esempi di differente difficoltà.

Una premessa fondamentale è quella che è necessario assegnare le autorizzazioni in lettura e scrittura al database ed all’intera cartella "test_db" che stiamo utilizzando, operazione che potrebbe essere indispensabile, su alcuni sistemi, anche per la sola lettura dei dati, come visto nel capitolo precedente.

Cliccate col tasto destro del mouse sulla cartella "test_db" e selezionate le proprietà. Scegliete la scheda "Condivisione Web" e spuntate la voce "Condividi la cartella". Nel riquadro "Alias" comparirà il nome della cartella: cliccateci due volte e si aprirà una finestra in cui dovrete selezionare "Lettura" e "Scrittura" e confermare la scelta.

Iniziamo col file "aggiungi_autore.asp":

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
%>
<html>
<head>
<title>Aggiungi un autore</title>
</head>
<body>

<h1>Aggiungi un autore</h1>

<form method="post" action="aggiungi_autore.asp">
Inserisci il nome dell'autore<br><br>
<input type="text" name="nome" maxlength="50"><br><br>
<input type="submit" name="aggiungi" value="Aggiungi un autore">
</form>

<%
    If Request.Form("aggiungi") <> "" Then
        Dim nome
        nome = Request.Form("nome")
        If nome = "" Then
%>
<p>Inserisci il nome dell'autore</p>
<%
        Else
            rs.Open "autori", cn, 3, 3
            rs.AddNew
            rs("aut_nome") = nome
            rs.Update
            rs.Close
%>
<p>Inserimento effettuato con successo!</p>
<%
        End If
    End If
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Io ho aggiunto "C. Dickens".

Lanciate il file all’indirizzo

http://localhost/test_db/aggiungi_autore.asp

per testare il risultato.

Apriamo la Connection ed il Recordset, facendo riferimento al database MS Access creato in precedenza.

Nel corpo della pagina creiamo il modulo di inserimento che necessita del solo campo "nome" ed assegnamo un nome anche al bottone di invio, in modo da eseguire lo script di controllo ed eventuale inserimento solo se il modulo risulta inviato.

Per maggiori informazioni sul metodo di invio e recupero delle informazioni da un modulo HTML con ASP e col metodo post consiglio vivamente la lettura dell’articolo Trucchi per l’utilizzo del metodo POST.

Una volta inviate le informazioni per prima cosa recupero il campo di testo, verifico che sia stato compilato correttamente e, in caso positivo, effettuo l’inserimento del dato utilizzando il metodo "AddNew" per indicare al Recordset che si tratta di un inserimento, ed il metodo "Update" per aggiornare la tabella.

Passiamo adesso all’inserimento di un nuovo libro, a cui va associato l’autore, ragion per cui la filosofia non cambia ma si amplia.

Vediamo dunque il codice del file "aggiungi_libro.asp":

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
%>
<html>
<head>
<title>Aggiungi un libro</title>
</head>
<body>

<h1>Aggiungi un libro</h1>

<form method="post" action="aggiungi_libro.asp">
Seleziona l'autore del libro da inserire:<br><br>
<select name="autore">
<option value=""></option>
<%
    rs.Open "SELECT * FROM autori ORDER BY aut_id ASC", cn, 1
    While rs.EOF = False
%>
<option value="<%=rs("aut_id")%>"><%=rs("aut_nome")%></option>
<%
        rs.MoveNext
    Wend
    rs.Close
%>
</select><br><br>
Inserisci il titolo del libro<br><br>
<input type="text" name="titolo" maxlength="50"><br><br>
<input type="submit" name="aggiungi" value="Aggiungi un libro">
</form>

<%
    If Request.Form("aggiungi") <> "" Then
        Dim autore, titolo
        autore = Request.Form("autore")
        titolo = Request.Form("titolo")
        If autore = "" Or titolo = "" Then
%>
<p>Tutti i campi sono obbligatori</p>
<%
        Else
            rs.Open "libri", cn, 3, 3
            rs.AddNew
            rs("lib_autore") = autore
            rs("lib_titolo") = titolo
            rs.Update
            rs.Close
%>
<p>Inserimento effettuato con successo!</p>
<%
        End If
    End If
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Io ho aggiunto "Oliver Twist" di Dickens.

Lanciate il file all’indirizzo

http://localhost/test_db/aggiungi_libro.asp

per testare il risultato.

Apriamo la Connection ed il Recordset, facendo riferimento al database MS Access creato in precedenza.

L’unica cosa che cambia rispetto al codice del primo file di inserimento esaminato in questa lezione è che costruiamo dinamicamente una selectbox, popolandola con i nomi dell’autore e con l’ID di appartenenza.

Per il resto ci siamo limitati ad agire in scrittura sulla tabella "libri" piuttosto che sulla tabella "autori".

Modifica dei dati di un database

La modifica di un dato di un database attraverso un modulo HTML è paradossalmente un’operazione filosoficamente più complicata del semplice inserimento, dato che è necessario prima selezionare il record da modificare e poi effettivamente modificarlo.

Segue il codice del file "modifica_autore.asp":

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
    Dim id
    id = Request.QueryString("id")
%>
<html>
<head>
<title>Modifica un autore</title>
</head>
<body>

<h1>Modifica un autore</h1>

<form method="post" action="modifica_autore.asp?id=<%=id%>">
Seleziona l'autore da modificare:<br><br>
<select name="autore"
onchange="location.href='modifica_autore.asp?id='+this.value">
<option value=""></option>
<%
    rs.Open "SELECT * FROM autori ORDER BY aut_id ASC", cn, 1
    While rs.EOF = False
%>
<option value="<%=rs("aut_id")%>"><%=rs("aut_nome")%></option>
<%
        rs.MoveNext
    Wend
    rs.Close
%>
</select><br><br>
<%
    If id <> "" Then
        rs.Open "SELECT * FROM autori WHERE aut_id = " & id, cn, 1
%>
Nome dell'autore da modificare<br><br>
<input type="text" name="nome" maxlength="50"
value="<%=rs("aut_nome")%>">
<br><br>
<input type="submit" name="modifica" value="Modifica un autore">
</form>
<%
        rs.Close
    End If
    If Request.Form("modifica") <> "" Then
        Dim nome
        nome = Request.Form("nome")
        If nome = "" Then
%>
<p>Specifica il nome dell'autore</p>
<%
        Else
            Dim SQL
            SQL = "SELECT * FROM autori WHERE aut_id = " & id
            rs.Open SQL, cn, 3, 3
            rs("aut_nome") = nome
            rs.Update
            rs.Close
%>
<p>Modifica effettuata con successo!</p>
<%
        End If
    End If
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Ecco cos’abbiamo fatto: abbiamo popolato una selectbox con i record presenti nella tabella su cui agire, in modo da scegliere il record che ci interessa; una volta selezionato il record ricarichiamo la pagina passando nella querystring l’ID del record che ci interessa e lo usiamo come filtro su di una query che popola il modulo HTML col record da modificare.

A questo punto scriviamo quello che ci interessa nel campo di testo ed inviamo i nuovi dati; usiamo il Recordset per leggere il record che ci interessa, agiamo sul campo desiderato e lo aggiorniamo. Il codice somiglia molto a quello dell’inserimento dei dati, con la differenza che non usiamo, ovviamente, il metodo "AddNew".

Volendo possiamo anche non usare il Recordset ma semplicemente il metodo "Execute" dell’oggetto Connection come segue:

Dim SQL
SQL = ""
SQL = SQL & "UPDATE autori SET aut_nome = '" & nome & "' "
SQL = SQL & "WHERE aut_id = " & id
cn.Execute(SQL)

al posto di:

Dim SQL
SQL = "SELECT * FROM autori WHERE aut_id = " & id
rs.Open SQL, cn, 3, 3
rs("aut_nome") = nome
rs.Update
rs.Close

Lanciate il file all’indirizzo

http://localhost/test_db/modifica_autore.asp

per testare il risultato.

Lascio al lettore il compito di implementare la pagina per la modifica di un libro.

Cancellazione dei dati di un database

La cancellazione dei dati da un database è un’operazione piuttosto semplice e, se non per qualche modifica, assomiglia alla lettura dei dati, già affrontata nel capitolo 8 di questa guida.

Riprendiamo il file "leggi.asp" copiandolo e rinominando la copia come "cancella.asp".

Segue il codice modificato ed adattato alla cancellazione dei record dalla tabella "autori":

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
    Dim id
    id = Request.QueryString("id")
    If id <> "" Then
        cn.Execute("DELETE * FROM autori WHERE aut_id = " & id)
    End If
%>
<html>
<head>
<title>Cancellazione dei dati</title>
</head>
<body>

<h1>Cancellazione dei dati</h1>

<%
    rs.Open "SELECT * FROM autori ORDER BY aut_id ASC", cn, 1
    If rs.EOF Then
%>
<p>Nessun record trovato!</p>
<%
    Else
        While rs.EOF = False
%>
<p>
<a href="cancella.asp?id=<%=rs("aut_id")%>">CANCELLA</a>
(ID: <%=rs("aut_id")%>)
Nome: <%=rs("aut_nome")%>
</p>
<%
            rs.MoveNext
        Wend
    End If
    rs.Close
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

In fase di lettura dei dati aggiungiamo un link "CANCELLA" al cui click viene eliminato il record di cui all’ID corrispondente.

La cancellazione avviene materialmente in cima al file quando, al recupero dell’ID in querystring, viene eseguito un comando di cancellazione SQL parametrizzato.

Lanciate il file all’indirizzo

http://localhost/test_db/cancella.asp

per testare il risultato.

Lettura dei dati tra tabelle relazionate

Concludiamo questa guida sull’iterazione tra ASP ed i database con un esempio più complesso di lettura dei dati, ovvero attingendo informazioni da più tabelle in relazione tra loro, caso specifico delle tabelle "autori" e "libri" create nei capitoli pratici iniziali della guida stessa.

La relazione, lo ricordo, avviene per mezzo dei campi "aut_id" e "lib_autore", dove il primo è di tipo Contatore ed è la matricola dell’autore ed il secondo è di tipo Numerico che fa riferimento alla matricola dell’autore della relativa tabella, principio per cui si evita la ridondanza dei dati a favore della normalizzazione dell’applicazione.

Per maggiori informazioni tecniche in merito consiglio di leggere la FAQ SQL sulla ridondanza e la normalizzazione dei dati.

Prendiamo il file "leggi.asp" creato nella lezione 8 di questa guida e modifichiamolo in modo da far accedere l’a pagina ASP ad entrambe le tabelle, estraendo cosi i dati in maniera relazionale e logica, associandoli tra loro:

<%@LANGUAGE = VBScript%>
<%
    Dim sc, cn, rs
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.Open sc & Server.MapPath("database.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")
%>
<html>
<head>
<title>Lettura dei dati</title>
</head>
<body>

<h1>Lettura dei dati</h1>

<%
    Dim SQL
    SQL = ""
    SQL = SQL & "SELECT * FROM autori, libri "
    SQL = SQL & "WHERE aut_id = lib_autore ORDER BY aut_id ASC"
    rs.Open SQL, cn, 1
    If rs.EOF Then
%>
<p>Nessun record trovato!</p>
<%
    Else
        While rs.EOF = False
%>
<p>
ID: <%=rs("aut_id")%><br>
Autore: <%=rs("aut_nome")%><br>
Libro: <%=rs("lib_titolo")%>
</p>
<%
            rs.MoveNext
        Wend
    End If
    rs.Close
%>

</body>
</html>
<%
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
%>

Sostanzialmente abbiamo modificato solo la stringa SQL da eseguire

SELECT * FROM autori, libri WHERE <strong>aut_id = lib_autore</strong> ...

mettendo in relazione le due tabelle richiamandole entrambe nella porzione FROM ed associando i cosiddetti campi di JOIN, ovvero di relazione.

Ci siamo poi limitati ad estrarre i dati che ci interessano:

<p>
ID: <%=rs("aut_id")%><br>
Autore: <%=rs("aut_nome")%><br>
Libro: <%=rs("lib_titolo")%>
</p>

Lanciate il file all’indirizzo

http://localhost/test_db/leggi.asp

per gustare il risultato.

Per ulteriori informazioni sulle JOIN e sulla tecniche SQL di relazione dei dati leggere il capitolo della guida ad SQL del sito JOIN – Relazioni tra più tabelle.

Pubblicitร 

Leggi anche...

Inviare mail con ASP: esempi pratici di utilizzo di CDONTS e CDOSYS

E' possibile inviare mail attraverso una pagina in Classic...

Aggiungere elementi a un Array in ASP/VBScript

In un precedente articolo abbiamo parlato delle limitazioni di...

Perchè CInt restituisce un errore Overflow?

Utilizzando CInt per la definizione di variabili numeriche può...

Cosa sono chr(10) e chr(13)? E la costante vbCrLf?

All'interno di un codice ASP (o più generalmente, all'interno...

Alla scoperta di VBScript: cos’è, come funziona e come iniziare a fare scripting!

Il VBScript è un semplice linguaggio di scripting adoperabile...
Pubblicitร