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

Conoscenza col Connection e Recordset non basta

Ulteriori informazioni sul Recordset
Ulteriori informazioni sul Recordset
Link copiato negli appunti

In precedenza siamo riusciti a estrarre un recordset dal nostro database. Bene, da qualche parte si deve pur cominciare. Se non l'avevi mai fatto sono sicuro che sei molto contento con te stesso ;o)

L'oggetto Recordset però è un po' più complicato di quello che abbiamo fatto fino adesso. Se ci hai fatto caso, nel programma
check_connection.asp abbiamo dovuto mantenere la Connection con il database aperta finché non abbiamo finito col recordset. La ragione è che il metodo che abbiamo adoperato, essendo il più semplice, ci ha dato un Connected Recordset. C'è un'altra maniera, e più efficiente di estrarre un recordset che ci permette di chiudere la connection non appena i dati sono arrivati. Questo è il Disconnected Recordset.

Modifichiamo il nostro Prendi_Recordset così che possiamo chiudere la connection subito. Prima però abbiamo bisogno di includere un file che contiene i valori delle costanti di ADO. Il file si chiama adovbs.inc e si include nella pagina con questa sintassi:

<!--#include virtual="yourwebroot/dovelatrovo/adovbs.inc"-->

Lo so che non abbiamo parlato di Includes e forse è meglio se ne parliamo subito. 

Gli Includes sono un po' come le Funtions e le Procedures e si adoperano per incapsulare del codice in modo da poterlo riutilizzare in molte pagine. Il motore di ASP, quando vede una direttiva "include", cerca il file e inserisce il codice che trova in quel punto del file. Personalmente io adopero poco i file include perché rendono il codice più difficile da leggere e possono creare problemi se la struttura del directory del sito cambia. Di regola si fa una folder chiamata include e tutte le include si chiamano di li. Per convenzione sono chiamati con estensione .inc ma le puoi chiamare anche con .asp. Come tutto il resto possono contenere ASP, HTML o una mescolanza di tutto. 

Con un po' di giudizio sono molto utili e anche noi li adopereremo presto. Il più grande vantaggio è che se mettiamo un file include che, per esempio, contiene un numero di funzioni utili al principio di tutte le nostre pagine, quando cambiamo l'include non dobbiamo cambiare nessuna delle nostre pagine.

Ma riprendiamo con la nostra funzione che ci dà indietro un recordset disconnesso.

<%
Function Prendi_Recordset(strConn, strsql)
'--------------------------------------------------------
'Purpose: ritorna un disconnetted recordset
'Date: 28 March 2001
'Commenti: 
'--------------------------------------------------------
Dim objConn, objRS
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CursorLocation = adUseClient
objRS.Open strsql, objConn, adOpenForwardOnly, adLockBatchOptimistic
Set objRS.ActiveConnection = Nothing
objConn.Close
Set objConn = Nothing
Prendi_RecordSet = objRS
End Function
%>

Ne segue che dalla nostra pagina la chiamiamo con:

<% Set objRS = Prendi_RecordSet(strConn, strsql) %>

La ragione per cui è preferibile chiudere le connessioni al database al più presto è che le connessioni richiedono al server risorse considerevoli. In più se non le chiudiamo esplicitamente rimangono aperte, con il risultato che le performance del Server deteriorano drasticamente. Non vogliamo, insomma, fare aspettare i nostri utenti più di quello che devono.

Spesso però dobbiamo fare delle query al database che non richiedono che il codice ci ritorni un recordset. Per esempio se volessimo inserire un nuovo record nella nostro database o se ne volessimo cambiare uno già in esistenza.
In questi casi è sufficiente collegarci e eseguire la query, così:

<%
dbConn = Application("dbconn")
strsql = "INSERT INTO tbl_feedback ( nome, email, commenti, ricevuto ) Values('amerigo vespucci','amerigo@nave.net','hello therè,Now());"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open dbConn
objConn.Execute strsql
%>

Quando questi programmi non funzionanao subito come vorresti, usa il response.write per vedere cosa è che non va. Per esempio con:

<% Response.write strsql %>

Potresti vedere il code sql della tua query. Se lo tagliamo e lo incolliamo nella query window di Access vedi subito se funziona o no. Lo puoi mettere a posto da lì e quando ha funzionato in Access lo puoi incollare di nuovo nel tuo programma.

Anche in questi case sarebbe meglio fare una Function così che la possiamo usare dappertutto e in una maniera uniforme. 

<%
Sub fai_query(strConn, strsql)
'--------------------------------------------------------
'Purpose: fa una query con una string valida di SQL
'Date: 29 March 2001
'Commenti: 
'--------------------------------------------------------
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
objConn.Execute strSQL
objConn.Close
set objConn = Nothing
End Sub
%>

Quando la chiamiamo dal nostro programma, questo basta

Call fai_query( strConn, strsql)

A questo punto abbiamo un bell'esempio per l'uso di una include file. Se mettiamo queste Procedure e funzioni che abbiamo scritto per connetterci al database in un file unico e chiamandolo attrezzi_db.inc, possiamo adoperarle dappertutto nelle nostre pagine.

<!--#file virtual=lamiaWebRoot/include/attrezzi_db.inc -->

Il nostro programma diventa molto più facile da leggere, ci risparmiamo un mucchio di linee di codice e siamo sicuri che chiudiamo le
Connections.

Ti consigliamo anche