Nel capitolo relativo ai Database abbiamo visto come popolare un RecordSet con la seguente riga di codice
<% 10 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
10 <% 20 Dim oRS, oConn, strSQL 30 40 'imposto la SQL di selezione (tutti i nomi che cominciano per M) 50 strSQL = "SELECT * FROM anagrafe WHERE nome LIKE 'M%'" 60 70 'apro la connessione al mio db 80 Set oConn = Server.CreateObject("ADODB.Connection") 90 oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _ 100 Server.MapPath("myDB.mdb") 110 120 'popolo il recordset con i record selezionati con il criterio impostato 130 Set oRS = Server.CreateObject("ADODB.RecordSet") 140 oRS.Open strSQL, oConn 150 160 'visualizzo a video il risultato della ricerca 170 If Not oRS.EOF Then 180 Do While Not oRS.EOF 190 Response.Write oRS("Nome") & " " & oRS("Cognome") & " " & oRS("Eta") 200 oRS.MoveNext 210 Loop 220 Else 230 Response.Write "Nessun record risponde al criterio di ricerca<BR>" 240 Response.Write strSQL 250 End If 260 270 'chiudo il recordset e la connessione 280 oRS.Close 290 Set oRS = Nothing 300 310 oConn.Close 320 Set oConn = Nothing 330 %> |
|