Home Page  >>>  Training  >>>  ASP

Registrati su TheZion
Password Persa




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.

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 commenti

Numero commenti inviati: 0