Oggetto ADO e accesso ai dati by
neo Nella lezione precendente abbiamo introdotto il database relazionale. Chiunque abbia un minimo di dimestichezza
con access saprà come inserire modificare e cancellare i dati brutalmente dalle tabelle. Ma come fare ciò
attraverso una pagina web?
Il tutto avviene grazie agli Active X data Objects,
ADO per gli amici.
In Visual Basic esiste il controllo data che è molto simile ai pulsanti di scorrimento record di Access.
L'ADO in versione VB somiglia molto a quest'ultimo, ma è molto più potente. Il
rovescio della medaglia è che richiede un quantitativo di codice più significativo
rispetto al suo fratello minore.
Gli oggetti più importanti di ADO sono l'oggetto
connection e l'oggetto
recordset. In ASP la loro dichiarazione è molto semplice. Basta invocare
il metodo createobject dell'oggetto server per instanziarli.
set dataconn = server.createobject("ADOdb.connection")
set rs = server.createobject("ADOdb.recordset")
Per accedere ai dati è necessario disporre di una connessione verso un database.
Il sistema più comune è quello di sfruttare una sorgente dati ODBC, lo standard Microsoft che permette di accedere a svariati database.
L'oggetto connection si occupa di tutto a patto di possedere un Data Source Name
DSN.
Per crearne uno bisogna andare nel pannello di controllo di Windows NT, aprire
Origini dati ODBC.
In Windows 98 si chiamano
ODBC 32 mentre in Windows 2000 si trovano sotto la voce comune di
Strumenti di amministrazione sempre nel pannello di controllo.
Una volta aperta l'utilità di amministrazione selezionate la scheda DSN di sistema e aggiungete il vostro database
(Vi verrà proposto un'elenco di driver. Selezionate quello adatto al vostro file dati.) dando un nome alla vostra sorgente dati, ad
esempio
test.
A questo punto dopo aver instanziato l'oggetto connection, per accedere al database sarà sufficiente
invocare il metodo
open seguito dal nome del DSN.
dataconn.open "test"
Per agire sul database con query di comando basta invocare il metodo execute dell'oggetto connection.
Ovviamente vi starete chiedendo cosa bisogna scrivere nella stringa da passare alla nostra connection.
Ebbene tutto viene fatto nel linguaggio
SQL che è lo standard di comunicazione con i database.
Le keywords base del SQL sono molto semplici.
-
SELECT È la parola chiave utilizzata per estrarre i dati dal database.
-
INSERT È la parola chiave utilizzata per inserire i dati nel database.
-
UPDATE È la parola chiave utilizzata per modificare i dati del database.
-
FROM Sempre associata a SELECT E DELETE indica al parser SQL su quale tabella agire.
-
INTO Sempre associata a INSERT indica al parser SQL su quale tabella agire.
-
WHERE Sempre associata a SELECT, INSERT,UPDATE E DELETE indica al parser SQL su quali record agire.
Facciamo un piccolo esempio. Vogliamo cancellare un record dalla tabella ordini vista nella lezione precedente.
Per fare ciò un record non deve essere confondibile, altrimenti si rischia di cancellare dati che non si vogliono toccare.
Nella nostra tabella il campo Ordine era chiave primaria. Ciò significa che in quel campo non ci possono essere valori duplicati.
Di conseguenza basta chiedere al parser SQL di rimuovere il record corrispondente ad un determinato valore del campo Ordine.
strDelete="DELETE FROM ordini
WHERE ORDINE=1 ;"
dataconn.execute strdelete
È tutto.
Il comando di modifica è altrettanto semplice.
strUpdate="UPDATE ordini SET
ARTICOLO='CANDELABRO' WHERE ORDINE=1 ;"
dataconn.execute strupdate
Mentre qui c'è quello di inserimento.
strInsert="INSERT INTO ordini
(ID,ARTICOLO,DATASPEDIZIONE) VALUES (2,'CARAFFA TERMICA','2001-10-12') WHERE ORDINE=1
;"
dataconn.execute strInsert
Avrete notato sicuramente che non è stata menzionata la procedura di estrazione dei dati dal database.
Questo perché è un pochino più complesso ed utilizza l'oggetto recordset.
Prima di affrontare l'ultimo scoglio bisogna chiarire alcuni punti.
Nelle query di comando bisogna fare molta attenzione ad inserire la clausola Where.
Infatti l'assenza di tale clausola provoca l'applicazione della query all'intera tabella!
I valori testo vanno passati tra gli apici singoli.
Putroppo se si passa un valore che contiene un apice al suo interno il parser SQL restituisce un'errore.
Il carattere di escape per l'apice una sequenza di due apici ''. Quindi una stringa
del tipo
l'aquila
Andrà passata come
l''aquila
Per automatizzare tale sostituzione conviene crearsi una funzione.
function apicetto (stringa)
apicetto=replace(stringa,"'","''")
end function
e chiamarla tutte le volte che ci serve.
sql=apicetto(sql)
La data va passata come stringa composta in questo modo
YYYY-mm-DD.
Ma passiamo alla parte dedicata all'estrazione dei record. Ci seviremo come detto prima dell'oggetto
recordset.
Per funzionare l'oggetto recordset deve essere aperto.
L'apertura classica di un recordset avviene con la seguente sintassi.
rs.open sql,dataconn,3,3
sql è la stringa di interrogazione.
dataconn è la connessione attiva, e deve essere aperta prima di adoperarla nel recordset altrimenti si genererà un'errore.
I due 3 sono il lock ed il cursore.
Per ora vi basti sapere che è necessario impostarli cosi per utilizzare il recordset in modo corretto.
La sintassi SQL del nostro esempio potrebbe essere.
sql="SELECT * FROM ORDINI;"
Tradotto in linguaggio corrente significa estrai tutti i campi (l'asterisco è il carattere jolly) dalla tabella ordini.
Volendo specificare i soli campi che ci servono basterà intercalarli da una virgola.
Come ad esempio:
SELECT nome,cognome
FROM ORDINI; Per visualizzare sulla nostra pagina asp il contenuto
di un campo basterà utilizzare l'insieme fields dell'oggetto recordset.
<%=rs.fields("nome")%>
Assicuratevi di aver inserito il campo da visualizzare nella stringa SQL altrimenti vi verrà restituito un'errore.
Per visualizzare valori contenuti nei vari record, si utilizza il metodo movenext dell'oggetto recordset.
Ad esempio per visualizzare una tabella con tutti i record estratti dalla query nostra query basta scrivere il seguente codice.
<table>
<tr>
<td>
Nome
</td>
</tr>
<%do while not rs.eof%>
<tr>
<td>
<%=rs.fields("nome")%>
</td>
</tr>
<%rs.movenext%>
<%loop%>
</table>
Attenzione ad inserire sempre, prima del loop l'rs.movenext altrimenti il recordset resterà sempre sul primo record ed il ciclo si ripeterà
all'infinito finchè il server non si schianta!
Nella prossima impareremo ad usare le connessioni Dsn-less e Ole Db.
Leggi commentiNumero commenti inviati: 0