Cuore Batti Cuore - Loris Reinhard - Radio Genius - Alex Damiani e-Thomas.net Network:
 
Il tuo IP: 38.103.63.60
 

Altro
Scarica

 

Sei in: Per i Webmaster - Corso di ASP - Oggetto Recordset

Come per l'oggetto Connection, anche l'oggetto Recordset deve essere istanziato prima di poter essere utilizzato e le istruzioni sono molto simili:

Dim objRs
Set objRs = Server.CreateObject("ADODB.Recordset")

La variabile objRs contiene l'oggetto ma non è sufficiente l'istanza per inserire dati nell'oggetto, bisogna utilizzare il metodo Open, la cui forma generale è la seguente:

objRs.Open source, connection, cursortype, locktype, commandtype

source
è o un oggetto Command che vedremo più avanti o una stringa che contiene le informazioni relative alla connessione
connection è o un oggetto Connection o una stringa contenente le informazioni relative alla connessione
cursortype indica in che modo ci si potrà spostare all'interno del recordset
locktype determina in che modo sarà possibile, se lo sarà, scrivere nel database
commandtype indica come dovrà essere interpretato il parametro source

Per quanto riguarda il valore che potranno avere i parametri cursortype, locktype e commandtype, bisogna fare riferimento a delle costanti, le costanti ADO che sono tutte raccolte in un file particolare che di norma si trova nella cartella C:\Programmi\File Comuni\System\ado e il cui nome è adovbs.inc.

Seguono tre tabelle che riassumono i valori delle costanti ADO che interessano i parametri del metodo Open dell'oggetto Recordset.

CursorType

Nome Valore Descrizione
adOpenDynamic 2 Apre un cursore dinamico
adOpenForwardOnly 0 Default. Apre un cursore "solo in avanti"
adOpenKeyset 1 Apre un cursore di tipo keyset
adOpenStatic 3 Apre un cursore di tipo statico
adOpenUnspecified -1 Indica un valore non specificato per il tipo di cursore

LockType

Nome Valore Descrizione
adLockBatchOptimistic 4 I record non vengono bloccati finché non avviene un aggiornamento batch. Questa opzione dovrà essere utilizzata con cursori lato client e Recordset non connessi
adLockOptimistic 3 I record sono bloccati solo quando si chiama il metodo update
adLockPessimistic 2 I record sono bloccati immediatamente quando inizia la modifica per garantire che non vi siano discrepanze fra quando i nuovi valori sono stati inseriti e quando si verifica il comando Update
adLockReadOnly 1 Default. I record sono di sola lettura e non possono essere modificati. Inoltre, non si possono aggiungere nuovi record
adLockUnspecified -1 La copia dei dati viene creata con lo stesso tipo di bloccaggio dell'originale

CommandType

Nome Valore Descrizione
adCmdFile 256 Il provider interpreta il comando (source) come un file precedentemente salvato
adCmdStoredProc 4 Il provider interpreta il comando (source) come una store procedure
adCmdTable 2 Il provider genera una query SQL che ritorna tutti i record della tabella indicata dal comando (source)
adCmdTableDirect 512 Il provider ritorna tutti i record della tabella indicata dal comando (source)
adCmdText 1 Il provider interpreta il comando (source) come una definizione testuale di una istruzione, ad esempio una istruzione SQL
adCmdUnknown 8 Il tipo di istruzione nel comando (source) non è conosciuto
adCmdUnspecified -1 Il tipo di comando non è specificato

Vi sono vari modi per utilizzare un Recordset, ad esempio utilizzando delle connessioni implicite che però potrebbero risultare difficili da interpretare nel caso di modifiche da apportare al codice a distanza di tempo o nel caso di lavori di equipe. Solitamente si preferisce aprire esplicitamente la connessione e utilizzare l'oggetto Recordset impostando tutti i parametri richiesti, anche quelli di default.

Per poter utilizzare queste costanti, si può agire importando il file adovbs.inc nel proprio sito e facendo l'inclusione di tale file nelle pagine che avranno bisogno delle costanti stesse oppure dichiarando, in un file da includere o all'interno delle pagine interessate, solo le costanti di cui si pensa di avere bisogno. Si sconsiglia vivamente l'utilizzo diretto dei numeri nella istruzione che apre il recordset, se non altro per una maggior chiarezza del codice.

Leggere i dati di un database
Vediamo quindi qualche esempio di utilizzo dell'oggetto Recordset. Ipotizziamo di avere un database Access contenente una tabella Utenti con i campi Nome e Cognome, di volerne leggere il contenuto e di riportarlo a video. Quella che segue è una delle possibili sintassi:

<!--#include file="percorso/adovbs.inc"-->
<%
    Dim path, objCon, objRs, strSql
    path = "percorso\nomefile.mdb"
    Set objCon = Server.CreateObject("ADODB.Connection")
    objCon.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath(path)
    Set objRs = Server.CreateObject("ADODB.Recordset")
    strSql = "SELECT * FROM Utenti"
    objRs.Open strSql, objCon, adOpenForwardOnly, adLockReadOnly, adCmdText
    Do While Not objRs.EOF
        Response.Write objRs("Nome") & " " & objRs("Cognome") & "<br>"
        objRs.Movenext
    Loop
    objRs.Close
    Set objRs = Nothing
    objCon.Close
    Set objCon = Nothing
%>

Dopo aver incluso il file contenente le costanti ADO, si dichiarano le variabili necessarie. Si apre la connessione, in questo caso sfruttando il metodo MapPath dell'oggetto Server per ricavare il percorso assoluto del database, si apre il recordset e si crea un ciclo che arriverà fino alla fine del recordset (EOF = End Of File - riga 10) prendendo in esame un record alla volta grazie al metodo Movenext. Alla fine del ciclo, quando ormai il recordset è stato utilizzato e la connessione non è più necessaria, è bene chiudere entrambi gli oggetti e ripulire la memoria del server (linee 13, 14, 15 e 16).

Una alternativa potrebbe essere quella di impostare le proprietà del recordset una per una e poi di aprire l'oggetto con l'istruzione open, ovvero:

<!--#include file="percorso/adovbs.inc"-->
<%
    Dim path, objCon, objRs, strSql
    path = "percorso\nomefile.mdb"
    Set objCon = Server.CreateObject("ADODB.Connection")
    objCon.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath(path)
    Set objRs = Server.CreateObject("ADODB.Recordset")
    strSql = "SELECT * FROM Utenti"
    objRs.Source = strSql
    objRs.ActiveConnection = objCon
    objRs.CursorType = adOpenForwardOnly
    objRs.LockType = adLockReadOnly
    objRs.Open ,,,,adCmdText
    Do While Not objRs.EOF
        Response.Write objRs("Nome") & " " & objRs("Cognome") & "<br>"
        objRs.Movenext
    Loop
    objRs.Close
    Set objRs = Nothing
    objCon.Close
    Set objCon = Nothing
%>

In questo caso i primi quattro parametri necessari al metodo open sono dichiarati esplicitamente, l'ultimo, cioè il tipo di comando, viene invece passato come parametro, non prima però di aver aggiunto le virgole necessarie al metodo open per capire che si tratta dell'ultimo parametro (objRso.Open ,,,,adCmdText).

Fino ad ora abbiamo visto come leggere dei dati da un database; ma quali altre operazioni sono possibili su un archivio dati? Sono tre e precisamente inserimento di nuovi record, modifica di record esistenti e cancellazione di record esistenti. Nonostante queste operazioni siano fattibili anche tramite l'oggetto recordset, si preferisce l'utilizzo di un nuovo oggetto, esplicitamente creato per questo tipo di operazioni, ovvero l'oggetto Command, che vediamo nella prossima sezione.

Contattaci. Stampa questa pagina. Contattaci via SMS. e-Thomas.net © 2009 Tutti i diritti riservati
 

F.A.Q. - Chi Siamo - Sitemap - Aspetti legali - Privacy - Le nostre fonti - RSS

Utenti connessi: 8 - Visite: 436.606 dal 10/02/2004 - Visite medie giornaliere: 244