Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Come fare per leggere il contenuto di una tabella che si trova su un sito Internet remoto? Questo articolo implementa una soluzione sviluppata da Moreno Sirri e pubblicata sul suo sito (http://www.msvbsite.net). Con il sempre più crescente sviluppo della tecnologia Microsoft
COM (Component Object
Model) aumentano i programmi che utilizzano risorse distribuite su
vari server.
Tale forma di scambio di dati è l'XML (Extended Markup Language), un linguaggio di marcatura in grado di trasferire dati di qualunque genere, nato come evoluzione dell'HTML utilizzato per disegnare le pagine Web. Il nostro progetto si compone di due parti: la prima è scritta
in ASP (Active Server Pages) e servirà
come interfaccia tra il nostro programmino scritto in VB ed il database
remoto. La pagina ASP interrogherà il Database per noi e restituirà
un Recordset XML. Il nome del Recordset richiesto sarà passato
attraverso il metodo GET.
Alle righe 3-8 sono dichiarate alcune costanti di ADO.
In Visual Basic normalmente non sono ncessarie, ma poiché stiamo
utilizzando ASP esse non sono presenti. Suppliamo alla loro mancanza dichiarandole
manualmente. Seguono le dichiarazioni di tre variabili: CONN sarà la connessione al database da aprire, RS sarà il Recordset che verrà aperto dalla connessione ed i cui dati saranno restituiti alla chiamata della pagina ASP; XMLStream è invece uno stream che verrà utilizzato per trasformare il Recordset in XML da inviare al browser.
È necessario dedicare una nota particolare alla possibilità che si verifichi un errore durante l'apertura del Recordset richiesto. Dall'altro lato dell'applicazione si trova un programmino Visual Basic, che si aspetta comunque dei dati in una forma corretta. Sarà pertanto necessario verificare la presenza di errori ed in questo caso restituire comunque un Recordset. Ecco perché alla riga 14 abbiamo inserito la funzione di gestione degli errori. Istanziate le due variabili CONN ed RS, segue la normale sequenza di istruzioni per l'apertura di una connessione ADO e del Recordset richiesto (righe 17-19).
Nel caso che si verifichi un errore, faremo in modo che la pagina restituisca comunque un Recordset valido contenente il messaggio di errore generato.
Alla riga 21 viene istanziato il Recordset se la precedente istanza ha avuto esito negativo. Se il Recordset RS arriva aperto, sarà chiuso per permettere la modifica della struttura. Saranno aggiunti quattro campi (Type, Source, Description e Code), viene aperto il Recordset, vengono aggiunti dei dati che indicano l'errore che si è verificato (righe 24-36). Solo allora viene rimpossa la funzione di gestione degli errori. Dalla riga 39 in poi tutti gli errori che si saranno verificati non saranno controllati. L'ideale sarebbe di creare una nuova sezione di codice per la gestione dei nuovi errori.
Alla riga 40 viene istanziato lo Stream. Alla riga successiva viene salvato il Recordset RS all'interno dello stream XMLStream; la costante adPersistXML identifica il tipo di salvataggio (in XML quindi). Alle righe 42-45 vengono chiusi e deallocati Recordset e connessione. Completiamo il nostro programmino ASP con la restituzione dei dati al chiamante. Viene innanzitutto definito il tipo di dati restituiti (riga 46) e poi viene restituito il contenuto di XMLStream, prima di chiuderlo e deallocarlo. Se richiamassimo questa pagina ASP mediante un browser riceveremmo un Recordset XML da esplorare. Nel nostro caso abbiamo invece un semplice programma scritto in Visual Basic; vediamolo:
Il progetto farà uso di ADO
2.6 e pertanto sarà necessario aggiungere tale libreria
alla lista dei riferimenti
del progetto. Il form contiene solo 4 controlli. Il primo di questi è
una Microsoft FlexGriddi
nome Griglia, che occupa quasi la totalità della superficie
del form. Gli altri controlli sono una Labeldi
nome URLLabel, una TextBoxdi
nome URLText ed un CommandButtondi
nome ApriDBRemoto.
Nel momento in cui l'utente clicca sul pulsante ApriDBRemoto viene avviata la connessione al sito Internet remoto. Il suo funzionamento è molto semplice. Alla riga 4 dichiariamo un Recordset di nome RS e lo allochiamo alla riga 9. Tutti gli errori saranno gestiti (riga 8) dalla sezione di codice identificata con l'etichetta ERRORE. Alla riga 10 viene effettuata l'apertura del Recordset, fornendo come
origine della tabella l'indirizzo Internet presente nella TextBox URLXML.
Ricordiamoci cosa faceva la nostra pagina ASP nel momento in cui si verificava un errore! Essa creava un Recordset contenente quattro campi e li riempiva con i dati dell'errore generato.
Pertanto alla riga 11 viene verificato se i primi due campi del Recordset ricevuto si chiamano Type e Source. In tal caso viene generato volontariamente un errore con i dati presenti nel Recordset. L'errore sarà gestito dalla funzione apposita. Solo allora sarà possibile azzerare la Griglia e riempirla
con i dati ricevuti. Dopo aver preparato righe e colonne, verranno utilizzati
due cicli per estrarre i dati dal Recordset (righe 12-21). La procedura si conclude con la chiusura e deallocazione del Recordset RS.
Se si dovesse verificare un errore sarà mostrata una finestra di dialogo con la descrizione dell'errore (riga 26) e se il Recordset è ancora aperto sarà chiuso prima di essere deallocato.
Seguono tre semplicissime funzioni non fondamentali, ma utili. La prima mostra un avviso sull'autore del codice originale, per rispettare le regole di copyright presenti nella pagina da cui viene fatto spunto per questo esempio (riga 31-33). Nel momento in cui l'utente clicca due volte sulla griglia essa sarà azzerata. La sua funzione si rivela utile prima di richiedere una nuova pagina, per verificare se i dati sono stati effettivamente aggiornati (righe 35-37). L'ultima funzione blocca la pressione del tasto Invio nella casella URLXML, in modo da non generare un indirizzo Internet con un carattere di Invio inserito in mezzo (righe 39-41).
Possiamo passare alla prova del programma, molto semplice. Se si dovesse generare un errore, sarà mostrato un avviso di errore che, purtroppo, conterrà tantissimi caratteri incomprensibili a causa della diversa codifica tra Visual Basic e Internet. È molto interessante notare che è possibile anche salvare i Recordset XML in files con estensione XML e poi richiamarli fornendo semplicemente l'indirizzo Internet della pagina XML salvata. Questa soluzione si rivela molto utile per alleggerire il lavoro del
server e per poter utilizzare anche connessioni a database remoti quando
il server ASP è inutilizzabile o non disponibile. Sarà possibile
infatti inserire pagine XML statiche anche in server che non supportano
ASP. |
Il progetto è soltanto la punta di un grosso iceberg e mediante soluzioni di questo genere è possibile creare anche applicazioni di una certa grandezza ed importanza. In questo esempio è stata effettuata la sola lettura del Recordset originale ma con questa stessa tecnica è possible anche effettuare modifiche di dati sul server remoto. La gestione degli errori è molto rozza e presenta numerose pecche. Moreno
Sirri e Fibia FBI
|
Torna all'introduzione delle Richieste dei lettori |