Sviluppo applicativi con Ms Access™
Periodico n. 2 - Ottobre 1999 -
Indice Introduzione |
Internet
è un enorme mezzo di comunicazione che sempre più stà
prendendo piede nelle nostre case e nella nostra società.
La Rete nasce dalla volontà di milioni di persone che dedicano
del tempo a pubblicare esperienze e più in generale conoscenza.
"Tante
goccie fanno un mare..." questo è lo spirito del sito,
invito tutti a inviare i propri commenti e le proprie
considerazioni.
Mi
trovate quì: [email protected]
ICQ #: 46609272
Nel primo periodico abbiamo trattato le tabelle, queste sono a tutti gli effetti i pilastri di un programma. Sono cioè quelle strutture che contengono i dati e le relazioni tra i dati. L'importanza di una corretta impostazione della struttura delle tabelle è già stata sottolineata nel precedente numero.
Un ulteriore strumento messo a disposizione da Ms-Access sono i FILTRI, o meglio chiamati QUERY. Un filtro è basato su una o più tabelle e fisicamente non contiene alcun dato.
Esistono
filtri di selezione, di aggiornamento, di accodamento, di
eliminazione, di creazione tabella e di incrocio tabelle. I primi,
cioè quelli di selezione consentono di creare delle VISTE
particolari dei dati contenuti nelle rispettive tabelle.
Raffigurano l'idea più naturale di filtro. Sempre nel solito
esempio delle tabelle Contatti e Clienti legate dal Codice
Cliente, potremmo decidere di visualizzare l'elenco dei Contatti
con affianco il Cliente associato ordinati per Nome Contatto.
Risolviamo il problema con un filtro di selezione che riporta le
due tabelle, i campi interessati e imposta il tipo di ordinamento.
In Ms-Access le Query semplificano molto la sintesi di questo
problema.
Ci troviamo di fronte ad una griglia che riempiremo con i campi
che ci interessa visualizzare. Sotto ciascun campo, troveremo la
casella di filtro (esempio Codice Cliente > XXX) e la casella
di ordinamento (crescente o decrescente).
Il filtro di eliminazione, fondamentalmente è un filtro di
selezione, dove gli elementi selezionati verranno eliminati dall'archivio
(elimina clienti con Codice Cliente > XXX).
L'accodamento, invece permette di accordare dati (opportunamente
filtrati) tra due tabelle (una di origine e una di destinazione),
ovviamente devono valere le corrispondenze tra i campi che
accodiamo.
La creazione tabella, permette di estrapolare dati secondo un
particolare filtro di selezione, e di mettere il risultato in una
nuova tabella.
Per finire, l'incrocio di tabelle consente di creare delle
visualizzazioni incrociati di dati (esempio colonne Giorni della
settimana e righe Fasce orarie).
Le Query di Access sono fondamentalmente un formalismo più "leggibile" di una serie di instruzioni SQL.
Lo
standard SQL, nasce come "linguaggio naturale" per la
manipolazione dei dati. La maggior parte delle basi dati
consentono interrogazioni con sintassi SQL. Parliamo di
linguaggio naturale, in quanto questo si presenta come un
linguaggio piuttosto semplice e intuitivo. Supponiamo di voler
selezionare dalla tabella "Clienti" tutti i "Codice
Cliente" maggiori di 243 ordinati per "Nome" in
ordine decrescente, formalizzando in SQL il problema scrivo:
SELECT * FROM Clienti WHERE [Codice Cliente]>243 ORDER BY [Nome]
Desc;
Dopo aver creato una QUERY in Access è possibile visualizzarne l'espressione SQL corrispondente, in questo modo possiamo scrivere sintassi SQL anche complesse aiutati da una sorta di Wizard.
Le stringhe SQL possono essere usate come "origine dati" nelle "Record Source" delle maschere di visualizzazione, o come "row source" nelle Combo Box.
Dunque, abbiamo parlato di tabelle indentificandole come quegli oggetti che fisicamente contengono i dati, quindi abbiamo introdotto i filtri, oggetti utili per filtrare e modificare i dati contenuti nelle tabelle. Ci rimane ora l'introduzione delle "Maschere", queste in pratica sono una rappresentazione grafica dei dati contenti in una tabella ed eventualmente filtrati da una query.
Esistono due grosse tipologie di visualizzazione delle maschere, "Data Sheet" (foglio di calcolo), consente di avere una rappresentazione simile ad un folgio elettronico tipo Excel. "Form" permette invece di visualizzare una grafica più complessa (a scheda).
Esistono diverse autocomposizioni che consentono di creare le maschere e di posizionarvi i campi in maniera del tutto automatica, ecco gli elementi che vengono toccati dall'autocomposizione:
- Origine dei dati: Viene specificato il nome della tabella (o query) che contiene i dati da visualizzare attraverso la maschera.
- Campi: Possono aver origine direttamente dai campi della fonte dati della maschera, oppure possono contenere formule ed espressioni particolari. Il campo [Prezzo Lordo], per esempio può essere originato dalla formula: = [Prezzo Netto] + [Iva]
- Impostazioni sul Layout della scheda: esistono diverse opzioni grafiche personalizzabili per ciasuna scheda: le barre di scorrimento, i menù, i bordi, le dimensioni i colori...
Sono del
tutto simili alle "Maschere di visualizzazione", i
"Reports" vengono però usati per rappresentare
graficamente i dati che verranno stampati.
Access 97, consente di salvare una Maschera direttamente come un
Reports, in questo modo mi ritrovo la stampa del form che ho
creato per la visualizzazione video.
Esiste
ovvimanente una certa differenza tra una Maschera e un Report, la
maschera contiene pulsanti e comandi interattivi, i reports
necessitano impostazioni particolari quali dimensione di pagina,
subtotali, intestazioni....
Proprio per questo motivo è sconsigliabile salvare una maschera
come un report.
Lo studio del layout del report è un punto piuttosto importante di tutta la progettazione di un software, la stampa finale è il risultato ultimo e più diretto all'utente di tutto il programma. Una stesura chiara e ordinata dei dati (anche in termini di colori e immagini) permette d'avere una visione immediata e semplice di tutto il lavoro svolto.
Nei
Reports esiste una funzione che permette di contare le righe in
stampa in una tabella (da impostare nelle proprietà in un campo).
Una funzione, questa, molto utile nella pratica, che
sfortunatamente non è presente nelle Maschere.
Una
considerazione riguardo ai Reports è d'obbligo, i margini e
tutte le impostazioni di pagina sono funzioni del tipo di
stampante selezionata.
Questo significa che cambiando stampante, il risultato finale
potrebbe leggermente differire dal risultato ottenuto con un'altra
stampante, per ovviare a questo inconveniente è sempre
consigliabile impostare margini non eccessivamente ridotti e non
inserire campi nelle prossimità dei margini stessi.
Un report
può essere aperto sia in modalità "anteprima di stampa"
(preview) che in modalità "normale", cioè stampato
direttamente.
Se distribuiamo un'applicazione che apre report in anteprima di
stampa, assicuriamoci sempre di aver abilitato la visualizzazione
della rispettiva icona di stampa, altrimenti non sarà possibile
lanciare la stampa.
Oltre a tabelle, query, maschere e report di stampa, la cui funzione è quella di organizzare, memorizzare e visualizzare dati, troviamo due importanti strumenti in grado di automatizzare operazioni e rendere più versatile un database.
Il primo strumento che
vedremo è la Macro, questa consente di aggiungere azioni in maniere intuitiva
ad eventi scatenanti particolari.
Supponiamo d'avere una maschera "Form_1" contenente il campo
"Cognome", dopo l'aggiornamento di questo campo voglio aprire un'altra
maschera "Form_2". Dalla visualizzazione Struttura della
"Form_1" clicco col tasto destro del mouse sul campo
"Cognome" abilitando così la scheda delle proprietà. Tra le
proprietà troverò "Dopo Aggiornamento" (After UpDate). Quì
cliccando sulla tendina posso optare per la macro da eseguire allo scatenarsi
dell'evento selezionato.
La macro può essere creato prima o durante usando il generatore.
Il contenuto della macro descritta sarà formalizzata con un semplice:
Azione: Apri Maschera
(nome, modalità...)
Arresta Macro.
L'uso delle macro permette di automatizzare alcuni processi in maniera rapida e intuitiva, certo la flessibilità di questo strumento è alquanto limitata. Per ottenere risultati più completi ed efficienti ci viene in aiuto il VBA, una sottospecie di Visual Basic specializzato per le Applicazioni, chiamato appunto Visual Basic for Application.
Il codice VBA può
anch'esso essere associato ad eventi particolati, per esempio se nella
"Form_1" ho il pulsante "P_1", posso scrivere una procedura
chiamata "P_1_OnClick" che entrerà in esecuzione premendo
"P_1". La sintassi VBA è pressochè identica alla sintassi usata in
VBA, si può lavorare con Recordset e istruzioni SQL direttamente dal codice, e
questo ne semplifica notevolmente la stesura del codice.
Il codice VBA può essere inserito sia in un contesto globale (moduli globali)
che in un contesto locale (locale ad ogni Form). Il codice locale alla Form può
però essere eseguito esclusivamente all'interno della form in questione, e con
esso tutte le variabili in esso usate sono "visibili" unicamente
localmente alla form. A livello globale possiamo "vedere" varibili a
livello "globale"(variabili pubbliche) e a livello "locale"
alla procedura (variabili private). Il codice è comunque utilizzabile da
qualunque posizione.
La soluzione ottimale per la programmazione, consiste nel "chiamare" procedure globali dai moduli locali, magari passando parametri che caratterizzano la procedura globale.
I codici VBA non posso essere "compilati", per gli utenti più esigenti esiste inoltre la possibilità di usare codice scritto e compilato in VB. In questo modo parte del programma rimane compilato (istruzioni e codice in genere) e parte rimane "visibile" (tipicamente i dati e i filtri in un file mdb o mde).
webmaster: [email protected]