Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Facciamo la conoscenza con il Connection e il Recorset

L'oggetto Recordset: cosa è e come gestirlo
L'oggetto Recordset: cosa è e come gestirlo
Link copiato negli appunti

Congratulazioni ;o)
Adesso che hai passato questo ostacolo, non ce ne sono più. Di qui in poi, è tutta discesa. A dir la verità, è proprio incredibile come si fa presto al giorno d'oggi. Fino a poco tempo fa ci sarebbero volute delle settimane per fare una cosa simile. La metafora del Lego sta diventando più e più realtà.

Allora cos'è che abbiamo fatto esattamente? Cosa significa il codice che abbiamo usato?

Cominciamo dal principio:

Abbiamo già visto prima come si costruisce un oggetto con NewMail. Qui faremo lo stesso. Costruiamo un oggetto
Connection che appartiene ad ADO e lo chiamiamo objConn.

Set objConn = Server.CreateObject("ADODB.Connection")

Poi usando il metodo Open del Connection Object ci colleghiamo al database:

objConn.Open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:/asptutorial/crm.mdb")

Adesso abbiano bisogno di un oggetto Recordset (anche questo di ADO) per metterci dentro tutti i nostri dati che vengono fuori quando interroghiamo il database.

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

E poi con il metodo Execute dell'oggetto Connection eseguiamo una query al database e depositiamo il risultato nel recordset che abbiamo costruito.

set objRs = objConn.Execute("SELECT * from tbl_feedback")

Ciò che faremo di qui in poi l'abbiamo già visto. Questo While Loop semplicement dice "fai finché non siamo arrivati alla fine del file" (EOF = End Of File) 

Do While NOT objRs.EOF

Scrivimi il nome, email e commenti del primo record:

response.write "nome = " & objRs("nome") & "<br>"
response.write "email = " & objRs("email") & "<br>"
response.write "commenti = " & objRs("commenti") & "<br>"
response.write "<hr size='1' color='midnightbluè width='40%' align='left'>"

e quando l'hai fatto spostati al prossimo record

objRs.Movenext

e rifallo

Loop

Poi si pulisce. 

<%
objRs.Close
Set objRs = Nothing
objConn.Close
Set objConn = Nothing
%>

Tutto qui. 

Naturalmente questa non è l'unica maniera di scrittura del codice e forse neanche la più efficiente, comunque avrai poi tempo di sperimentare per conto tuo. Questo metodo è semplice e valido.

Bisogna sottolineare che è molto importante chiudere il recordset e la connection. Vedremo i motivi un po' più avanti.

La regola più importante per accedere ad una database è uguale a quella nell'affrontare una rotonda stradale: entra più svelto che puoi ed esci appena possibile. Quindi la connection deve essere chiusa al più presto possibile in modo da far posto a un'altra macchina. È più che sicuro che nella nostra
applicazione queste righe di code saranno ripetute molte volte anche spesso nella stessa pagina. Anche se fai 100 chiamate nella stessa pagina mai lasciare aperta la connection, chiudila sempre e crearne un'altra quando ne hai bisogno. Altrimenti se continui a girare intorno e intorno gli altri faranno fatica ad entrare.

Allora, vediamo se possiamo semplificare un po' il codice che abbiamo scritto per evitare di scrivere sempre tutto. 

Per esempio la string che usiamo per collegarci al database, poiché è sempre la stessa, non potremmo metterla nel global.asa? Ricordi? Se la mettiamo in quel file ce l'abbiamo sempre e se spostiamo il database da un'altra parte o se ne facciamo un'altra dobbiamo solo cambiare quella linea e
tutto il resto funziona.

<%
Sub Application_OnStart()
strDbConn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:/asptutorial/crm.mdb"
Set Application("dbconn") = strDbConn
End Sub
%>

Cosi che nelle nostre pagine ci colleghiamo così:

<% objConn.Open Application("dbconn") %>

O ancora meglio, potremmo scriver una procedura

<%
Sub Prendi_Recordset(objConn, objRs, strConn, strsql)
'--------------------------------------------------------
'Purpose: riceve un recordset dalla mia database
'Date: 28 March 2001
'Commenti: 
'--------------------------------------------------------
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
Set objRS = objConn.Execute (strsql)
End Sub
%>

Tutte le volte che devi accedere al database basta una riga sola

<%
call Prendi_recordset(objConn, objRS, strConn, strsql)
dove naturalmente strConn e strsql sono:
strsql ="SELECT * from tbl_feedback"
strConn = Application("dbconn")
%>

e così finiamo questo programma per bene. (Segue check_connection.asp)

<%
Option Explicit
'--------------------------------------------------------
'Purpose: controlla se la nostro database funzione
'Date: 28 March 2001
'Commenti:
'--------------------------------------------------------
Dim objConn, objRs
call Main()
Sub Main()
'--------------------------------------------------------
'Purpose: logica dell'applicazione
'Date: 28 March 2001
'Commenti:
'--------------------------------------------------------
Dim strConn, strsql
strConn = Application("dbconn")
strsql ="SELECT * from tbl_feedback"
call Prendi_Recordset(strConn, strsql)
call Guarda_Recordset(objRs)
'pulisci e chiudi
objRs.Close
Set objRs = Nothing
objConn.close
Set objConn = Nothing
End sub
Sub Guarda_Recordset(objRs)
'--------------------------------------------------------
'Purpose: mostra un recordset dalla mia database
'Date: 28 March 2001
'Commenti:
'--------------------------------------------------------
Do while NOT objRs.EOF
response.write "nome = " & objRs("nome") & "<br>"
response.write "email = " & objRs("email") & "<br>"
response.write "commenti = " & objRs("commenti") & "<br>"
response.write "<hr size='1' color='midnightbluè width='40%' align='left'>"
objRs.Movenext
Loop
End sub
Function Prendi_Recordset(strConn, strsql)
'--------------------------------------------------------
'Purpose: riceve un recordset da un query
'Date: 28 March 2001
'Commenti: 
'--------------------------------------------------------
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
Set objRs = objConn.Execute (strsql)
End Function
%>

Ti consigliamo anche