3. Tabelle Pivot – Il Funzionamento della Cache
Che cos’è la Cache
» E’ importante conoscere questo elemento perché si tratta di qualcosa che viene
automaticamente generata quando si crea una tabella pivot.
» È un oggetto che contiene una replica dell'origine dati. Anche se non possiamo vederlo
esplicitamente, è una parte della cartella di lavoro ed è connesso alla tabella pivot.
ATTENZIONE! Quando si
apportano modifiche nella
tabella pivot, Excel non
utilizza l'origine dati, ma
utilizza la Pivot Cache.
4. Tabelle Pivot – Il Funzionamento della Cache
» Il motivo per cui viene generata una cache pivot è ottimizzare il funzionamento
della tabella pivot.
» Anche quando si hanno migliaia di righe di dati, una tabella pivot è super veloce
nel riassumere.
» Possiamo trascinare gli oggetti nelle caselle righe / colonne / valori / filtri ed Excel
aggiornerà immediatamente i risultati.
» La Pivot Cache permette questo funzionamento ottimizzato di una tabella pivot.
» Tuttavia merita sottolineare che mentre di solito si pensa di essere direttamente
collegati ai dati di origine, in realtà, quando si apportano modifiche nella tabella
pivot, si accede alla cache pivot (e non ai dati di origine).
» Questo è anche il motivo per cui è necessario aggiornare la tabella pivot per
riflettere eventuali modifiche apportate al set di dati.
5. Tabelle Pivot – Effetti Collaterali della Cache
Ignorare gli effetti collaterali del meccanismo di
caching delle tabelle pivot può nuocere
gravemente alla salute del programmatore vba
» Uno svantaggio della cache pivot è che
aumenta le dimensioni della cartella di lavoro.
» Poiché si tratta di una replica dei dati di
origine, quando si crea una tabella pivot, una
copia di tali dati viene archiviata nella Pivot
Cache.
» Quando si utilizzano set di dati di grandi
dimensioni per creare una tabella pivot, le
dimensioni del file della cartella di lavoro
aumentano in modo significativo.
6. Tabelle Pivot – Effetti Collaterali della Cache
» Da Excel 2007 in poi, se si dispone già di
una tabella pivot e si crea una tabella pivot
aggiuntiva utilizzando gli stessi dati di
origine, Excel condivide automaticamente
la cache di pivot (il che significa che
entrambe le tabelle pivot utilizzano la
stessa cache di pivot).
» Ciò è utile in quanto evita la duplicazione
della cache pivot e, a sua volta, riduce
l'utilizzo della memoria e riduce le
dimensioni del file
7. Tabelle Pivot – Effetti Collaterali della Cache
» Mentre una cache pivot condivisa migliora il funzionamento della tabella pivot
e l'utilizzo della memoria, soffre delle seguenti limitazioni:
▪ Quando si aggiorna una tabella pivot, tutte le tabelle pivot collegate alla
stessa cache vengono aggiornate.
▪ Quando si raggruppano i campi in una delle tabelle pivot, questo viene
applicato a tutte le tabelle pivot utilizzando la stessa cache di pivot. Ad
esempio, se si raggruppano le date per mesi, questa modifica si rifletterà in
tutte le tabelle pivot.
▪ Quando si inserisce un campo/elemento calcolato in una delle tabelle
pivot, viene visualizzato in tutte le tabelle pivot che condividono la cache
pivot.
8. Tabelle Pivot – Generazione Automatica con VBA
» Per comodità, dividiamo l'intero processo in 8 semplici passaggi che ci permetteranno di scrivere
codice vba in grado di automatizzare tutte le tabelle pivot.
1. Dichiarare le variabili
2. Inserire un nuovo foglio di lavoro
3. Definire intervallo di dati
4. Creare la cache pivot
5. Inserire una tabella pivot vuota
6. Inserire campi riga e colonna
7. Inserire campo dati
8. Formattare la tabella pivot
9. Tabelle Pivot – 1. Dichiarazione Variabili
» Il primo step consiste nella dichiarazione
delle variabili utilizzate nel nostro
programma
▪ PSheet: per creare un foglio per una
nuova tabella pivot.
▪ DSheet: da utilizzare come foglio dati.
▪ PChache: da utilizzare come nome per
la cache della tabella pivot.
▪ PTable: da utilizzare come nome per la
nostra tabella pivot.
▪ PRange: per definire l'intervallo dei dati
di origine.
▪ LastRow e LastCol: per ottenere l'ultima
riga e colonna del nostro intervallo di
dati.
10. Tabelle Pivot – 2. Inserimento nuovo worksheet
» Prima di creare una tabella pivot, Excel
inserisce un foglio vuoto e quindi crea una
nuova tabella pivot.
» Il codice VBA Inserisce un nuovo foglio di
lavoro con il nome "Tabella pivot" prima del
foglio di lavoro attivo e se esiste già un foglio
di lavoro con lo stesso nome, lo eliminerà
prima.
» Dopo aver inserito un nuovo foglio di lavoro,
questo codice imposterà il valore della
variabile PSheet su foglio di lavoro della
tabella pivot e DSheet sul foglio di lavoro dei
dati sorgente.
11. Tabelle Pivot – 3. Definizione Data Range
» La prossima cosa è definire l'intervallo di dati dal foglio di lavoro sorgente.
» Qui è necessario gestire il fatto che non dobbiamo specificare un intervallo di sorgenti fisse per non
compromettere la generalizzazione del codice.
» Dobbiamo pertanto scrivere un codice che possa identificare l'intero dato dal foglio sorgente.
» Questo può essere ottenuto o tramite l’utilizzo dell’oggetto currentRegion oppure tramite la proprietà
End come in questo caso:
12. Tabelle Pivot – 4. Creazione Pivot Cache
» In Excel 2000 e versioni successive, prima di creare una tabella pivot è necessario creare una cache pivot per
definire l'origine dati.
» Normalmente quando si crea una tabella pivot, Excel crea automaticamente una cache pivot senza chiedere
informazioni all'utente, ma quando si utilizza VBA, è necessario scrivere un codice per questo.
» Questo codice effettua due operazioni, prima definisce una cache pivot utilizzando l'origine dati e,
successivamente, definisce l'indirizzo della cella nel nuovo foglio di lavoro per inserire la tabella pivot.
» È possibile modificare la posizione della tabella pivot modificando questo codice.
13. Tabelle Pivot – 5. Inserimento Pivot Vuota
» Dopo la cache pivot, il passo successivo è inserire una tabella
pivot vuota.
» Ricordate che quando create una tabella pivot ottenete
sempre una pivot vuota per la quale poi vengono definiti tutti i
valori, le colonne e le righe.
» Questo codice crea una tabella pivot vuota e la denomina
"SalesPivotTable". Potete cambiare questo nome dal codice
stesso.
14. Tabelle Pivot – 6. Inserimento Campi Riga e Colonna
» Dopo aver creato una tabella pivot vuota, la prossima cosa è inserire i campi riga e colonna;
» Per ogni campo riga e colonna, è necessario scrivere un codice.
» Qui vogliamo aggiungere anni e mesi nel campo riga e zone nel campo colonna.
15. Tabelle Pivot – 6. Inserimento Campi Riga e Colonna
» In questo codice, abbiamo utilizzato l'anno e il mese come due campi. Possiamo notare che c'è
anche un numero di posizione.
» Questo numero di posizione definisce la sequenza di campi.
» Ogni volta che vogliamo più di un campo (Riga o Colonna) dobbiamo assicurarci di specificare la
loro posizione. I campi possono essere cambiati modificando il loro nome dal codice.
16. Tabelle Pivot – 6. Inserimento Campi Riga e Colonna
» In questo codice, abbiamo utilizzato l'anno e il mese come due campi. Possiamo notare che c'è
anche un numero di posizione.
» Questo numero di posizione definisce la sequenza di campi.
» Ogni volta che vogliamo più di un campo (Riga o Colonna) dobbiamo assicurarci di specificare la
loro posizione. I campi possono essere cambiati modificando il loro nome dal codice.
17. Tabelle Pivot – 7. Inserimento Campi Dati
» La cosa principale è definire il campo valore nella tabella pivot.
» Il codice per la definizione dei valori è un po’ diverso dalla definizione di righe e colonne perché qui è
necessario definire la formattazione di numero, posizione e funzione.
» Con il codice qui descritto, è possibile aggiungere un importo come campo del valore, questo codice
formatta i valori come un numero con (,) separatore.
» Usiamo xlsum per sommare i valori, naturalmente avremmo potuto usare anche xlcount e altre
funzioni.
18. Tabelle Pivot – 8. Formattazione
» Alla fine, è necessario utilizzare un
codice per formattare la tabella
pivot.
» Normalmente in una tabella pivot
esiste anche una formattazione
predefinita, con VBA possiamo
definire lo stile di formattazione
con il codice.
19. Esercitazione
»Generazione Automatica Tabella Pivot
▪ Elementi noti :
▪ Sintassi VBA
▪ Apprendimento:
▪ Utilizzo oggetti Pivot Cache e Pivot Table
▪ Anticipazione:
▪ Nessuna
19
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_1.XLSM
20. Fonti Dati per Excel
Una breve introduzione ‘Data! Data! Data!’ He cried impatiently.
I cannot make briks without clay.’
(The Adventure of the Copper Beeches - A. C. Doyle)
21. Di cosa stiamo parlando?
21
The Web
Relational
Databases
Automated Data
Acquisition using VBA
Data
Models
Non Relational
Databases
Mongo Query Json file
23. Excel Data Retrival: Power Query
»Siamo in grado di recuperare i dati in Excel da diverse fonti esterne:
24. Query Tables
» Ogniqualvolta si utilizza il comando del menu
Data -> Import External Data, per importare
un file di testo, una tabella da una pagina
Web o una query di un DB, il risultato è
sempre un oggetto di tipo query table.
» In pratica si tratta di una porzione del foglio
Excel in cui vengono depositati i dati richiesti
assieme alle informazioni di connessione
utilizzate per lo scarico dei dati.
» Le informazioni di connessione possono
anche essere salvate separatamente e
riutilizzate quando necessario.
» La tabella può essere inoltre configurata per
un update automatico.
25. Esercitazione
»Automazione Query Table da VBA
▪ Elementi noti :
▪ Sintassi VBA
▪ Apprendimento:
▪ Utilizzo oggetto Query Table
▪ Estrazione informazioni sulla stringa di Connessione
▪ Trasformazione in una ADODB Connection
▪ Anticipazione:
▪ Libreria ADO
▪ Stringhe di Connessione
▪ Oggetti Connessione
▪ Oggetti Recordset
25
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_2.XLSM
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_3.XLSM
26. Lavorare con i file di testo
Formati non gerarchici txt e csv
27. » Gestione dei file
▪ Gestione dei file è il termine usato per
descrivere le azioni da voi compiute con i
file archiviati sui vostri dischi.
▪ Apertura
▪ Copia
▪ Cancellazione
▪ etc …
▪ VBA mette a disposizione del
programmatore una serie di funzioni
predefinite per la gestione dei file.
▪ In questa parte ci occuperemo soltanto di
formati non gerarchici (txt e csv) rinviando
ad una successiva lezione il trattamento di
formati gerarchici di file di testo (es. XML e
JSON).
Lavorare con i file
28. » Le funzioni, le istruzioni e i metodi
degli oggetti per la gestione dei file
forniti da VBA si dividono a grandi linee
in sei differenti aree di utilizzo
▪ Ottenere o cambiare gli attributi di un file
▪ Recuperare o localizzare i nomi dei file
▪ Ottenere o cambiare l’attuale directory e
disco, creare o rimuovere delle directory
▪ Copiare e cancellare i file
▪ Rinominare o muovere i file
▪ Ottenere informazioni sui file, come la sua
lunghezza e la data e l’ora dell’ultima
modifica
Lavorare con i file
29. » Perché utilizzare VBA
▪ In molte situazioni è necessario gestire i
dati direttamente da codice VBA all’interno
dell’applicazione, evitando così di
effettuare le numerose operazioni manuali
che di solito quest’operazione comporta.
▪ Automatizzare la lettura e l'importazione
dei dati consente di risparmiare un
notevole quantitativo di tempo, ma
soprattutto elimina i potenziali problemi ed
errori che si possono verificare durante
l’importazione e quindi porta ad una
mitigazione dei rischi operativi.
Lavorare con i file
30. » Funzioni, istruzioni e metodi di gestione dei file
Nome Categoria Scopo
ChDir Istruzione Cambia la directory corrente
ChDrive Istruzione Cambia il disco corrente
CurDir Funzione Restituisce l’attuale percorso della directory come stringa.
Dir Funzione Restituisce il nome della directory o del file che coincide con un dato nome
di file (compresi i caratteri jolly) passato come una stringa di argomenti.
Viene utilizzata per trovare uno o più file su disco.
FileCopy Istruzione Copia un file
FileDataTime Funzione Restituisce un valore di tipo Date contente la data e l’ora in cui il file è stato
modificato l’ultima volta.
FileLen Funzione Restituisce la lunghezza di un file in byte.
GetAttr Funzione Restituisce un numero che rappresenta gli attributi combinati di un file o di
una directory tipo Sistema, Nascosto e così via.
GetOpenFileName Metodo Visualizza la finestra di dialogo Apri del menu File di Excel e fornisce il
nome del file selezionato.
GetSaveAsFileName Metodo Visualizza la finestra di dialogo di Excel Salva con nome… e fornisce il
nome del file selezionato dall’utente.
Kill Istruzione Cancella un file
MkDir Istruzione Crea una directory
Name Istruzione Rinomina o muove un file
RmDir Istruzione Cancella una directory
SettAttr Istruzione Imposta gli attributi di un file
Lavorare con i file
31. » Quando si utilizzano quantità considerevoli di dati, è in genere
consigliabile scrivere o leggere i dati in un file. L'istruzione Open
consente di creare i file e di accedervi direttamente. L'istruzione
Open prevede tre tipi di accesso:
▪ Accesso sequenziale (modalità Input, Output e Append),
utilizzato in genere per la scrittura di semplici file di testo come
registri di errori e report.
▪ Accesso casuale (modalità Random), utilizzato per scrivere e
leggere dati in un file senza che sia necessario chiuderlo. I file
ad accesso casuale mantengono i dati in record e ciò semplifica
l'individuazione delle informazioni.
▪ Accesso binario (modalità Binary), utilizzato quando è
necessario leggere o scrivere in ogni singolo byte di un file, ad
esempio per l'archiviazione o la visualizzazione di un'immagine
bitmap.
Lavorare con i file: L’Istruzione OPEN
32. Consente di eseguire operazioni di input/output (I/O) su un file.
Sintassi:
Open nomepercorso For modalità [Access accesso] [blocco] As [#]numerofile
[Len=lunghezzarec]
La sintassi dell'istruzione Open è composta dalle seguenti parti:
Parte Descrizione
nomepercorso Obbligatoria. Espressione stringa che specifica il nome del file e può includere la directory o cartella e l'unità.
modalità Obbligatoria. Parola chiave che specifica la modalità di accesso al file, ovvero Append, Binary, Input, Output o
Random. Se non viene specificata, il file verrà aperto in modalità Random.
accesso Facoltativa. Parola chiave che specifica le operazioni consentite nel file aperto, ovvero: Read, Write o Read Write.
blocco Facoltativa. Parola chiave che specifica le operazioni consentite nel file aperto tramite altri processi, ovvero Shared, Lock
Read, Lock Write e Lock Read Write.
numerofile Obbligatoria. Numero di file valido compreso tra 1 e 511 inclusi. La funzione FreeFile restituisce il primo numero di file
disponibile.
lunghezzarec Facoltativa. Numero inferiore o uguale a 32.767 (byte). Nel caso di file aperti per accesso casuale, sarà uguale alla lunghezza
del record. Nel caso di file ad accesso sequenziale, sarà uguale al numero di caratteri memorizzati temporaneamente nel
buffer.
Lavorare con i file: L’Istruzione OPEN
33. » Termina le operazioni di input/output (I/O) su un file aperto con la funzione Open.
Sintassi:
Close [elenconumerofile]
L'argomento facoltativo elenconumerofile può includere uno o più numeri di file sulla
base della sintassi di seguito indicata, dove numerofile è un qualsiasi numero di file
valido:
[[#]numerofile] [, [#]numerofile] . . .
» Osservazioni
Se si omette elenconumerofile, vengono chiusi tutti i file aperti con l'istruzione Open.
Lavorare con i file: L’Istruzione CLOSE
34. » Nella tabella seguente sono riportate le istruzioni in genere utilizzate per la scrittura e la lettura dei
dati nei file.
Tipo di accesso Scrittura dei dati Lettura dei dati
Sequenziale Print #, Write # Input #, Input Line #
Casuale Put Get
Binario Put Get
Lavorare con i file
35. » L’istruzione Print
Scrive dati formattati in un file ad accesso sequenziale.
Sintassi: Print #numerofile, [elencooutput]
La sintassi dell'istruzione Print # è composta dalle seguenti parti:
Parte Descrizione
numerofile Obbligatoria. Qualsiasi numero di file valido.
elencooutput Facoltativa. Espressione o elenco di espressioni che si
desidera scrivere nel file.
» Osservazioni
▪ I dati scritti tramite Print # vengono in genere letti dai file con Line Input # o Input.
▪ Se l'argomento elencooutput viene omesso e si include solo un separatore di elenco dopo
numerofile, nel file verrà stampata una riga vuota. Più espressioni possono essere separate
con spazi o punti e virgola. Lo spazio in questo caso ha la stessa funzione del punto e virgola
Lavorare con i file
36. » L’istruzione Input, Input Line
Legge i dati da un file ad accesso sequenziale aperto e li assegna a delle variabili.
Sintassi: Input #numerofile, elencovariabili
La sintassi dell'istruzione Input # è composta dalle seguenti parti:
Parte Descrizione
numerofile Obbligatoria. Qualsiasi numero di file valido.
elencovariabili Obbligatoria. Elenco delle variabili separate da
virgole, alle quali vengono assegnati i valori letti
dal file. Non è possibile includere una matrice o
una variabile oggetto. È possibile, comunque,
utilizzare variabili che descrivono un elemento di
una matrice o di tipo definito dall'utente.
Lavorare con i file
37. » Il metodo GetOpenFileName
▪ E’ possibile utilizzare il metodo di Excel GetOpenFileName nel codice VBA per ottenere la finestra di dialogo
che viene mostrata quando si sceglie il comando Apri del menu File di Excel.
▪ Il metodo GetOpenFileName restituisce una stringa contenente il nome del file selezionato dall’utente,
comprendendo la lettera di unità e il percorso completo della cartella. Se l’utente cancella la finestra di dialogo,
GetOpenFileName restituisce come risultato il valore Boolean False
» Sintassi
Application.GetOpenFileName(FiltroFile,IndiceFiltro,Titolo, SelezioneMultipla)
FiltroFile rappresenta una qualsiasi espressione String valida formattata in
modo da specificare i filtri del file elencati nell’elenco a discesa Tipo File nella
finestra di dialogo Apri. Se omesso il filtro del file è Tutti i file (*.*)
Lavorare con i file
38. » Il metodo GetSaveAsFileName
▪ E’ possibile utilizzare il metodo di Excel GetSaveAsFileName nel codice VBA per ottenere la finestra di
dialogo che viene mostrata quando si sceglie il comando Salva con nome del menu File di Excel.
▪ Anche Il metodo GetSaveAsFileName restituisce una stringa contenente il nome del file selezionato
dall’utente, comprendendo la lettera di unità e il percorso completo della cartella. Se l’utente cancella la
finestra di dialogo, GetOpenFileName restituisce come risultato il valore Boolean False
▪ La sintassi è quasi la stessa del precedente metodo
» Sintassi
Application.GetSaveAsFileName(nomeFileIniziale,IndiceFiltro,Titolo,
SelezioneMultipla)
Lavorare con i file
39. Esercitazione
»Argomento
▪ Elementi noti :
▪ Sintassi VBA
▪ Interazione con oggetti Excel
▪ Apprendimento:
▪ Istruzioni per la gestione di file di testo
▪ Anticipazione:
▪ Nessuna
39
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_8.XLSM
41. Che cos’è ADO
» ADO è l'interfaccia più usata per accedere ai
database sotto Windows, non solo mediante ASP,
ma anche mediante Visual Basic, C/C++ ed altri
ambienti di sviluppo.
» Con ADO si utilizza un data provider che fa da
tramite fra la sorgente dati e l’applicativo
consentendo, indipendentemente dal linguaggio
di programmazione scelto e dalla fonte dati, di
utilizzare sempre lo stesso criterio di
consultazione;
» ADO viene distribuito con Excel-VBA tramite una
libreria che si chiama ADODB (Microsoft ActiveX
Data Object 6.1 Library) e che comprende tutti gli
oggetti ADO adattandosi quindi alla maggior parte
dei progetti
42. ADO per DB
Provider
» Come abbiamo visto, la tecnologia di riferimento dietro il funzionamento di ADO è chiamata OLE
DB.
» Potete pensare ad OLE DB come ad una sorta di ADO per programmatori C++ (questo vi renderà
immediatamente chiaro il concetto, giusto?);
» OLE DB non può essere utilizzato direttamente da VBA ma i suoi metodi vengono resi disponibili
attraverso un ulteriore strato di software, ADO appunto;
» L’elemento centrale di OLE DB è il cosiddetto provider. Esiste un OLE DB provider per ogni DBMS;
» E’ questo componente che traduce il linguaggio di basso livello caratteristico di ogni applicazione
di gestione database in un’interfaccia comune;
» Tutti i più comuni provider sono forniti nel package ADO;
» Qualora il provider per il vostro DBMS non sia disponibile potete sempre ricorrere al provider OLE
DB per ODBC (parleremo più avanti di questo tema);
43. ADO per DB
» ADO è basato su un modello ad oggetti molto semplice e
flessibile;
» Per la maggior parte delle normali necessità di
programmazione sono sufficienti tre oggetti di alto livello:
▪ Connessioni
▪ Comandi
▪ Recordset
» E tre collezioni
▪ Errors
▪ Parameters
▪ Fields
» I tre oggetti di alto livello non sono organizzati in modo
gerarchico. Piuttosto ciascuno di essi può essere creato
e/o utilizzato a partire dagli altri due. Come si vede dalla
figura la struttura di relazione di questi oggetti è una sorta
di triangolo con le collezioni agganciate a ciascun oggetto
di riferimento.
44. ADO per DB
» Esaminiamo in maggior dettaglio i più importanti
oggetti del modello ADO:
▪ Oggetto CONNECTION: contiene informazioni
riguardanti il fornitore dei dati e lo schema del
database;
▪ Oggetti ERRORS: la collezione ERRORS è utilizzata da ADO per
segnalare ogni tipo di errore generato dal provider utilizzato
per connettersi alla sorgente dei dati. Sulla base dei messaggi
ricevuti da questi oggetti vengono generatori errori di run
time da parte di ADO.
▪ Oggetti COMMAND: permettono di eseguire
direttamente varie tipologie di comandi incluse
query SQL;
▪ La collezione PARAMETERS è utilizzata per immagazzinare gli
argomenti variabili da passare alle funzioni o alle stored
procedures. Questo permette lato DB di creare delle
procedure statiche che possono essere riutilizzate
semplicemente riparametrizzando il codice di chiamata.
▪ Oggetto RECORDSET: contiene tutti o parte dei
records di una tabella del database indicato
nell’oggetto Connection;
▪ Oggetti FIELDS: è una collezione che si trova all’interno degli
oggetti Recordset. Rappresentano le colonne delle tabelle del
database;
45. ADO per DB
»Per far sapere al Visual Basic di quali
oggetti stiamo parlando occorre
preliminarmente aprire la finestra di
dialogo Riferimenti dal menu Strumenti
dell’editor VBA e far scorrere il
lunghissimo elenco di elementi fino ad
arrivare ai due componenti che ci
servono che si chiamano:
▪ Microsoft ActiveX Data Objects 6.1 Library
▪ Microsoft ActiveX Data Objects Recordset
2.8 Library
46. ADO – L’oggetto CONNECTION
» Il sistema per poter accedere ad un’origine
dati (database, file di testo, cartelle di Excel,
etc …) è rappresentato dalla connection, la
quale ha come requisito principale l’appoggio
ad un data-provider OLE-DB, la cui funzione è
quella di colloquiare in modo diretto e corretto
con la fonte dati prescelta;
» L’oggetto connection contiene solo le
informazioni necessarie per poter accedere
alla fonte dati quali, ad esempio, il percorso, la
password, il nome dell’utente, il nome del DNS
per ODBC, etc... Ed una volta aperto, cioè a
connessione avvenuta, è possibile iniziare a
colloquiare con il contenitore prescelto;
47. ADO – L’oggetto CONNECTION
» La sequenza di utilizzo è la seguente:
▪ Configurazione della connessione
▪ Apertura della connessione
▪ Elaborazione Dati
▪ Chiusura della connessione
» La connesione può essere configurata definendo individualmente le proprietà necessarie
dell’oggetto connection, oppure specificando tutti i requisiti simultaneamente utilizzando la
cosiddetta connection string (stringa di connessione);
» La stringa di connessione fornisce ad ADO le informazioni necessarie per individuare il provider da
utilizzare assieme a tutti gli altri dettagli eventualmente necessari a stabilire la connessione (come
utente e password ad esempio);
» Una stringa di connessione è formata da una serie di coppie proprietà=valore separate dal punto e
virgola;
» La prima proprietà da specificare in una stringa di connessione è il provider;
48. ADO – L’oggetto CONNECTION
» La scelta del provider determina in maniera univoca la struttura del resto della stringa di
connessione;
» Ogni provider infatti ha un unico insieme di proprietà addizionali, alcune obbligatorie, altre
opzionali;
» Se non viene specificato nessun provider, ADO per default ritiene che il provider sia ODBC. Questo
per motivi di compatibilità con precedenti versioni dei programmi;
49. ADO – L’oggetto CONNECTION
»La sequenza di utilizzo è
la seguente:
▪ Configurazione della
connessione
▪ Apertura della
connessione
▪ Elaborazione Dati
▪ Chiusura della
connessione
Step 1: Dichiare una variabile di tipo oggetto ADODB.Connection
e istanziare una nuova connessione
Dim cn As ADODB.Connection
Set cn= New ADODB.connection
Step 2: Specificare la Stringa di Connessione
cn.ConnectionString = "Data Source=" & ThisWorkbook.Path
& "newsvendor.mdb“
Step 3: Specificare il Data Provider (Es. MS Access – DEPRECATO!)
cn.Provider = "Microsoft Jet 4.0 OLE DB Provider"
50. ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – MS Access
51. ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – MS SQL Server
» La proprietà Data Source si riferisce al server (e all’eventuale istanza del server) che si intende utilizzare.
Ciascun server SQL Server contiene in generale diversi databases;
» La proprietà Initial Catalog viene utilizzata per specificare il database al quale ci si vuole connettere;
» Ci sono due varianti abbastanza comuni nella connessione ad un server SQLServer che dipendono da
come sono stati configurati i criteri di login sul server al quale intendete connettervi:
▪ Standard Security. In questo caso il server è stato configurato in modo che la connessione richieda
uno user name ed una password che devono essere esplicitamente indicate nella stringa di
connessione;
▪ Integrated Security. Con questa modalità vengono per l’accesso vengono utilizzate le vostre
credenziali di rete Windows.
52. ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – MS SQL Server
» Standard Security
» Integrated Security
53. ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – Excel
» Si noti la proprietà Extended Properties, questa proprietà consiste di due valori. Il
primo indica al provider che intendiamo connetterci ad una cartella Excel. Il secondo
serve per comunicare al provider come interpretare i dati che si trovano nel foglio o
nel range che utilizzeremo nel comando select. Il valore HDR=YES indica che la prima
riga dei dati contiene le intestazioni dei campi. Se il valore è omesso si assume HDR=NO.
54. Recordset
» Un recordset è semplice un insieme di
records (rows);
» è assimilabile ad una tabella di database
temporanea che contiene il risultato di una
query;
» Una tipica sequenza operativa con l’oggetto
recordset è la seguente:
▪ Apertura di un recordset (attraverso una
connessione)
▪ Elaborazione dati
▪ Chiusura del recordset
55. Recordset
»Una tipica sequenza
operativa con l’oggetto
recordset è la seguente:
▪ Apertura di un recordset
(attraverso una connessione)
▪ Elaborazione dati
▪ Chiusura del recordset
Step 1: Dichiarare una variabile di tipo Recordset ed
istanziare l’oggetto (si noti l’uso della parola chiave set)
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Step 2: Specificare la connessione
rs.Open “Tabella", cn
Dove “Tabella” è il nome della tabella che intendiamo
scaricare.
56. Recordset
» Metodi dell’oggetto RECORDSET
▪ AddNew – aggiunge un nuovo record
vuoto alla fine del RECORDSET;
▪ CancelUpdate – cancella tutte le modifiche
fatte nel RECORD corrente;
▪ Delete – cancella il RECORD corrente;
▪ MoveFirst – Sposta il puntatore del record
al primo record del RECORDSET;
▪ MoveNext – Muove il puntatore del record
al record successivo a quello
correntemente in uso;
▪ Update – Salva le modifiche del record
corrente;
57. Recordset
»La funzione EOF
▪ EOF esegue un test per
verificare se siamo giunti alla
fine del RECORDSET
▪ La funzione EOF ritorna un
valore logico VERO se il
puntatore del record è
posizionato oltre la fine del
RECORDSET; altrimenti la
funzione ritorna FALSO;
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open “Demand", cn
Do Until rs.EOF
count = count + 1
rs.MoveNext
Loop
Questo esempio permette di contare il numero di record
presenti nel RECORDSET. Il flusso del programma esce dal
ciclo condizionale quando la fine del RECORDSET viene
raggiunta. Si noti l’utilizzo del metodo MoveNext per
avanzare di un record all’interno del ciclo.
58. Metodo Close
» Un oggetto di tipo RECORDSET dovrebbe venire
chiuso quando non risulta più necessario
rs.Close
» In maniera analoga, una volta terminato
l’utilizzo di una connessione, anche questa
dovrebbe essere chiusa per non lasciare
connessioni appese al database
cn.Close
60. Semplice Esempio (1/8)
Dim dbPath As String
Dim dbFile As String
dbPath = "C:UsersUserGoogle DriveSeminari e Lezioni2017Uni Firenze - MABIDAdata"
dbFile = "esempi_modulo_2.accdb"
'declare conn to be a Connection -
Dim conn As ADODB.Connection
' make a connection object -
Set conn = New ADODB.Connection
' specify what kind of data provider it is -
conn.Provider = "Microsoft.ACE.OLEDB.12.0"
' open the connection on one database -
conn.Open dbPath & dbFile
' declare a recordset -
Dim myTableRS As ADODB.Recordset
' make one -
Set myTableRS = New ADODB.Recordset
' open it using a table in the database, and the connection
myTableRS.Open "Titoli", conn, adOpenDynamic, adLockPessimistic
61. Semplice Esempio (2/8)
' go to start of recordset -
myTableRS.MoveFirst: k = 1
' until we reach the end..
Do Until myTableRS.EOF
' display the 'Titolò field in current cell
Cells(k, 1).Value = myTableRS.Fields("Titolo")
' move next row
myTableRS.MoveNext: k = k + 1
Loop
'close the recordset
myTableRS.Close
Set myTableRS.ActiveConnection = Nothing
' and the connection
conn.Close
Set conn = Nothing
62. Semplice Esempio (3/8)
Dim wanted As String
' note the use of "'"
wanted = "'Adams, Pat'"
'wanted = InputBox("Text to be searched", "Input search")
myTableRS.Find "Autore = " & wanted
If Not myTableRS.EOF Then
MsgBox myTableRS.Fields("Autore")
Else
MsgBox "Not found"
End If
»Il metodo FIND
63. Semplice Esempio (4/8)
myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic
myTableRS.MoveFirst
Do While Not myTableRS.EOF
myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1
myTableRS.Update
myTableRS.MoveNext
Loop
»Il metodo UPDATE
64. Semplice Esempio (5/8)
myTableRS.Open "myTable", conn, adOpenStatic, adLockOptimistic
myTableRS.MoveFirst
Do While Not myTableRS.EOF
myTableRS.Fields("PhoneNumber") = myTableRS.Fields("PhoneNumber") + 1
myTableRS.MoveNext
Loop
myTableRS.Updatebatch
»Il metodo UPDATEBATCH
65. Semplice Esempio (6/8)
»Inserimento di nuove righe
»Cancellazione di righe
myTableRS.AddNew
myTableRS.Fields("Autore") = "Della Lunga, Giovanni"
myTableRS.Fields("ID_Au") = 1000
myTableRS.Update
I nuovi record sono aggiunti alla fine della tabella.
In un database relazione l’ordine dei record nelle tabelle non
riveste particolare importanza
myTableRS.Find "ID = 1000"
If Not myTableRS.EOF Then
myTableRS.Delete
myTableRS.Update
MsgBox ("Record deleted")
Else
MsgBox ("No matching record")
End If
Questo frammento di codice cancella
una riga il cui ID field è uguale al valore
inserito (1000)
.delete cancella il record corrente dopo
aver eseguito l’istruzione update
66. Semplice Esempio (7/8)
myTableRS.Open "Select ID_Au, Autore From Autori", conn, adOpenDynamic,
adLockPessimistic
'
Dim i As Integer
Do While Not myTableRS.EOF
For i = 1 To myTableRS.Fields.Count
Debug.Print myTableRS.Fields(i - 1),
Next
Debug.Print
myTableRS.MoveNext
Loop
»Utilizziamo un po’ di SQL
67. Semplice Esempio (8/8)
Dim myCommand As ADODB.Command
Set myCommand = New ADODB.Command
myCommand.ActiveConnection = conn
myCommand.CommandText = "INSERT INTO Autori (ID_Au, Autore) VALUES (1000, 'Della
Lunga, Giovanni')“
myCommand.Execute
»L’oggetto Command
In questo esempio il CommandText è un’istruzione SQL Standard
Non sono necessari oggetti di tipo RecordSet
68. Esercitazione
»Utilizzo oggetti ADO con MS Access
▪ Elementi noti :
▪ Sintassi VBA
▪ Apprendimento:
▪ Libreria ADO
▪ Stringhe di Connessione
▪ Oggetti Connessione
▪ Oggetti Recordset
▪ Anticipazione:
▪ Nessuna
68
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_4.XLSM
69. Il cursore
» Il cursore rappresenta una
sorta di puntatore al record
correntemente attivo;
» Esistono diversi tipi di cursori
con diversi effetti;
» La scelta del cursore viene
fatta prima di aprire il record
set;
» Accanto vediamo una
sintetica descrizione dei vari
tipi di cursore disponibili
(fonte Microsoft).
» Static. Is snapshot – changes by other users are
invisible. adOpenStatic
» ForwardOnly. Like the above but you can only
move forward through rows – more efficient.
adOpenForwardOnly
» Dynamic. Changes by others seen, move
anywhere. adOpenDynamic
» Keyset. Like dynamic, but can't see rows added
by others. adOpenKeyset
» Nei nostri esempi abbiamo sempre utilizzato il
tipo Dynamic.
70. Data Locking
» Qualora due o più utenti
processino lo stesso database
nello stesso tempo, potrebbero
sovrascrivere i dati l’un l’altro;
» Per prevenire questa possibilità si
utilizzano i ‘lock’;
» Il primo utente pone un lock sui
dati che sta utilizzando
prevenendo così la possibilità che
un secondo utente possa
modificare i dati nello stesso
tempo;
» adLockReadOnly - you are only reading
records so they are not locked
» adLockPessimistic – record locked when
you access it, released when finished
» adLockOptimistic – record only locked
when you update it – might go wrong
» adLockBatchOptimistic - only locked
when do batch update
72. Acquisire dati da Microsoft SQL Server
» Excel è già predisposto per una rapida connessione ad un DB SQL Server…
73. Acquisire dati da Microsoft SQL Server
» Acquisire la stringa di connessione
▪ Selezioniamo nel nostro computer il file con
estensione .odc che viene salvato al termine
del collegamento con SQL Server;
▪ Editiamo il file con un editor di testo
qualunque;
▪ Scorriamo il testo senza modificarlo fino a
raggiungere la sezione individuata dai tag
<odc:ConnectionString> …
</odc:ConnectionString>;
▪ Selezioniamo tutto il blocco di caratteri che si
trova fra queste due stringhe e facciamone
una copia da incollare nel nostro modulo vba;
▪ Ai fini del risultato che ci interessa, alcuni degli
elementi non sono necessari per cui, volendo,
la stringa può anche essere semplificata;
74. Acquisire dati da Microsoft SQL Server
' dichiariamo connDati come ADODB.Connection
Dim connDati As ADODB.Connection
' rsDati indica il nostro recordset
Dim rsDati As ADODB.Recordset
' la variabile lstrConnection conterrà la stringa di connessione
Dim lstrConnection As String
' infine lstrSQL il comando SQL da utilizzare
Dim lstrSQL As String
lstrConnection = "Provider=SQLOLEDB.1;" & _
"Integrated Security=SSPI;" & _
"Data Source=laptop-cirfa6ne;" & _
"Workstation ID=Server/Istanza;" & _
"Initial Catalog=DatabaseName"
Ricordiamo che la sintassi
della stringa di connessione
varia da un DB all'altro.
Essenzialmente può essere
composta da:
Provider: Il tipo di provider
OLE-Db usato per la
connessione
Initial File Name o Data
Source: Il path fisico del
DataBase (compreso il nome
del file)
Initial Catalog: Il nome del
database
75. T-SQL
» il Transact SQL è una collezione di estensioni capaci
di aumentare le potenzialità dell’ANSI-SQL 92 (cioè
il linguaggio SQL standard);
» Si tratta di un linguaggio proprietario di Microsoft
che viene utilizzato per lo sviluppo di applicazioni
SQL Server;
» Transact SQL aggiunge costrutti tipici della
programmazione come istruzioni per il controllo
del flusso (if e while per esempio), variabili,
gestione degli errori, ecc… che permettono di
sviluppare veri e propri programmi (le stored
procedure e i triggers) sfruttando da un lato la
potenza nell’interrogazione di basi dati delle
istruzioni SQL e dall’altro funzioni e costrutti del T-
SQL per la creazione della logica del programma;
76. Stored Procedures
» Una stored procedure (SP) è un insieme di comandi T-SQL compilati, direttamente
accessibili da SQL Server. Tali comandi vengono eseguiti come un'unica unita di
lavoro (batch) sul server e il beneficio è che il traffico di rete viene ridotto
limitando la congestione della rete stessa. Oltre a istruzioni SELECT, UPDATE e
DELETE una SP possono richiamare altre SP, utilizzare istruzioni che controllano il
flusso di esecuzione e funzioni di aggregazione.
» E' importante sottolineare che oltre alle SP create dai programmatori esistono
centinaia di SP di sistema all'interno di SQL Server (tutte cominciano con il
prefisso sp_).
» I benefici derivanti dall'utilizzo delle SP sono diversi. Ad esempio evitano l'accesso
diretto alle tabelle da parte egli utenti ed inoltre vengono ottimizzate tramite
sistemi di caching per essere più performanti possibile. Si può dire che esse
costituiscano una sorta di interfaccia tramite cui operare sui dati di un database
senza conoscerne la struttura e le relazioni.
77. Stored Procedures
» La sintassi per la creazione di una SP è la seguente
Dopo aver inserito il nome della funzione occorre specificare i
parametri (se necessari e comunque preceduti dalla @) che la SP
richiede, con relativo tipo di dati ed eventualmente valore di
default. E' anche possibile ritornare uno o più valori o una tabella di
dati utilizzando un parametro per trasmettere tali informazioni. Tale
parametro deve essere seguito dalla parola riservata OUTPUT e per
esso non può essere definito un valore di default.
78. Stored Procedures
» La sintassi per la creazione di una SP è la seguente
Nella sintassi generale possiamo notare anche le opzioni RECOMPILE
e ENCRYPTION. La prima indica a SQL Server di ricompilare la SP
ogni volta che viene eseguita per forzare ogni volta la rigenerazione
del piano di esecuzione, cosa che migliora le prestazioni. La seconda
comporta la crittografia del contenuto della SP in modo che esso
non sia visibile e comprensibile da chi non ha diritto di farlo.
79. Stored Procedures
» La sintassi per la creazione di una SP è la seguente
Dopo la parola riservata AS comincia poi un blocco BEGIN-END dove
possiamo inserire le nostre istruzioni T-SQL.
80. Funzioni
» Una SP non può essere non inclusa in un'istruzione di SELECT, essa semplicemente completa il
proprio lavoro e termina la propria esecuzione.
» Questo è proprio uno scenario in cui le funzioni sono molto utili poiché esse sono simili alle SP ma
è possibile utilizzarle all'interno di una query per sfruttare i dati che esse restituiscono.
» Le funzioni possono essere di due tipi: scalari o tabellari. Le scalari restituiscono un singolo valore
e la relativa sintassi è la seguente
81. Funzioni
» Notate che anche le funzioni possono richiedere parametri, modificabili
all'interno delle stesse se nella loro definizione dopo il tipo di dati non viene
messo il valore READONLY.
» Di diverso rispetto alle SP c'è l'istruzione RETURNS che serve a specificare il tipo
di dati del valore scalare che la funzione restituirà e l'istruzione RETURN che fa sì
che la funzione restituisca tale valore.
82. Funzioni
CREATE FUNCTION [dbo].[fn_30_360] (
@fromDate date, --- Start date
@toDate date, --- End date
@european bit=0 --- 0=US NASD, 1=European
)
RETURNS int --- The number of 30/360 days
WITH SCHEMABINDING
AS
BEGIN
--- Split year, month and day into separate variables:
DECLARE @y1 smallint=DATEPART(yy, @fromDate), @y2 smallint=DATEPART(yy, @toDate),
@m1 smallint=DATEPART(mm, @fromDate), @m2 smallint=DATEPART(mm, @toDate),
@d1 smallint=DATEPART(dd, @fromDate), @d2 smallint=DATEPART(dd, @toDate);
--- US: If both from and to dates are last day of february, set @d2 to 30.
IF (@european=0 AND
@m1=2 AND DATEPART(dd, DATEADD(dd, 1, @fromDate))=1 AND
@m2=2 AND DATEPART(dd, DATEADD(dd, 1, @toDate))=1)
SET @d2=30;
--- US: If from date is last of february, set @d1=30.
IF (@european=0 AND @m1=2 AND DATEPART(dd, DATEADD(dd, 1, @fromDate))=1)
SET @d1=30;
--- US: If @d1 is 30 or 31 and @d2 is 31, set @d2 to 30
--- If @d1 is 31, set @d1 to 30.
IF (@european=0 AND @d2>30 AND @d1>=30) SET @d2=30;
IF (@european=0 AND @d1>30) SET @d1=30;
--- European: Starting and ending dates on the 31st become the 30th.
IF (@european=1 AND @d1=31) SET @d1=30;
IF (@european=1 AND @d2=31) SET @d2=30;
--- Add it all together and return:
RETURN 360*(@y2-@y1) + 30*(@m2-@m1) + (@d2-@d1);
END;
» Il codice della funzione
riportata calcola la differenza
fra due date utilizzando la
convenzione finanziaria
30/360;
» Per richiamare la funzione è
sufficiente scrivere:
83. Funzioni
» Le funzioni tabellari sono del tutto simili ma restituiscono una tabella di dati. La
sintassi è la seguente
» L'espressione select_stmt indica una query che restituirà i dati richiesti in forma
tabellare.
84. Esercitazione
»Utilizzo oggetti ADO con MS SQLServer
▪ Elementi noti :
▪ Sintassi VBA
▪ Apprendimento:
▪ Libreria ADO
▪ Stringhe di Connessione
▪ Oggetti Connessione e Recordes
▪ Chiamata di funzioni T-SQL remote
▪ Anticipazione:
▪ Nessuna
84
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_5.XLSM
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_6.XLSM
86. ODBC
» ODBC è sostanzialmente una collezione di funzioni per la consultazione di dati presenti su DMBS
SQL;
» I produttori di DBMS forniscono una API proprietaria per accedere ai dati attraverso SLQ;
» Si possono utilizzare le funzionalità della API direttamente da linguaggi di programmazione come
C, C++, Java;
» Il problema è che ogni DBMS ha la sua API e ciò vuol dire che l’applicazione risulterebbe legata ad
un particolare DBMS di modo che se un sistema è basato su Oracle e si volesse cambiare DBMS
passando a SQL Server sarebbe necessario riscrivere tutto il codice di accesso ai dati;
» ODBC risolve il problema. Il modulo è infatti diviso in due strati: ODBC Driver Manager, che mette
a disposizione un set di funzioni indipendenti dal DBMS e l’ODBC Driver, disponibile con i DBMS
commerciali;
87. ODBC
» Può essere necessario scaricare il driver
ODBC da Microsoft o da terze parti;
» Può essere necessario anche cercare le
informazioni di connessione che devono
essere specificate. Il sito di terze parti The
Connection Strings Reference (Riferimenti
alle stringhe di connessione) contiene
stringhe di connessione di esempio e altre
informazioni sui provider di dati e sulle
informazioni di connessione richieste dai
provider.
88. ODBC
» Verificare che il driver desiderato sia installato
▪ Cercare o passare all'applet Origini dati ODBC
(64 bit) nel Pannello di controllo. Se si ha solo un
driver a 32 bit o è necessario usare un driver a
32 bit, cercare o passare a Origini dati ODBC (32
bit).
▪ Avviare l'applet. Viene visualizzata la
finestra Amministrazione origine dati ODBC.
▪ Nella scheda Driver è disponibile un elenco di
tutti i driver ODBC installati nel computer. È
possibile che i nomi di alcuni driver siano
visualizzati in più lingue.
89. ODBC
» Se si vuole specificare le informazioni di
connessione con un DSN (nome dell'origine
dati), usare l'applet Amministrazione origine
dati ODBC per trovare il nome del DSN
esistente o creare un nuovo DSN.
▪ Cercare o passare all'applet Origini dati ODBC
(64 bit) nel Pannello di controllo. Se si ha solo
un driver a 32 bit o è necessario usare un
driver a 32 bit, cercare o passare a Origini dati
ODBC (32 bit).
▪ Avviare l'applet. Viene visualizzata la
finestra Amministrazione origine dati
ODBC. L'applet ha l'aspetto seguente.
90. ODBC
» Se si vuole usare un DSN esistente per l'origine
dati, è possibile usare qualsiasi DSN visualizzato
nella scheda DSN utente, DSN di
sistema o DSN su file. Selezionare il nome,
quindi tornare alla procedura guidata e
immetterlo nel campo Dsn nella pagina Scelta
origine dati o Scelta destinazione. Ignorare la
parte rimanente della pagina e procedere con il
passaggio successivo della procedura guidata.
» Se si vuole creare un nuovo DSN, decidere se il
DSN deve essere visibile solo all'utente (DSN
utente), visibile a tutti gli utenti del computer
inclusi i servizi Windows (DSN di sistema) o
salvato in un file (DSN su file). L'esempio
seguente crea un nuovo DSN di sistema.
▪ Nella scheda DSN di sistema fare clic
su Aggiungi.
91. ODBC
» Nella finestra di dialogo Crea nuova origine
dati selezionare il driver per l'origine dati,
quindi fare clic su Fine.
» Il driver visualizzerà una o più schermate
specifiche del driver in cui immettere le
informazioni necessarie per la connessione
all'origine dati. Per il driver SQL Server, ad
esempio, vengono visualizzate quattro pagine
di impostazioni personalizzate. Al termine, il
nuovo DSN di sistema apparirà incluso
nell'elenco.
93. Esercitazione
»Connessione a DB Oracle via ODBC
▪ Elementi noti :
▪ Sintassi VBA
▪ Libreria ADO
▪ Stringhe di Connessione
▪ Oggetti Connessione e Recordes
▪ Apprendimento:
▪ Come ottenere una stringa di connessione da un DSN
▪ Anticipazione:
▪ Nessuna
93
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_7.XLSM
94. Excel, XML, JSON and WEB Services
WEB queries e interazione con Internet
95. WEB Services
» i Web services sono piattaforme software che
permettono lo scambio comunicativo tra macchina
e macchina, semplificando l'elaborazione dei dati;
» Lo sviluppo dei Web services è basato sull'utilizzo
di standard di comunicazione dati basati sul
linguaggio XML (eXtensible Markup Language), che
facilitano la comunicazione tra linguaggi di
programmazione (Java e Python) e sistemi
operativi diversi (Windows e Linux).
» Gli standard web utilizzati sono: XML
Schema, UDDI (Universal Description, Discovery
and Integration), WSDL (Web Services Description
Language) e SOAP (Simple Object Access Protocol).
96. WEB Services: Vantaggi e Svantaggi
» Alcuni dei vantaggi che è possibile ottenere con
l'utilizzo dei Web service sono i seguenti:
▪ permettono l'interoperabilità tra diverse
applicazioni software su diverse piattaforme
hardware
▪ utilizzano standard e protocolli "open"; i protocolli
ed il formato dei dati è, ove possibile, in formato
testuale, cosa che li rende di più facile
comprensione ed utilizzo da parte degli sviluppatori
▪ mediante l'uso di HTTP per il trasporto dei
messaggi, i Web service normalmente non
necessitano di modifiche alle regole di sicurezza
utilizzate come filtro sui firewall
▪ possono essere facilmente utilizzati, in
combinazione l'uno con l'altro (indipendentemente
da chi li fornisce e da dove vengono resi disponibili)
per formare servizi "integrati" e complessi
▪ consentono il riutilizzo di infrastrutture ed
applicazioni già sviluppate e sono (relativamente)
indipendenti da eventuali modifiche delle stesse
97. WEB Services: Vantaggi e Svantaggi
» Di contro vi sono i seguenti aspetti da
considerare:
▪ attualmente non esistono standard consolidati
per applicazioni critiche quali, ad esempio,
le transazioni distribuite
▪ le performance legate all'utilizzo dei Web
service possono essere minori di quelle
riscontrabili utilizzando approcci alternativi
di distributed computing quali Java
RMI, CORBA, o DCOM
▪ L'uso dell'HTTP permette ai Web service di
evitare le misure di sicurezza dei firewall (le
cui regole sono stabilite spesso proprio per
evitare le comunicazioni fra programmi
"esterni" ed "interni" al firewall).
98. WEB Services
» La ragione principale per la creazione e l'utilizzo di Web
service è il "disaccoppiamento" che l'interfaccia
standard esposta dal Web service rende possibile fra il
sistema utente ed il Web service stesso: modifiche ad
una o all'altra delle applicazioni possono essere attuate
in maniera "trasparente" all'interfaccia tra i due sistemi;
tale flessibilità consente la creazione di sistemi software
complessi costituiti da componenti svincolati l'uno
dall'altro e consente una forte riusabilità di codice ed
applicazioni già sviluppate.
» I Web service hanno inoltre guadagnato consensi visto
che, come protocollo di trasporto, possono utilizzare
HTTP "over" TCP sulla porta 80; tale porta è,
normalmente, una delle poche (se non l'unica) lasciata
"aperta" dai sistemi firewall al traffico di entrata ed
uscita dall'esterno verso i sistemi aziendali e ciò in
quanto su tale porta transita il traffico HTTP dei web
browser: ciò consente l'utilizzo dei Web service senza
modifiche sulle configurazioni di sicurezza dell'azienda
(un aspetto che se da un lato è positivo solleva
preoccupazioni concernenti la sicurezza).
99. WEB Services
» Per poter usufruire correttamente di un servizio
web tramite API abbiamo bisogno di avere a
disposizione un gran numero di informazioni; le
principali sono elencate di seguito:
▪ A. indirizzo URL base dell’API;
▪ B. indirizzi URL specifici per ogni singola richiesta;
▪ C. parametri specifici per ogni singola richiesta;
▪ D. presenza di protocollo HTTPS o del solo HTTP;
▪ E. protocolli di comunicazione utilizzati;
▪ F. formati dati restituiti per ogni singola richiesta e
la loro struttura;
▪ G. messaggi e codici di errore restituiti;
▪ H. tecnica di autenticazione (se prevista);
▪ I. tabella costi d’uso (se previsti); J. condizioni e
limiti d’uso;
▪ K. quale metodo di richiesta su protocollo
HTTP/HTTPS.
101. • XML (acronimo di eXtensible Markup
Language) è un metalinguaggio di
markup, ovvero un linguaggio marcatore
che definisce un meccanismo sintattico
che consente di estendere o controllare
il significato di altri linguaggi marcatori.
• Il nome indica quindi che si tratta di un
linguaggio marcatore (markup language)
estensibile (eXtensible) in quanto
permette di creare tag personalizzati.
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 7.1
Cos’è, e cosa non è XML
102. Cos’è, e cosa non è XML
» XML è contemporaneamente:
▪ Linguaggio di annotazione o etichettatura o marcatura
(markup) che permette di creare gruppi di marcatori o
etichette (tag set) personalizzati
▪ Formato standard per lo scambio dei dati
▪ Metalinguaggio per creare documenti arricchiti da
informazioni addizionali
▪ Un supporto per la costruzione di formati specifici per
gli usi più disparati
(esempi: MathML, XHTML, ChemicalML, ecc..)
» XML non è:
▪ Un sostituto di HTML: le pagine web continueranno ad
essere scritte in HTML. XML è un metalinguaggio, HTML
è un linguaggio
▪ Un linguaggio di programmazione: ogni documento
XML contiene dati ed informazioni sui dati. Questi
vengono poi estratti ed elaborati dalle varie
applicazioni.
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 7.1
103. Benefici di XML
» Interscambiabilità su Internet
» Struttura gerarchica
» Intelligibilità
» Estensibilità
» Disponibilità di tool per
l’implementazione del formato
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 7.1
104. I tag in XML (1)
» In un documento XML possiamo “inventare” i tag
» La scelta dei tag può essere effettuata a seconda delle
informazioni che interessa rappresentare.
<?xml version="1.0"?>
<note>
<from>Carlo</from>
<to>Luca</to>
<title>Appuntamento</title>
<message>Ricordati la riunione del <date>9/1/2008</date></message>
</note>
105. I tag in XML (2)
» La prima linea del documento (opzionale) identifica lo stesso come
un XML ed indica anche la versione
» Il primo tag <note> identifica la radice del documento. In
linguaggio naturale: “questo documento è una nota”.
» I restanti tag specificano il contenuto della nota in termini di titolo,
mittente, destinatario e messaggio
» L’ultimo tag </note> conclude la descrizione della nota
» I tag si dividono in:
▪ Tag di apertura (start tag): <nometag> es:
<note>
▪ Tag di chiusura (end tag): </nometag> es:
</note>
▪ Tag vuoti (empty tag): <nometag/> es:
<note/>
107. Un esempio concreto
» A questo punto quello che ci manca è solo trovare una API
che ci fornisca i dati finanziari che ci servono e che magari
siano gratuiti, accessibili liberamente e soprattutto affidabili.
» Incredibilmente esiste e si chiama IEX.
» Analogamente al NYSE Euronext, al NASDAQ, al CBOE e ad
altri, IEX è un Stock Exchange Americano (approvato dalla
SEC) nato nel 2012 che recentemente (da meno di un anno)
ha messo a disposizione degli sviluppatori i suoi dati tramite
una sofisticata API web liberamente e facilmente
accessibile.
» L’azienda stessa (IEX Group Inc.) ne incentiva l’uso per la
realizzazione di applicativi.
» È raggiungibile al sito: https://iextrading.com
Ci sono solo due regole da
seguire per avere successo in
Borsa. La prima: non perdere
mai soldi, la seconda: non
scordare mai la prima regola.
Warren Buffet
108. Un esempio concreto
» Per avere un elenco dei simboli dobbiamo usare, come riportato
nell’help, questo testo: /ref-data/symbols.
» Ogni funzione che l’API mette a disposizione viene indicata
nell’help riportando solo quello che in gergo si chiama EndPoint.
» Un EP è praticamente la parte finale di un indirizzo URL valido di
un’API.
» Pertanto, per poter utilizzare una funzione della nostra API,
dovremo comporre un URL valido unendo l’indirizzo base a un
EndPoint e, se sono previsti per questa funzione, agganciando
anche i parametri in ingresso secondo un protocollo specifico che
vedremo più avanti.
» Nel nostro caso l’indirizzo base è, e sarà sempre, il seguente:
https://api.iextrading.com/1.0
» Pertanto l’URL completo per ottenere la lista dei simboli diventa:
https://api.iextrading.com/1.0/ref-data/symbols
109. JSON
»JavaScript Object Notation (JSON) is an open, human and machine-
readable standard that facilitates data interchange, and along with
XML is the main format for data interchange used on the modern
web.
»JSON supports all the basic data types you’d expect: numbers, strings,
and boolean values, as well as arrays and hashes.
110. JSON
»Document databases such as MongoDB use JSON documents in order
to store records, just as tables and rows store records in a relational
database. Here is an example of a JSON document:
111. JSON: Syntax and Structure
» A JSON object is a key-value data format that is typically rendered in curly braces. When
you’re working with JSON, you’ll likely see JSON objects in a .json file, but they can also
exist as a JSON object or string within the context of a program.
» A JSON object looks something like this:
» Although this is a very short example, and JSON could be many lines long, this shows that
the format is generally set up with two curly braces (or curly brackets) that look like this {
} on either end of it, and with key-value pairs populating the space between.
112. JSON: Syntax and Structure
» By enclosing the variable's value in curly braces,
we're indicating that the value is an object.
Inside the object, we can declare any number of
properties using a “key": "value" pairing,
separated by commas.
» There is a strong connection with python
dictionaries;
» A slightly more complicated example involves
storing two people in one variable. To do this,
we enclose multiple objects in square
brackets, which signifies an array.
113. Working with Complex Types in JSON
»Nested Objects
▪ JSON can store nested
objects in JSON format in
addition to nested arrays.
▪ These objects and arrays
will be passed as values
assigned to keys, and
typically will be
comprised of key-value
pairs as well.
114. Working with Complex Types in JSON
»Nested Arrays
▪ We may use an array when we are
dealing with a lot of data that can be
easily grouped together, like when
there are various websites and social
media profiles associated with a
single user.
Clicca qui per aprire il file di esercitazione
ESEMPIO_3_9.XLSM