Come accennato in precedenza, ora andremo a concludere il corso sulle Active Server Page con l'ultimo metodo interessante (anche se ve lo sconsiglio fortemente) dell'oggetto RecordSet.
Grazie a questo metodo andremo ad effettuare un filtraggio (solo per l'utente finale) dei dati presenti nel RecordSet creato. Riprendiamo ora la tabella delle canzoni da discoteca mostrata la volta precedente. In questa fase l'ordine dei dati è indifferente e quindi una tabella proposta vale l'altra.
Id
|
Titolo Canzone
|
Dee Jay
|
Durata ( Sec )
|
6 | Judgement Day | D Devils | 240 |
18 | Emergenzy remix | Prezioso | 260 |
63 | Don't let me down | Mabel | 355 |
76 | All I need | Sally Can Dance | 319 |
165 | Discotek People | Molella | 302 |
206 | Genik | Molella | 240 |
Ora mostrerò come ottenere a video solo i dati delle canzoni di dee jay Molella tramite il seguente codice Asp:
<html>
<head>
<title>Mostra Dati Presenti</title>
<meta http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<center>
<TABLE border="0" width="400">
<TR bgcolor="#000000">
<TD width="25%"><center><b><font color="#FFFFFF">Id</font></b></center></TD>
<TD width="25%"><center><b><font color="#FFFFFF">Titolo
Canzone</font></b></center></TD>
<TD width="25%"><center><b><font color="#FFFFFF">Dee
Jay</font></b></center></TD>
<TD width="25%"><center><b><font color="#FFFFFF">Durata
(Sec)</font></b></center></TD>
</TR>
<%
' Apertura del Database e creazione recordSet
dim strCode
strCode="innovatel"
dim intVolta
intVolta="0"
Set Conn=Server.CreateObject("ADODB.Connection")
strConn="driver={Microsoft Access Driver (*.mdb)}; "
strConn=strConn & " DBQ=" & Server.MapPath("musica.mdb")
strConn=strConn & ";pwd=" & strCode
Conn.Open strConn
sql = "SELECT * FROM canzoni"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn ,3,3
' Filtraggio del database in base al nome del Dee Jay
rs.filter=" deejay = 'Molella' "
'Mostro a video il RecordSet filtrato
do while not(rs.eof)
if intVolta="1" then
intVolta="0"
intTesto="#00FF99"
intSfondo="#FFFF00"
else
intVolta="1"
intTesto="#FFFF99"
intSfondo="#33CCFF"
end if
%>
<TR bgcolor="<%=intSfondo%>">
<TD width="25%"><%=rs(0)%></TD>
<TD width="25%"><%=rs(1)%></TD>
<TD width="25%"><%=rs(2)%></TD>
<TD width="25%"><%=rs(3)%></TD>
</TR>
<%
' Chiudo il RecordSet ed il relativo database
rs.movenext
loop
rs.Close
set rs = Nothing
conn.Close
set conn = Nothing
%>
</TABLE>
</center>
</body>
</html>
La scrittura del codice per effettuare il filtraggio dei dati di un RecordSet è molto semplice, ma i concetti che vi stanno dietro sono molto complessi ed è appunto per questo motivo che ho lasciato per ultimo questo metodo. Ora osserviamo il RecordSet che abbiamo ottenuto:
Id
|
Titolo Canzone
|
Dee Jay
|
Durata ( Sec )
|
6 | Judgement Day | D Devils | 240 |
18 | Emergenzy remix | Prezioso | 260 |
63 | Don't let me down | Mabel | 355 |
76 | All I need | Sally Can Dance | 319 |
165 | Discotek People | Molella | 302 |
206 | Genik | Molella | 240 |
La tabella appena vista, può venir considerata una vera e propria fotografia del RecordSet dopo aver effettuato il filtraggio. Il significato dei colori, lo capirete nel corso della spiegazione, ma bisogna dire che ogni colore ha un significato ben preciso. Come avrete sicuramente già notato, il RecordSet ottenuto dal filtraggio è identico a quello in nostro possesso prima di effettuare il filtraggio. Come mai? La risposta si trova in parte nella scelta dell'utilizzo dei colori. Come avrete notato, le uniche due righe verdi corrispondono a quelle in cui il Dee Jay è molella che è il Dee Jay da noi cercato nel filtraggio e quindi le righe che desideriamo ottenere a video. Le altre righe (quelle in arancio) sono tutte quelle che vengono scartate dal criterio di filtraggio. Se ricordate, appena iniziato a parlare di questo metodo, sono stato molto deciso nel sconsigliarvene l'utilizzo. Ora vi spiego il motivo. E' vero (e non lo si potrà mai discutere) che rs.filter effettua un filtraggio corretto dei dati presenti nel RecordSet in base ai parametri che vengono passati, ma è altrettanto vero che rs.filter non riduce il RecordSet ai soli dati positivi al filtraggio. Infatti il grosso difetto di questo metodo è l'oscurazione logica dei dati negativi al filtraggio. Ora provo a spiegarmi meglio. Il RecordSet non viene modificato nel modo più assoluto. In fase di lettura viene solamente impedito l'accesso ai record non corrispondenti ai criteri di ricerca effettuati (le righe presenti in arancio). Questo fatto, crea dei tempi di ritardo enormi nell'esecuzione della pagina Asp.
Prima di concludere il metodo, voglio illustrare come effettuare il filtraggio dei dati in base all'inserimento del nome del dee jay in un form da parte dell'utente.
Codice del form:
<form name="filtraDati" action="filtraggio.asp" method="POST">
<input type="text" name="nome_dj" size="30">
</form>
Ora vedremo il codice di filtraggio.asp:
<%
...
rs.filter=" deejay = " & request.form("nome_dj")
...
%>
La riga presente in questo script va modificata nello script completo relativo a questo metodo proposto in precedenza.
Per evitare l'uso di questo metodo è molto importante conoscere Sql. Infatti grazie a questo linguaggio possiamo realmente creare un RecordSet con solo i dati riguardanti le canzoni del Dee Jay di nostro interesse.
Ora vedremo la stringa sql da dostituire al primo filtraggio:
<%
...
sql = "SELECT * FROM canzoni WHERE deejay='Molella' "
...
%>
Se invece il dato di analisi per il filtraggio arriva dall'esterno (esempio del form) si utilizzerà la seguente sintassi:
<%
...
sql = "SELECT * FROM canzoni WHERE deejay= '"&request.form("nome_dj")&"
' "
...
%>
Se viene inserita una delle due stringhe sql, non va assolutamente messo il comando rs.filter.