SlideShare ist ein Scribd-Unternehmen logo
1 von 116
Downloaden Sie, um offline zu lesen
Management Analytics
Excel e Basi Dati
Giovanni Della Lunga
Tabelle Pivot
Automatizzazione con VBA
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.
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.
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.
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
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.
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
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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
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)
Di cosa stiamo parlando?
21
The Web
Relational
Databases
Automated Data
Acquisition using VBA
Data
Models
Non Relational
Databases
Mongo Query Json file
Excel Data Retrival: Power Query
Excel Data Retrival: Power Query
»Siamo in grado di recuperare i dati in Excel da diverse fonti esterne:
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.
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
Lavorare con i file di testo
Formati non gerarchici txt e csv
» 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
» 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
» 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
» 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
» 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
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
» 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
» 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
» 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
» 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
» 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
» 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
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
ADO VBA Programming
ActiveX Data Object
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
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);
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.
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;
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
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;
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;
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;
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"
ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – MS Access
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.
ADO – L’oggetto CONNECTION
Esempi di Stringhe di Connessione – MS SQL Server
» Standard Security
» Integrated Security
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.
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
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.
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;
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.
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
ADO VBA Programming
Alcuni semplici esempi con MS Access
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
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
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
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
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
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
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
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
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
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.
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
ADO VBA Programming
Accesso ad una base dati SQL Server
Acquisire dati da Microsoft SQL Server
» Excel è già predisposto per una rapida connessione ad un DB SQL Server…
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;
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
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;
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.
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.
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.
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.
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
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.
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:
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.
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
ADO VBA Programming
Accesso ad una base dati Oracle
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;
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.
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.
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.
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.
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.
ODBC
https://docs.microsoft.com/it-it/sql/integration-
services/import-export-data/connect-to-an-
odbc-data-source-sql-server-import-and-export-
wizard?view=sql-server-2017
Come ottenere una stringa di connessione
da un DSN
» Per compilare e testare la stringa di
connessione per il driver ODBC nel
computer, è possibile usare l'applet
Amministrazione origine dati ODBC del
Pannello di controllo. Creare un DSN su
file per la connessione, quindi copiare le
impostazioni del DSN su file per
assemblare la stringa di connessione.
Questa operazione richiede diversi
passaggi, ma offre una stringa di
connessione valida.
» Queste e molte altre info interessanti al
link …
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
Excel, XML, JSON and WEB Services
WEB queries e interazione con Internet
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).
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
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).
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).
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.
WEB Services
• 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
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
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
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>
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/>
<?xml version="1.0" encoding="UTF-8"?>
<utenti>
<utente>
<nome>Luca</nome>
<cognome>Ruggero</cognome>
<indirizzo>Milano</indirizzo>
</utente>
<utente>
<nome>Max</nome>
<cognome>Rossi</cognome>
<indirizzo>Roma</indirizzo>
</utente>
</utenti>
Un esempio in XML
Informatica Generale (Prof. Luca A. Ludovico)
Presentazione 7.1
»Un elemento può contenere:
▪ Altri elementi
<address>
<street>33, Terry
Dr.</street>
<city>Morristown</city>
</address>
▪ Testo semplice
<street>33, Terry Dr.</street>
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
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
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.
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:
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.
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.
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.
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
Fine Modulo Due
Excel e Basi Dati

Weitere ähnliche Inhalte

Was ist angesagt?

(Ebook ita - inform - access) guida al database access (doc)
(Ebook   ita - inform - access) guida al database access (doc)(Ebook   ita - inform - access) guida al database access (doc)
(Ebook ita - inform - access) guida al database access (doc)UltraUploader
 
Access parte prima
Access parte primaAccess parte prima
Access parte primaMatekanc
 
Informatica - Excel Intermedio
Informatica - Excel IntermedioInformatica - Excel Intermedio
Informatica - Excel IntermedioFrancesco Venuto
 
Microsoft excel - didattica differenziata
Microsoft excel - didattica differenziataMicrosoft excel - didattica differenziata
Microsoft excel - didattica differenziataIacopo Pappalardo
 
Odg umbriafoglicalcolo
Odg umbriafoglicalcoloOdg umbriafoglicalcolo
Odg umbriafoglicalcoloLibreItalia
 
Open data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiOpen data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiLibreItalia
 
Informatica - uso di excel
Informatica - uso di excelInformatica - uso di excel
Informatica - uso di excelDario
 
Manuale Excel - Guida alla preparazione dell'esame ECDL
Manuale Excel - Guida alla preparazione dell'esame ECDLManuale Excel - Guida alla preparazione dell'esame ECDL
Manuale Excel - Guida alla preparazione dell'esame ECDLMatteo Olla
 
Excel... per nostalgici
Excel... per nostalgiciExcel... per nostalgici
Excel... per nostalgiciClaudio Locci
 
Excel - introduzione e formule
Excel - introduzione e formuleExcel - introduzione e formule
Excel - introduzione e formuleSin Tesi Forma
 
Excel Gratuito - Le Funzioni più Utili di Excel
Excel Gratuito - Le Funzioni più Utili di ExcelExcel Gratuito - Le Funzioni più Utili di Excel
Excel Gratuito - Le Funzioni più Utili di ExcelMatteo Olla
 

Was ist angesagt? (18)

Excel development e sql 1.3
Excel development e sql   1.3Excel development e sql   1.3
Excel development e sql 1.3
 
(Ebook ita - inform - access) guida al database access (doc)
(Ebook   ita - inform - access) guida al database access (doc)(Ebook   ita - inform - access) guida al database access (doc)
(Ebook ita - inform - access) guida al database access (doc)
 
Data Base In Open Office
Data Base In Open OfficeData Base In Open Office
Data Base In Open Office
 
Access parte prima
Access parte primaAccess parte prima
Access parte prima
 
Informatica - Excel Intermedio
Informatica - Excel IntermedioInformatica - Excel Intermedio
Informatica - Excel Intermedio
 
Microsoft excel - didattica differenziata
Microsoft excel - didattica differenziataMicrosoft excel - didattica differenziata
Microsoft excel - didattica differenziata
 
Database
DatabaseDatabase
Database
 
Lezione 4 ogetti-vba
Lezione 4 ogetti-vbaLezione 4 ogetti-vba
Lezione 4 ogetti-vba
 
Odg umbriafoglicalcolo
Odg umbriafoglicalcoloOdg umbriafoglicalcolo
Odg umbriafoglicalcolo
 
Open data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati apertiOpen data e open source: come elaborare dati aperti
Open data e open source: come elaborare dati aperti
 
Corso di Excel avanzato
Corso di Excel avanzatoCorso di Excel avanzato
Corso di Excel avanzato
 
Informatica - uso di excel
Informatica - uso di excelInformatica - uso di excel
Informatica - uso di excel
 
Manuale Excel - Guida alla preparazione dell'esame ECDL
Manuale Excel - Guida alla preparazione dell'esame ECDLManuale Excel - Guida alla preparazione dell'esame ECDL
Manuale Excel - Guida alla preparazione dell'esame ECDL
 
Excel... per nostalgici
Excel... per nostalgiciExcel... per nostalgici
Excel... per nostalgici
 
Excel - introduzione e formule
Excel - introduzione e formuleExcel - introduzione e formule
Excel - introduzione e formule
 
EXCEL - LAVORARE con i FOGLI ELETTRONICI
EXCEL - LAVORARE con i FOGLI ELETTRONICIEXCEL - LAVORARE con i FOGLI ELETTRONICI
EXCEL - LAVORARE con i FOGLI ELETTRONICI
 
Xaml su Xamarin
Xaml su XamarinXaml su Xamarin
Xaml su Xamarin
 
Excel Gratuito - Le Funzioni più Utili di Excel
Excel Gratuito - Le Funzioni più Utili di ExcelExcel Gratuito - Le Funzioni più Utili di Excel
Excel Gratuito - Le Funzioni più Utili di Excel
 

Ähnlich wie Excel development e sql 3.9

Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseMarco Pozzan
 
Ecdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiEcdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiMatekanc
 
Il foglio elettronico a supporto dell’attività professionale [AP03-S]
Il foglio elettronico a supporto dell’attività professionale [AP03-S]Il foglio elettronico a supporto dell’attività professionale [AP03-S]
Il foglio elettronico a supporto dell’attività professionale [AP03-S]Andrea Maddalena
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteGiuseppe Toto
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-serviceMarco Pozzan
 
Community Tour 2009 Windows Azure Overview
Community Tour 2009 Windows Azure OverviewCommunity Tour 2009 Windows Azure Overview
Community Tour 2009 Windows Azure OverviewFabio Cozzolino
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscenceAndrea Gottardi
 
SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkAlessio Biasiutti
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastorefirenze-gtug
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Gian Maria Ricci
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017Gianluca Hotz
 
VISUS RAD - Generazione dell'applicazione
VISUS RAD -  Generazione dell'applicazioneVISUS RAD -  Generazione dell'applicazione
VISUS RAD - Generazione dell'applicazioneandrearocchini
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdfMarco Pozzan
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaDario Rusignuolo
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BIMarco Pozzan
 

Ähnlich wie Excel development e sql 3.9 (20)

Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless Synapse
 
Ecdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-datiEcdl-modulo-5-basi-di-dati
Ecdl-modulo-5-basi-di-dati
 
Lezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparteLezione js pdatabasecrudterzaparte
Lezione js pdatabasecrudterzaparte
 
Il foglio elettronico a supporto dell’attività professionale [AP03-S]
Il foglio elettronico a supporto dell’attività professionale [AP03-S]Il foglio elettronico a supporto dell’attività professionale [AP03-S]
Il foglio elettronico a supporto dell’attività professionale [AP03-S]
 
Sencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parteSencha touch: Sviluppare un'app - 4° parte
Sencha touch: Sviluppare un'app - 4° parte
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Community Tour 2009 Windows Azure Overview
Community Tour 2009 Windows Azure OverviewCommunity Tour 2009 Windows Azure Overview
Community Tour 2009 Windows Azure Overview
 
Presentazione django reminiscence
Presentazione django reminiscencePresentazione django reminiscence
Presentazione django reminiscence
 
SQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with SparkSQL Saturday 2019 - Event Processing with Spark
SQL Saturday 2019 - Event Processing with Spark
 
Database NewAGE
Database NewAGEDatabase NewAGE
Database NewAGE
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastore
 
Database relazionali
Database relazionaliDatabase relazionali
Database relazionali
 
Database Project in Visual Studio 2010
Database Project in Visual Studio 2010Database Project in Visual Studio 2010
Database Project in Visual Studio 2010
 
Novità di SQL Server 2017
Novità di SQL Server 2017Novità di SQL Server 2017
Novità di SQL Server 2017
 
VISUS RAD - Generazione dell'applicazione
VISUS RAD -  Generazione dell'applicazioneVISUS RAD -  Generazione dell'applicazione
VISUS RAD - Generazione dell'applicazione
 
Java lezione 17
Java lezione 17Java lezione 17
Java lezione 17
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdf
 
Intro to JavaScript
Intro to JavaScriptIntro to JavaScript
Intro to JavaScript
 
ios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - itaios 8 - parte 2 - todo-app - ita
ios 8 - parte 2 - todo-app - ita
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BI
 

Mehr von Giovanni Della Lunga (20)

Halloween Conference 2023 - Introduction to Deep Learning
Halloween Conference 2023 - Introduction to Deep LearningHalloween Conference 2023 - Introduction to Deep Learning
Halloween Conference 2023 - Introduction to Deep Learning
 
Copule slides
Copule slidesCopule slides
Copule slides
 
Introduction to python programming 2
Introduction to python programming   2Introduction to python programming   2
Introduction to python programming 2
 
Introduction to python programming 1
Introduction to python programming   1Introduction to python programming   1
Introduction to python programming 1
 
Cavalcando onde gravitazionali
Cavalcando onde gravitazionaliCavalcando onde gravitazionali
Cavalcando onde gravitazionali
 
Simulation methods finance_2
Simulation methods finance_2Simulation methods finance_2
Simulation methods finance_2
 
Simulation methods finance_1
Simulation methods finance_1Simulation methods finance_1
Simulation methods finance_1
 
Viaggi nel tempo [2015 01 24]
Viaggi nel tempo [2015 01 24]Viaggi nel tempo [2015 01 24]
Viaggi nel tempo [2015 01 24]
 
Universo lato oscuro
Universo lato oscuroUniverso lato oscuro
Universo lato oscuro
 
Metodi numerici
Metodi numericiMetodi numerici
Metodi numerici
 
Breve intro caos
Breve intro caosBreve intro caos
Breve intro caos
 
Fg esercizi 4
Fg esercizi 4Fg esercizi 4
Fg esercizi 4
 
2 magnetismo
2 magnetismo2 magnetismo
2 magnetismo
 
1 elettrostatica
1 elettrostatica1 elettrostatica
1 elettrostatica
 
Fenomeni termici
Fenomeni termiciFenomeni termici
Fenomeni termici
 
1 meccanica fluidi
1 meccanica fluidi1 meccanica fluidi
1 meccanica fluidi
 
1 spazio tempo_movimento
1 spazio tempo_movimento1 spazio tempo_movimento
1 spazio tempo_movimento
 
2 principi dinamica
2 principi dinamica2 principi dinamica
2 principi dinamica
 
3 energia
3 energia3 energia
3 energia
 
Cinetica
CineticaCinetica
Cinetica
 

Excel development e sql 3.9

  • 1. Management Analytics Excel e Basi Dati Giovanni Della Lunga
  • 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
  • 22. Excel Data Retrival: Power Query
  • 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
  • 59. ADO VBA Programming Alcuni semplici esempi con MS Access
  • 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
  • 71. ADO VBA Programming Accesso ad una base dati SQL Server
  • 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
  • 85. ADO VBA Programming Accesso ad una base dati Oracle
  • 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.
  • 92. ODBC https://docs.microsoft.com/it-it/sql/integration- services/import-export-data/connect-to-an- odbc-data-source-sql-server-import-and-export- wizard?view=sql-server-2017 Come ottenere una stringa di connessione da un DSN » Per compilare e testare la stringa di connessione per il driver ODBC nel computer, è possibile usare l'applet Amministrazione origine dati ODBC del Pannello di controllo. Creare un DSN su file per la connessione, quindi copiare le impostazioni del DSN su file per assemblare la stringa di connessione. Questa operazione richiede diversi passaggi, ma offre una stringa di connessione valida. » Queste e molte altre info interessanti al link …
  • 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/>
  • 106. <?xml version="1.0" encoding="UTF-8"?> <utenti> <utente> <nome>Luca</nome> <cognome>Ruggero</cognome> <indirizzo>Milano</indirizzo> </utente> <utente> <nome>Max</nome> <cognome>Rossi</cognome> <indirizzo>Roma</indirizzo> </utente> </utenti> Un esempio in XML Informatica Generale (Prof. Luca A. Ludovico) Presentazione 7.1 »Un elemento può contenere: ▪ Altri elementi <address> <street>33, Terry Dr.</street> <city>Morristown</city> </address> ▪ Testo semplice <street>33, Terry Dr.</street>
  • 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
  • 115.
  • 116. Fine Modulo Due Excel e Basi Dati