|
Nel capitolo relativo ai Database abbiamo visto come popolare un RecordSet con la seguente riga di codice
| <%oRS.Open NomeTabella, Connessione,
TipoCursore, TipoBlocco%> |
che restituisce tutto il contenuto della tabella NomeTabella. Come fare per estrarre in modo selettivo solo un determinato numero di record dalla tabella in questione? In ASP è possibile manipolare i dati di un database utilizzando il linguaggio SQL (Structured Query Language). Con SQL si possono estrarre, inserire, modificare e cancellare record di un database. Per interrogare un database con SQL bisogna utilizzare l'istruzione SELECT con la seguente sintassi
SELECT campiselezionati FROM nometabella
dove campiselezionati indica quali campi della tabella devono essere estratti e nometabella la tabella da cui estrarre i dati
Nel caso si volesse selezionare tutti i campi della tabella è possibile utilizzare l'asterico nel seguente modo
SELECT * FROM nometabella
oppure se si volessero selezionare determinati campi
SELECT campo1, campo2, campo3 FROM nometabella
Quello appena visto è il modo più semplice per interrogare un database, ma se volessimo filtrare i dati della tabella dobbiamo utilizzare la clausola WHERE
SELECT * FROM nometabella WHERE condizione
dove condizione indica l'istruzione logica per effettuare un filtro
Es. se la tabella è composta da i sequenti campi:
NOME COGNOME ETA
e voglio selezionare solo i nominativi che hanno l'età superiore a 18 anni effettuerò la seguente SQL
SELECT * FROM tabella WHERE eta > 18
Quindi è ovvia la possibilità di utilizzare qualsiasi operatore di confronto
> Maggiore di
>= Maggiore o uguale di
< Minore di
<= Minore o uguale di
<> Diverso a
= Uguale a
e gli operatori logici
AND
OR
NOT
Es.
SELECT * FROM tabella WHERE (eta > 18) AND (nome = 'Massimiliano')
seleziona tutte le persone che si chiamano Massimiliano e che hanno età maggiore di 18 anni. Da notare che in quest'ultimo esempio il contenuto della variabile NOME è stato incluso fra apici (NOME = 'Massimiliano') in quanto il campo NOME è di tipo Testo (stringa). Quando si trattano campi di tipo testo è possibile utilizzare l'operatore LIKE per agevolare le ricerche nelle stringhe.
Es.
vogliamo estrarre tutti i nomi della tabella che iniziano con MA
SELECT nome FROM tabella WHERE nome LIKE 'Ma%'
per estrarre il solo campo nome oppure
SELECT * FROM tabella WHERE nome LIKE 'Ma%'
per estrarre tutti campi. La sintassi del LIKE prevede l'utilizzo di 3 metacaratteri
% qualsiasi stringa
_ esattamente ad un carattere
[] qualsiasi carattere indicato all'interno di un intervallo
Es.
SELECT * FROM tabella WHERE nome LIKE 'Francesc_'
per estrarre tutti i nomi che iniziano per FRANCESC e terminano con qualsiasi lettera (Francesco, Francesca)
SELECT * FROM tabella WHERE nome LIKE '[glt]ina'
seleziona tutti i nomi che hanno per iniziale i caratteri G, L e T e finiscono per INA (Gina, Lina, Tina) oppure
SELECT * FROM tabella WHERE nome LIKE '[g-t]ina'
seleziona tutti i nomi che hanno per iniziale le lettere comprese nell'intervallo G-T e finiscono per INA
(Gina, Lina, Mina, Pina, Tina). Con SQL è possibile ordinare i record selezionati secondo i valori di una o più colonne con la clausola ORDER BY campo ASC/DESC (crescente/decrescente)
Es.
SELECT * FROM tabella WHERE eta > 18 ORDER BY eta ASC
per estrarre tutti record che hanno ETA maggiore di 18 anni ordinati per ETA dal più piccolo al più grande.
Per riassumere i concetti appena visti eccovi del codice esplicativo: supposto di avere creato un file database (ACCESS) di nome myDB.mdb contenente una tabella di nome ANAGRAFE con i campi NOME, COGNOME e ETA
<%
Dim oRS, oConn, strSQL
'imposto la SQL di selezione (tutti i nomi che cominciano per M)
strSQL = "SELECT * FROM anagrafe WHERE nome LIKE 'M%'"
'apro la connessione al mio db
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("nomeDB.mdb")
'popolo il recordset con i record selezionati con il criterio impostatoSet oRS = Server.CreateObject("ADODB.RecordSet")
oRS.Open strSQL, oConn
'visualizzo a video il risultato della ricerca
If Not oRS.EOF Then
Do While Not oRS.EOF
Response.Write oRS("Nome") & " " & oRS("Cognome") & " " & oRS("Eta")
oRS.MoveNext
Loop
Else
Response.Write "Nessun record risponde al criterio di ricerca<BR>"
Response.Write strSQL
End If
'chiudo il recordset e la connessione
oRS.Close
Set oRS = Nothing
oConn.Close
Set oConn = Nothing
%> |
A cura di Massimiliano Luciani
|