Queste poche righe, lungi dall'avere la pretesa di essere esaustive, hanno lo scopo di porre l'accento su alcune problematiche che, accingendosi ad utilizzare basi di dati potrebbero presentarsi.
Per affrontarle realizzeremo un semplice applicativo la cui funzione sarà quella di ricercare dei dati presenti in una tabella, visualizzarli creando nel contempo un collegamento ad un'altra pagina deputata a fornire ulteriori notizie.
Faremo uso di un archivio Access (anche se vi consiglio di provare SQL Server), che chiameremo "Elenco.mdb" con un modello logico molto elementare costituito da una sola tabella, avente lo stesso nome del database e la seguente struttura:
Campo | Tipo | Lunghezza |
Id | contatore | |
Cognome | testo | 50 |
Nome | testo | 50 |
Sede | testo | 50 |
Ufficio | testo | 50 |
Tel1 | testo | 30 |
Tel2 | testo | 30 |
testo | 30 |
Utilizzeremo inoltre 3 pagine: default.htm , Lista.asp ed Esploso.asp , la prima per immettere i dati da cercare, la seconda per visualizzare in forma tabellare il risultato della ricerca, la terza per visualizzare il singolo record in forma esplosa.
Cominciamo con la prima pagina nella quale, oltre al solito codice HTML, inseriamo, all'interno dei TAG
<FORM ACTION =" <b>Lista.asp</b> " METHOD=" <b>Post</b> " NAME=" <b>Form</b> "><br /> <br /> e </FORM>
la seguente casella di riepilogo a discesa contenente i nomi dei campi della tabella con la selezione di default impostata su "Cognome":
<select NAME=" <b>Campo</b> " size="1"> <option selected value="Cognome">Cognome</option> <option value="Nome">Nome </option> <option value="Sede">Sede </option> <option value="Ufficio">Ufficio </option> <option value="Tel1">Telefono </option> <option value="Tel2">altro Telefono</option> <option value="Email">E-Mail </option> </select>
Un'altra casella di riepilogo a discesa contenente i valori "Esatto" e "Contenuto":
<select name="Tipo" size="1"> <option selected value="Esatto">Ricerca esatta</option> <option value="Contenuto">Contenuto in </option> </select>,
Una casella di testo:
<input type="text" size="40" name=" <b>Testo</b> " maxlenght="50">
Ed i pulsanti per l'inoltro della richiesta e l'effettuazione di una nuova immissione:
<input type="submit" name=" <b>Cerca</b> " value="Cerca"> <input type="reset" name=" <b>Pulisci</b> " value="Pulisci">.
Abbiamo creato la Form d'immissione.
Una volta create anche le altre pagine, avremo la possibilità di effettuare la ricerca esatta o meno su uno qualunque dei campi della tabella.
Inserendo il testo da trovare e premendo il tasto "Cerca", saranno inviati alla pagina "Lista.asp" i valori contenuti nelle due caselle di riepilogo e nel campo di testo.
Spetterà poi alla stessa pagina recuperare tali valori utilizzando l'oggetto Request e visualizzarli.
Siccome Request utilizza a sua volta cinque insiemi e cioèQueryString, Form, Coockies, ClientCertificate, ServerVariables, per evitare che ASP effettui ogni volta la ricerca del valore in tutti gli insiemi, è consigliabile indicare esplicitamente in quale insieme è memorizzato il valore stesso.
Nel nostro caso l'insieme utilizzato è "Form" e quindi la sintassi corretta sarà:
<% x = Request.Form("Var") %>.
Proseguiamo dichiarando all'interno della pagina "Lista.asp" le variabili che utilizzeremo e precisamente:
<%Dim dbConn Dim rs Dim TestoSql Dim TestoOriginale Dim TestoDaCercare Dim TipoRicerca %>
Le prime due variabili le utilizzeremo per memorizzare gli oggetti Connection e Recordset; nella terza memorizzeremo la query; in "TestoOriginale" memorizzeremo il testo digitato dall'utilizzatore nella casella di testo; "TipoRicerca" conterrà la scelta effettuata con la casella di riepilogo "Tipo" ed infine "TestoDaCercare" conterrà il "TestoOriginale" opportunamente manipolato che costituirà un parametro dell'interrogazione.
La necessità di manipolare il testo immesso dipende dal fatto che, prevedendo la sintassi Sql che le stringhe debbano essere racchiuse tra apici singoli, qualora il testo da cercare contenesse un apostrofo od un accento, verrebbe generato un errore.
Così se noi cercassimo "D'Alessandro", la stringa di ricerca diventerebbe 'D'Alessandro' e l'Sql interpreterebbe anche l'apostrofo come delimitatore di stringa, generando di conseguenza un errore.
La soluzione consiste nel processare la stringa cercando tutte le occorrenze degli apici singoli e sostituendole con doppi apici singoli.
VBScrip ci offre la funzione REPLACE( Stringa, StringaDaCercare, StringaDiSostituzione, [Inizio], [Conteggio], [Confronto]) che si occupa di effettuare un vero e proprio cerca e sostituisci.
Per i nostri scopi sono sufficienti solo i primi tre parametri che tra l'altro sono i soli obbligatori, per cui dopo aver memorizzato il testo digitato nella variabile che abbiamo chiamato "TestoOriginale", effettuiamo le eventuali sostituzioni.
<% TestoOriginale = Request.Form("Testo") TestoDaCercare = Replace(TestoOriginale,"'","''") %>
Per semplificare, la ricerca e sostituzione la effettuiamo su tutti i campi, anche se andrebbe effettuata solo dove necessario.
Recuperiamo ora gli altri valori relativi al tipo di ricerca e su quale campo effettuarla con:
<% TipoRicerca = Request.Form("Tipo") CampoRicerca = Request.Form("Campo") %>
Costruiamo la prima parte della stringa di ricerca ed apriamo la connessione con il database dopo averlo impostato come fonte dati ODBC :
<% TestoSql = "SELECT * FROM Elenco" Set dbConn = Server.CreateObject("ADODB.Connection") dbConn .Open("Elenco") %>
Il codice sottostante, che va ripetuto per ogni campo della tabella, controlla prima su quale campo abbiamo deciso di effettuare la nostra ricerca, controlla poi per quale tipo di ricerca abbiamo optato ("Esatta" o "Contenuto") ed infine costruisce dinamicamente la query:
<% If CampoRicerca = " <b>Cognome</b> " Then If TipoRicerca = "Contenuto" Then TestoSql = TestoSql & " WHERE <b>Cognome</b> LIKE '%" & TestoDaCercare & "%'" else TestoSql = TestoSql & " WHERE <b>Cognome</b> LIKE '" & TestoDaCercare & "%'" End If End If %>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.