ASP e Database A cura di Michele Cavalieri (fonte http://www.aspitalia.com/articoli/db/introduzione.aspx ) Un aspetto fondamentale di ASP è l'utilizzo dei componenti, che non sono altro che ActiveX come quelli che si possono creare con Visual Basic, Visual C++, Visual J++ , Delphi, eccetera. Il più utile tra tutti i componenti ASP è il Database Access, detto anche ActiveX Data Object (ADO). Nella pubblicazione di database su Web si utilizza questo componente e gli oggetti in esso contenuti per leggere e scrivere su fonti dati ODBC ( Open Database Connectivity). Come interrogare un database con ASP • • • • un database; il driver OBDC di Access97 (contenuto nel file ODBCJT32.DLL) o quello di SQLServer; conoscenza di ADO; conoscenza di SQL; ADO Come detto prima, ADO è lo strumento necessario per operare sulla fonte di dati ODBC (il vostro database). Di questo componente bisogna assolutamente conoscere l'oggetto Connection, indispensabile per il suo utilizzo. L'oggetto Connection viene creato tramite il metodo CreateObject dell'oggetto Server e utilizza una variabile per ricevere il riferimento ad un'oggetto. Una volta creato, l'oggetto Connection può essere utilizzato per aprire una connessione con qualsiasi fonte di dati ODBC. Sorgente di dati ODBC di Windows Quest'operazione avviene con l'ODBC Data Source Administrator, generalmente localizzato nel Pannello di controllo. La realizzazione della sorgente di dati avviene selezionando la pagina System DNS nel property sheet ODBC data source Administrator. In questa pagina premere il pulsante Add... per visualizzare un elenco di tutti i driver ODBC disponibili. Dopo aver selezionato il driver ODBC appropriato premere il pulsante Finish che introduce un nuovo oggetto. Il codice seguente stabilisce una connessione con una fonte di dati ODBC Microsoft Access Driver chiamata Registrazioni. <% ' dichiaro la variabile che conterrà l'oggetto Connection Dim conn 'creo l'oggetto Connection Set conn = Server.CreateObject("ADODB.Connection") 'apro la connessione con la fonte di dati conn.Open "Registrazioni" %> Connessione DSN-less In alcuni casi, ad esempio per non costringere il proprio amministratore a creare una quantità elevata di sorgenti ODBC, è possibile creare, ma solo nel caso in cui il database sia Access, una connessione DSN-less. Tutto quello per compiere un'operazione di questo tipo è usare al posto del codice precedente, quest'altro: <% ' dichiaro la variabile che conterrà l'oggetto Connection Dim conn 'creo l'oggetto Connection Set conn = Server.CreateObject("ADODB.Connection") 'apro la connessione con la fonte di dati conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("/data/database.mdb") %> Naturalmente al posto di "/data/database.mdb" va inserito l'esatto percorso di ricerca in cui è stato salvato il file mdb. Ed ora... Una volta aperta la connessione con la fonte di dati, è possibile utilizzare un oggetto Recordset per recuperare le informazioni. L'oggetto Recordset consente di eseguire le istruzioni SQL restituendo un insieme di record filtrati tramite la query. Come l'oggetto Connection, Recordset viene creato utilizzando l'oggetto Server. <% ' dichiaro la variabile che conterrà l'oggetto Recordset Dim rs 'creo l'oggetto Recordset Set rs = Server.CreateObject("ADODB.Recordset") 'Eseguo la query SQL SELECT rs.Open "SELECT *", conn %> Dopo aver recuperato i record è possibile leggerli con i metodi MoveFirst, MoveLast, MoveNext e MovePrevious. Il metodo Write dell'oggetto Response consente di dare in output i dati sulla pagina in HTML. <TABLE> <% Do While not rs.EOF %> <TR> <TD><% rs.Fields("colonna").Value %></TD> </TR> <% rs.MoveNext Loop %> </TABLE> Esempi di interrogazioni semplici La paginazione Spesso una query restituisce molte più righe di quante possano essere visualizzate. Ad esempio un motore di ricerca Internet può avere migliaia di riferimenti rispetto alla parola chiave cercata ed è chiaro che non è consigliabile visualizzare tutti i dati in un'unica pagina. La paginazione consente di distribuire i risultati su più pagine. ADO supporta la paginazione tramite le proprietà PageSize, PageCount a AbsolutePage dell'oggetto recordset. La proprietà PageSize specifica quante ennuple devono essere contenute nella pagina, e tramite la proprietà PageCount, è possibile determinare il numero complessivo di pagine. E' Possibile accedere ad una determinata pagina tramite la proprietà AbsolutePage. Il programma richiede un solo file ASP per eseguire tutto il processo di navigazione. Esempio di interrogazione con paginazione Cosa conoscere di SQL SQL (che si pronuncia siquel) è l'abbreviazione di Structured Query Language e rappresenta lo standard per la definizione, l'interrogazione e l'aggiornamento di database relazionali. In questo tutorial mi limiterò nel spiegare la più semplice e generale struttura del linguaggio SQL. Le istruzioni in SQL vengono raggruppate a blocchi; ciascun blocco contiene tre tipi di clausole, la clausola SELECT, la clausola FROM, e la clausola WHERE. SELECT nomi di attributi FROM nomi di relazioni WHERE condizione di ricerca sui dati, Ad esempio, l'interrogazione per trovare il valore di IDENTIFICATIVO per l'azienda TRANSISTOR è espressa come segue: SELECT IDENTIFICATIVO FROM AZIENDE WHERE NOMEAZIENDA = TRANSISTOR Le tre clausole individuano rispettivamente: 1. Gli attributi da includere nel risultato. 2. Le relazioni su cui operare. 3. La condizione di ricerca. In particolare, questa condizione potrebbe essere più complessa e coinvolgere al suo interno altri blocchi. Un'altra importante parola chiave è DISTINCT che prevede l'eliminazione delle ripetizioni dai risultati. Si utilizza immediatamente dopo la parola chiave SELECT. SELECT DISTINCT Provincia FROM Indirizzo Le condizioni elementari che compaiono nella clausola WHERE possono avere altre forme, oltre a quelle già viste per l'operatore di selezione. Esse sono le seguenti. • • • <attributo> BETWEEN <valore> AND <valore>. <attributo> IN (<lista di valori>). <attributo> LIKE <stringa incompleta>. I primi due casi selezionano rispettivamente i records in cui il valore dell'attributo è uguale ad uno dei valori elencati nella lista, e i records in cui il valore dell'attributo è compreso fra i due valori specificati o uguale ad uno di essi. IN seleziona i records della relazione in cui il valore dell'attributo sia uno di quelli elencati nella lista di valori. La parola chiave LIKE esegue un confronto selezionando i records in cui l'attributo specificato nella stringa <stringa incompleta> ha come valore una stringa che può essere rappresentara dalla stringa incompleta. Molto comoda è la parola chiave COUNT, che calcola il numero di records oppure il numero di valori distinti che soddisfano una certa condizione. L'inserimento Le operazioni di inserimento vengono specificate per mezzo dell'istruzione INSERT che ha due possibili strutture: INSERT INTO <nome relazione> (<lista attributi>) VALUES (<lista valori>) INSERT INTO <nome relazione> (<lista attributi>) SELECT (<lista valori>) Esempio di inserimento di dati L'eliminazione L'eliminazione di records viene specificata per mezzo dell'istruzione DELETE. DELETE FROM <nome relazione> WHERE <condizione> che elimina dalla relazione tutti i records che soddisfano la condizione. La modifica La modifica di records viene specificata per mezzo dell'istruzione UPDATE. UPDATE <nome relazione> SET <attributo> = <espressione> <attributo> = <espressione> <attributo> = <espressione> ....... WHERE <condizione>