MICROSOFT ACCESS 97
AVANZATO
INDICE
Introduzione a Macro e Moduli
Le Macro
Come creare una macro
Dove eseguire una macro
Esempi di eventi che lanciano una macro
Gruppi di macro
Condizioni nelle macro
Utilizzare una macro o Visual Basic
Convertire una macro in Visual Basic
I Moduli
Moduli di classe
Moduli standard
Il motore del database: Microsoft Jet 3.5
Le query avanzate: SQL specifico (Union, Pass-through, Definizione dati)
Oggetti ed insiemi del database. Oggetti DAO (Data Access Objects)
Access ed Internet
Bibliografia
Corso avanzato di Microsoft Access
INTRODUZIONE
PASSI PER LA CREAZIONE DI UNA APPLICAZIONE IN MICROSOFT ACCESS
Progettazione
Definizione tabelle, query, maschere, report
Impostazione proprietà ed espressioni
Macro e Visual Basic
DLL, OLB
Lo scopo di Macro e Moduli è quello di automatizzare le funzioni del nostro database. Per gli utenti non esperti di
programmazione, le Macro sono uno strumento più semplice da utilizzare, in quanto permettono di costruire piccoli
programmi in modo rapido ed assistito dall’elaboratore. Hanno però lo svantaggio di una minore flessibilità e generalità.
Le azioni che si possono svolgere devono essere scelte all’interno di un insieme predefinito di azioni standard. Inoltre il
loro tempo di esecuzione è maggiore di quello dei moduli, secondo le indicazioni della stessa Microsoft.
I Moduli invece, permettono agli utenti che dispongono delle necessarie conoscenze di programmazione di creare
funzioni avanzate, e perciò non previste nella normale libreria di azioni delle macro di Access.
Il linguaggio utilizzato per la scrittura dei Moduli è chiamato Visual Basic per Applicazioni in quanto abbina ai normali
comandi del Visual Basic istruzioni proprie di Access che consentono di intervenire sulla struttura e sui dati del nostro
database. L’ambiente di sviluppo delle funzioni e procedure è integrato dentro Access, e non è autonomo come in Visual
Basic.
Pagina 2
Corso avanzato di Microsoft Access
LE MACRO
Le Macro rappresentano il modo più semplice per scrivere un programma che automatizzi le funzioni del database. Sono
costituite da un semplice elenco di istruzioni, denominate Azioni, che vengono eseguite una di seguito all’altra,
nell’ordine in cui il programmatore le ha scritte.
La stesura di una macro è facilitata da un’apposita struttura a tabella che raccoglie tutti i comandi che sono stati inseriti
nella macro stessa; all’interno di questa struttura è inoltre possibile affiancare ad Azione una breve descrizione per
commentare la funzione svolta dalla Azione stessa.
Una macro consente di:
• Aprire/chiudere qualsiasi tabella, scheda, query o report • Stampare i dati • Eseguire una query di selezione o di comando • Verificare condizioni e controllare flusso delle azioni • Ricercare e filtrare record automaticamente • Impostare valori nei controlli • Visualizzare messaggi informativi sulle azioni dell’utente • Garantire la precisione e la convalida dei dati • Impostare le proprietà di schede, report e controlli • Automatizzare import/export di dati • Creare un ambiente di lavoro personalizzato • Eseguire altre applicazioni per MSDOS o per Windows
Pagina 3
Corso avanzato di Microsoft Access
COME CREARE UNA MACRO
1. Selezionare Macro/Nuovo dalla Finestra del Database
2. In Visualizzazione struttura di maschera o report aprire le proprietà di un controllo e lanciare in generatore di
espressioni/generazione di macro accanto a un evento associato al controllo
Per ogni Azione si apre una area nella parte inferiore della finestra Macro dove inserire gli argomenti dell’azione
Pulsanti associati alle macro:
• Nomi macro • Condizioni • Esegui • Inserisci righe • Elimina righe • Passo a passo (CTRL+INTERR) • Annulla • Guida
• Macro composte da 1 o più azioni (Sequenza di azioni)
• Gruppo di macro (Pulsante Nome macro)
Si richiamano con NomeGruppoMacro.NomeMacro
• Azioni condizionali (Pulsante Condizioni)
ATTENZIONE:
quando si copia un controllo sulla maschera/report non vengono copiate le routine evento associate al controllo stesso.
Pagina 4
Corso avanzato di Microsoft Access
DOVE ESEGUIRE UNA MACRO
1. Direttamente
2. In un gruppo di macro
3. Da un’altra macro o da una routine evento in Visual Basic (DoCmd.RunMacro “Mia macro”)
4. In risposta ad un evento che si verifica in una maschera/report/controllo
5. Da un pulsante di comando
6. Da un nuovo pulsante della barra degli strumenti personalizzata
7. Quando si avvia il database (macro autoexec)
E’ possibile assegnare come nome ad una macro una combinazione di tasti (esempio ^p per stampare un
report)
Pagina 5
Corso avanzato di Microsoft Access
ESEMPI DI EVENTI CHE LANCIANO MACRO
(Proprietà/Evento di maschere/report/controlli)
• Apertura e chiusura di schede e report
Su apertura
Su chiusura
• Modifica dei dati
Dopo aggiornamento
Prima di aggiornare
Su eliminazione
Prima di inserire
Dopo inserimento
• Rilevamento delle modifiche di focus
Su cambio record
Su doppio clic
Su attivazione / Su attivato
Su disattivazione /Su disattivato
Su corrente
• Controllo dei dati
Su report vuoto
Su pagina
Pagina 6
Corso avanzato di Microsoft Access
Di seguito vengono rapidamente analizzate le funzioni e le proprietà di tutti i comandi che si possono utilizzare come
Azioni delle macro.
Apertura e chiusura di tabelle, query, schede, report Chiudi ApriMaschera ApriQuery ApriReport ApriTabella
Stampa dei dati ApriMaschera (in Anteprima di stampa) ApriTabella (in Anteprima di stampa) ApriQuery (in Anteprima di stampa) ApriReport (in Anteprima di stampa) Stampa
Esecuzione di una query ApriQuery EseguiSQL
Verifica delle condizioni e controllo del flusso di azioni AnnullaEvento EseguiComando Esci EseguiCodice EseguiMacro ArrestaOgniMacro ArrestaMacro
Impostazione dei valori ImpostaAvvisi InviaTasti ImpostaValore
Ricerca dei dati ApplicaFiltro TrovaSuccessivo TrovaRecord VaiARecord
Costruzione di un menu personalizzato e esecuzione dei comandi di menu AggiungiMenu ImpostaVoceMenu
Controllo della visualizzazione e del focus EcoSchermo VaiAControllo VaiAPagina Clessidra Ingrandisci (finestra) Riduci a icona (finestra) SpostaDimensiona (finestra) Ripristina ( le dimensioni di una finestra) SelezionaOggetto ImpostaAvvisi MostraOgniRecord (rimuove i filtri applicati)
Informazioni sulle azioni all’utente SegnaleAcustico FinestraMessaggio ImpostaAvvisi
Ridenomina, copia, importazione ed esportazione di oggetti CopiaOggetto (nel database o in un altro) Rinomina (oggetto) TrasferisciDatabase (import/export da/a database) TrasferisciFoglioCalcolo (da/a Excel) TrasferisciTesto (da/a file di testo)
Esecuzione di un’altra applicazione per DOS o Windows EseguiApplicazione
AggiornaOggetto: si utilizza per aggiornare la visualizzazione di un oggetto di Access (solitamente viene impiegato per
le Maschere); normalmente Access non esegue l’aggiornamento dello schermo mentre un processo è in esecuzione,
Pagina 7
Corso avanzato di Microsoft Access
pertanto quanto visualizzato potrebbe non corrispondere alla realtà delle cose. l’azione AggiornaOggetto forza
l’aggiornamento della visualizzazione dell’oggetto dichiarato con i parametri chiamati Tipo oggetto e Nome oggetto; se
questi parametri non vengono impostati verrà eseguito l’aggiornamento dell’oggetto attivo.
AggiungiMenu: consente di inserire un menu nella barra dei menu personalizzata che è possibile inserire in ogni
maschera.
L’azione richiede tre parametri identificati dal nome:Nome menu, Nome macro menu e Testo barra di stato. Nome
menu rappresenta il nome che si vuole assegnare al menu che si sta creando, mentre Nome macro menu rappresenta
il nome del gruppo di macro **che racchiude tutte le istruzioni da eseguire a seconda della voce di menu scelta.
Infine nel parametro Testo barra di stato è possibile inserire il testo che si vuole visualizzare quando il menu da noi
creato viene selezionato.
AnnullaEvento: annulla l’evento che ha causato l’avvio della macro; se la macro è stata avviata dall’evento
SuEliminazione, l’azione AnnullaEvento fa sì che l’operazione di cancellazione non venga portata a termine.
ApplicaFiltro: consente di applicare un filtro per selezionare solamente i record desiderati.
Questa azione richiede due parametri; il primo denominato Nome filtro, richiede il nome della query o del filtro salvato
come query che si vuole applicare per selezionare i record dell’oggetto attivo. Il secondo parametro Condizione
WHERE, da immettere in mancanza del primo, consente di dichiarare direttamente una condizione SQL per filtrare i
record.
ApriMaschera: determina l’apertura di una maschera; i parametri richiesti da questo comando sono: Nome Maschera,
per indicare la maschera che si vuole aprire e Visualizzazione per stabilire in quale modalità aprire la maschera.
Seguono a questi primi parametri altri chiamati Nome Filtro e Condizione WHERE, che, come nel caso dell’azione vista
in precedenza, consentono di selezionare solamente alcuni record della tabella o query associata alla maschera. Infine
attraverso la Modalità immisione dati è possibile stabilire se nella maschera che ci si appresta ad aprire è possibile
aggiungere, modificare o solamente leggere i record, mentre con Modalità finestra si indica come la maschera stessa
deve essere aperta.
ApriModulo: apre un modulo di programma; i parametri richiesti sono 2, ovvero il nome del modulo da aprire ed il nome
della routine che si vuole visualizzare.
ApriQuery: esegue l’apertura della query specificata nel parametro Nome query; il secondo parametro, ovvero quello
chiamato Visualizzazione, consente di stabilire come aprire la query stessa (Foglio dati, Struttura, Anteprima di stampa).
Come nel caso dell’azione ApriMaschera, con il parametro Modalità immisione dati è possibile stabilire se i risultati
della query si possono solo leggere, oppure se è possibile eseguire anche aggiunte o modifiche.
ApriReport: apre il report specificato in Nome report; il parametro Visualizzazione serve per indicare la modalità di
apertura del report, mentre i due soliti parametri Nome Filtro e Condizione WHERE possono essere impiegati per
selezionare solo alcuni record della tabella o query associata al report stesso.
ApriTabella: apre la tabella specificata attraverso il parametro Nome tabella; il parametro Visualizzazione serve per
indicare la modalità di apertura della tabella, mentre il parametro Modalità immissione dati permette di dichiarare le
operazioni che si possono eseguire sulla tabella che ci si appresta ad aprire: Aggiungi, Modifica o Solo lettura.
ArrestaMacro: arresta istantaneamente l’esecuzione della macro.
Pagina 8
Corso avanzato di Microsoft Access
ArrestaOgniMacro: arresta istantaneamente l’esecuzione della macro che contiene il comando e di tutte le altre macro
che si stanno eventualmente eseguendo in contemporanea.
Chiudi: chiude un qualsiasi tipo di oggetto; il tipo ed il nome dell’oggetto da chiudere si possono specificare attraverso i
parametri Tipo oggetto e Nome oggetto: se questi non sono impostati viene chiuso l’oggetto attivo. L’ultimo parametro
(Salva) consente di indicare se eseguire o meno le operazioni di salvataggio che taluni oggetti richiedono alla loro
chiusura. Impostando quest’ultimo parametro come Prompt, prima di chiudere l’oggetto che necessita salvataggio, viene
chiesta la conferma dell’operazione all’utente mediante una finestra di messaggio.
Clessidra: abilita o meno la visualizzazione della clessidra al posto del normale cursore; è bene utilizzare questa azione
prima di lanciare operazioni che richiedono un elevato tempo di esecuzione. In questo modo si avverte l’utente che il
computer non si è bloccato ma sta semplicemente elaborando.
CopiaOggetto: copia un oggetto del database corrente, nel medesimo database con un nuovo nome oppure in uno
esterno; il tipo di oggetto da copiare ed il suo nome viene dichiarato attraverso i parametri Tipo oggetto origine e Nome
oggetto origine; i primi due parametri invece, servono per indicare l’eventuale database esterno in cui copiare l’oggetto
(Database destinazione) ed il nuovo nome da assegnare all’oggetto copiato (Nuovo nome); nel caso in cui non venga
indicato il database di destinazione, la copia viene eseguita nel database corrente, pertanto è consigliabile assegnare un
nome diverso all’oggetto che si intende duplicare.
EcoSchermo: disabilita o meno l’aggiornamento dello schermo mentre una macro è in esecuzione; in questo modo si
evita di mostrare i diversi passaggi che la macro stessa esegue prima di giungere al risultato finale.
Per disabilitare l’aggiornamento dello schermo, il parametro Eco schermo deve essere impostato a No; il secondo
parametro, Testo barra di stato, consente di scrivere una frase da fare apparire sulla barra di stato nel periodo in cui
l’aggiornamento dello schermo è disabilitato: anche questo contribuisce a rassicurare l’utente del corretto funzionamento
del computer.
EliminaOggetto: elimina l’oggetto del database corrente specificato dai parametri Tipo oggetto e Nome oggetto;
questa operazione di cancellazione non richiede alcuna conferma.
Esci: esce da Microsoft Access; il parametro Opzioni permette di specificare se uscire senza salvare nulla (Esci), se
uscire salvando tutto (Salva tutto), oppure se chiedere la conferma per eventuali salvataggi da effettuare (Prompt).
EseguiApplicazione: avvia l’applicazione Windows o Dos specificata nel parametro Riga di comando; in questa sede
deve essere specificato anche il percorso dell’applicazione da eseguire.
EseguiCodice: esegue la funzione specificata dal parametro Nome funzione.
EseguiMacro: permette di lanciare l’esecuzione di una nuova macro; i parametri richiesti sono: Nome macro per
indicare il nome della macro che si vuole eseguire, Numero ripetizioni per stabilire il numero di volte che la macro
lanciata deve essere eseguita ed Espressione arresto che permette di scrivere una condizione che, se diventa falsa
arresta la macro che si è avviata. E’ possibile scrivere un espressione di arresto basata sul numero di ripetizioni. Per
lanciare una macro ed eseguirla una sola volta è sufficiente non impostare gli ultimi due parametri.
Pagina 9
Corso avanzato di Microsoft Access
EseguiSQL: consente di eseguire una query di comando rappresentata attraverso un’espressione SQL ; tale
espressione deve essere immessa come parametro Istruzione SQL; è bene notare che questa azione non consente di
eseguire query di selezione.
EseguiVoceMenu: avvia l’esecuzione immediata di un comando racchiuso in uno dei menu di Microsoft Access; per
indicare il comando da eseguire i parametri sono: Barra dei menu, identifica la barra dei menu che interessa, Nome
menu, indica il menu che contiene il comando che si vuole eseguire, a sua volta dichiarato in Comando. Se il comando
che si vuole eseguire richiedesse la scelta di un sottocomando, è possibile scegliere quest’ultimo impostando l’ultimo
parametro chiamato appunto Sottocomando.
FinestraMessaggio: visualizza una finestra di messaggio per comunicare alcune informazioni all’utente; è possibile
scrivere il messaggio che si vuole fare apparire nel parametro Massaggio, mentre con il parametro Segnale acustico si
può scegliere se far accompagnare l’apparizione della finestra da un suono. Per rendere più professionale l’aspetto della
finestra è inoltre possibile aggiungere un’icona (scelta nel parametro Tipo icona) ed assegnare alla finestra stessa un
opportuno titolo (Titolo).
ImpostaAvvisi: rispettando le impostazioni dell’unico parametro Mostra Avvisi, abilita o meno la visualizzazione dei
messaggi di sistema; se la visualizzazione dei messaggi è disabilitata vengono comunque mostrate quelle finestra di
messaggio che richiedono una scelta da parte dell’utente.
ImpostaValore: imposta il valore di un campo o la proprietà di un controllo contenuti all’interno di una maschera o di un
report. Con il parametro Elemento si dichiara il campo o il controllo che si vuole impostare, mentre con Espressione si
imposta il nuovo valore da assegnare.
ImpostaVoceMenu: permette di impostare lo stato di una voce di menu. Il primo parametro, Indice menu, rappresenta il
numero di riga della macro di creazione dei menu in cui il menu richiesto viene costruito.
Indice comando, rappresenta invece numero di riga della macro delle voci di menu in cui viene costruita la voce di
menu che si desidera impostare; segue Indice sottocomando che indica la riga della macro di creazione dei
sottocomandi di una voce di menu in cui viene costruito il sottocomando che si vuole impostare.
Infine il parametro Flag permette di indicare che impostazioni applicare alla voce di menu.
Ingrandisci: ingrandisce la finestra dell’oggetto attivo fino a farle occupare l’intera area della finestra di Microsoft Access.
InviaOggetto: invia l’oggetto specificato mediante un messaggio di posta elettronica. I parametri da impostare per il
corretto funzionamento di quest’azione sono molteplici, vediamo di seguito la funzione di ciascuno di essi:Tipo Oggetto
e Nome Oggetto permettono di indicare il tipo ed il nome dell’oggetto del database che si vuole spedire; Formato
output specifica invece il formato in cui i dati vengono rappresentati e successivamente inviati: gli oggetti modulo
possono essere inviati solamente in formato Testo MS-DOS; il parametro A richiede il nome del destinatario, mentre i
parametri Cc e Ccn specificano l’indirizzo di posta elettronica del destinatario stesso; i parametri Oggetto messaggio e
Testo messaggio consentono rispettivamente di specificare il contenuto del messaggio e di inserire un testo di
accompagnamento; Modifica messaggio infine, consente si visualizzare o meno, prima dell’invio del messaggio una
finestra in cui è possibile modificare le impostazioni attuate con i precedenti parametri.
InviaTasti: simula la pressione di una sequenza di tasti; in questo modo è possibile eseguire comandi di Microsoft
Access o di altre applicazioni che richiedono la pressione di tasti per essere avviati. Nel parametro Sequenza tasti
vengono dichiarati i tasti di cui si vuole simulare la pressione, mentre il secondo parametro (Attesa) può fare arrestare o
Pagina 10
Corso avanzato di Microsoft Access
meno l’esecuzione della macro, fintanto che non viene completamente eseguito il comando lanciato dalla sequenza di
tasti.
MostraBarraStrumenti: abilita o disabilita la visualizzazione della barra degli strumenti incorporata o personalizzata
dichiarata nel parametro Nome barra strumenti.
Il parametro Mostra permette invece di inserire o togliere dalla visualizzazione la barra degli strumenti.
MostraOgniRecord: disabilita l’eventuale filtro applicato alla tabella, query o maschera in modo da visualizzare tutti i
record dell’oggetto.
OutputSu: converte l’oggetto specificato dai parametri Tipo oggetto e Nome oggetto nel formato specificato dal terzo
parametro, ovvero Formato output. Con questa azione è possibile convertire tabella, query, maschere e report in fogli di
Microsoft Excel, in testo con formattazione (Rich text format RTF) o in semplice testo DOS. Anche i moduli possono
essere convertiti, ma solo in formato testo MS-DOS. Il parametro File di output consente di specificare il percorso ed il
nome del file in cui l’oggetto di Access verrà memorizzato con il suo nuovo formato; se questa informazione viene
omessa, percorso e nome del file vengono richiesti all’utente al momento dell’esecuzione dell’azione.
Infine Avvio automatico consente di lanciare o meno, appena terminata la conversione dell’oggetto, un’applicazione che
è in grado di visualizzare l’oggetto stesso nel suo nuovo formato.
RiduciAIcona: riduce alle dimensioni di un’icona l’oggetto attualmente attivo.
RieseguiQuery: forza una nuova esecuzione di una query sul controllo dell’oggetto attivo specificato nel parametro
Nome controllo. Se questo parametro viene ignorato, viene rieseguita la query sull’intero oggetto. Supponiamo di
visualizzare, tramite una maschera, i risultati di una query parametrica. Se l’utente cambia il valore del parametro
richiesto dalla query, probabilmente i risultati che si otterranno saranno differenti dai precedenti; per poter visualizzare
sulla maschera i nuovi dati, sarà necessario utilizzare l’azione RieseguiQuery senza specificare alcun parametro: questo
provvederà a rendere attuali i valori mostrati sullo schermo.
Rinomina: cambia il nome all’oggetto specificato dai parametri Tipo oggetto e Nome precedente con il nome
dichiarato nel parametro Nuovo nome.
Ripristina: ripristina le dimensioni originali di una finestra che contiene un oggetto di Microsoft Access dopo che questa
è stata ingrandita o ridotta ad icona.
Salva: salva l’oggetto specificato dai parametri Tipo oggetto e Nome oggetto.
SegnaleAcustico: provoca l’emissione di un suono.
SelezionaOggetto: seleziona un oggetto del database specificato dai soliti parametri Tipo oggetto e Nome oggetto. Se
l’oggetto che si vuole selezionare non è aperto, la selezione deve essere eseguita dalla finestra principale del database.
La possibilità di selezionare un oggetto non aperto dalla finestra del database è consentita dall’impostazione del
parametro Da finestra database.
SpostaRidimensiona: assegna alla finestra attiva nuove coordinate e nuove dimensioni. La finestra viene spostata
indicando attraverso i parametri Da margine sinistro e Da margine superiore le nuove coordinate dell’angolo superiore
sinistro della finestra stessa.
Pagina 11
Corso avanzato di Microsoft Access
I parametri Larghezza ed Altezza specificano invece le nuove dimensioni della finestra.
Stampa: stampa su carta l’oggetto di database attivo. Tramite il parametro Intervallo di stampa è possibile scegliere se
stampare tutto, solamente quanto selezionato o un determinato intervallo di pagine; in quest’ultimo caso l’intervallo viene
indicato dai parametri Da pagina, A pagina.
Ulteriori richieste per poter avviare l’azione di stampa riguardano la qualità della stampa stessa (parametro Qualità
stampa), il numero di copie che si vogliono eseguire (parametro Copie) e la possibilità di eseguire o meno la
fascicolazione delle copie (parametro Fascicola copie).
TrasferisciDatabase: questa azione permette di importare dati da un database esterno, di esportare dati o di collegare
al database corrente una tabella contenuta in un archivio esterno.
Il tipo di funzione che si vuole eseguire viene dichiarata nel primo parametro richiesto, ovvero Tipo trasferimento; il
parametro Tipo database permette invece di specificare a quale tipo di base di dati ci si vuole collegare: è infatti
possibile, importare o esportare dati e collegarsi anche a database non realizzati con Microsoft Access.
La base di dati a cui si fa riferimento per lo scambio delle informazioni viene dichiarata nel parametro Nome database.
La richiesta Tipo oggetto consente di specificare la natura dell’oggetto che si vuole trasferire o collegare, mentre i due
parametri Origine e Destinazione individuano rispettivamente il nome dell’oggetto da trasferire ed il nome che gli verrà
assegnato nel nuovo database.
Infine il parametro Solo struttura consente di indicare se dell’oggetto prescelto si vuole trasferire solo la struttura o
anche i dati che contiene.
TrasferisciFoglioCalcolo: questa azione permette di importare ed esportare dati da un foglio elettronico, e di collegare
al database corrente il contenuto di un foglio elettronico.
Il tipo di funzione che si vuole eseguire viene dichiarata nel primo parametro richiesto, ovvero Tipo trasferimento; il
parametro Tipo foglio calcolo permette invece di specificare a quale tipo di foglio elettronico si vuole fare riferimento. La
tabella utilizzata per il trasferimento dati viene dichiarata nel parametro Nome tabella, mentre la successiva richiesta
(parametro Nome file) riguarda il nome ed il percorso del file in cui è memorizzato il foglio elettronico.
Il parametro Nomi campo permette di utilizzare o meno il contenuto della prima riga del foglio di calcolo come nomi dei
campi della tabella; infine il parametro Intervallo permette di specificare l’intervallo di celle del foglio di lavoro da
importare o collegare.
TrasferisciTesto: questa azione permette di importare ed esportare dati da un documento di testo elettronico, e di
collegare al database corrente il contenuto di un documento di testo.
Il tipo di funzione che si vuole eseguire viene dichiarata nel primo parametro richiesto, ovvero Tipo trasferimento; il
parametro Nome file specifiche consente di dichiarare il nome di un file che contiene le specifica di importazione,
esportazione e collegamento di un file di testo. La tabella utilizzata per il trasferimento dati viene dichiarata nel parametro
Nome tabella, mentre la successiva richiesta (parametro Nome file) riguarda il nome ed il percorso del file in cui è
memorizzato il documento di testo.
Il parametro Nomi campo permette di utilizzare o meno il contenuto della prima riga del documento come nomi dei
campi della tabella.
TrovaRecord: permette di trovare il record che soddisfa il criterio immesso come parametro Trova. Gli altri parametri
specificano le modalità con cui la ricerca deve essere eseguita; Dove consente di indicare dove eseguire la ricerca: le
alternative sono “Campo intero”, “Parte del campo” ed “Inizio campo”; Maiuscole/minuscole indica se la ricerca deve
essere case sensitive o meno, mentre Direzione indicherà in verso in cui eseguire la ricerca stessa.
Pagina 12
Corso avanzato di Microsoft Access
Il parametro Come formattato permette o meno di ricercare dati che rispettano anche nella veste grafica (grassetto,
corsivo, sottolineato, ecc...) il criterio di ricerca che abbiamo impostato. Il parametro Solo campo corrente limita il
dominio di ricerca al solo campo che è attualmente selezionato, mentre Trova primo fa sì che venga restituito il primo
record della tabelle che rispetta il criterio di ricerca.
TrovaSuccessivo: trova il record successivo che rispetta i criteri di ricerca impostati nell’azione TrovaRecord.
VaiAControllo: attiva sulla maschera il controllo specificato dal parametro Nome controllo.
VaiAPagina: attiva la pagina della maschera indicata dal parametro Numero pagina; una maschera può essere dotata
di più pagine se in essa sono state impostate delle interruzioni di pagina. I parametri Da margine sinistro e Da margine
superiore indicano la posizione in cui verrà visualizzata la pagina rispetto al margine superiore sinistro delle finestra.
VaiARecord: sposta il puntatore che indica il record corrente al record specificato dal parametro Record; nel caso in cui
quest’ultimo parametro venga impostato con la voce “Vai A”, il successivo parametro Offset permette di indicare il
numero esatto del record a cui ci si vuole trasferire.
I primi due parametri Tipo oggetto e Nome oggetto indicano la natura ed il nome dell’oggetto che contiene record a cui
ci si vuole spostare.
Pagina 13
Corso avanzato di Microsoft Access
GRUPPI DI MACRO
A discrezione del programmatore è possibile inserire ogni macro in un oggetto diverso, oppure costruire un solo oggetto
che contiene al suo interno diverse macro; in questo secondo caso di crea un gruppo di macro.
E’ buona norma utilizzare gruppi di macro quando il numero delle macro stesse diventa particolarmente elevato; inoltre
raggruppando più macro in un solo oggetto si possono facilitare le operazioni di ricerca finalizzate alla modifica delle
macro stesse.
Per scrivere più macro in un solo oggetto, è necessario premere nella visualizzazione struttura delle macro il pulsante
Nomi macro contraddistinto dalla seguente immagine: .
In seguito alla pressione del pulsante, la struttura per l’immissione delle azioni che costituiscono le macro si modifica ne
seguente modo:
Nella nuova colonna che viene visualizzata andranno inseriti i nomi delle macro che sono inserite all’interno del gruppo; il
nome di ogni macro dovrà essere posto sulla riga corrispondente alla prima azione della macro stessa.
Per eseguire una macro contenuta in un gruppo, nell’evento che la richiama dovrà essere riportato il nome del gruppo
che contiene la macro seguito dal nome della macro stessa.
Ad esempio, per eseguire la seconda macro contenuta nel gruppo mostrato come esempio, l’evento designato dovrà
richiamare Esempio.Messaggio in quanto, Esempio è il nome del gruppo e Messaggio è il nome della macro che si
vuole eseguire.
Pagina 14
Corso avanzato di Microsoft Access
CONDIZIONI NELLE MACRO
E’ possibile porre delle condizioni sull’esecuzione di determinate azioni contenute nelle macro; per poter inserire tali
condizioni è indispensabile premere il pulsante Condizioni che si trova sulla barra degli strumenti delle macro; ecco come
si presenta tale pulsante: .
In seguito alla pressione del pulsante, la struttura per l’immissione delle azioni che costituiscono le macro si modifica ne
seguente modo:
Nell’esempio sopra è riportata una macro che esegue azioni diverse a seconda del valore assunto dal controllo Età
probabilmente contenuto in una maschera.
I tre puntini inseriti come condizione nella seconda riga della struttura, indicano che l’azione corrispondente deve
rispettare la stessa condizione dichiarata nella riga precedente.
E’ ovviamente possibile scrivere delle condizioni anche in gruppi di macro; in questo caso dovrà essere visualizzata sia
la colonna Nomi macro che quella Condizioni.
Pagina 15
Corso avanzato di Microsoft Access
UTILIZZARE UNA MACRO ……….
1. unire in modo rapido e semplice oggetti di database creati
2. eseguire assegnazioni di tasti globali (solo macro)
3. eseguire una o più azioni all’avvio del database
4. creare un prototipo dell’applicazione
………. O VISUAL BASIC
1. Facilitare la gestione del database dato che le routine evento sono generate all’ interno della definizione della
maschera o del report
2. Creare funzioni personalizzate
3. Visualizzare un messaggio di errore personalizzato
4. Manipolare tutti gli oggetti del database, compreso lo stesso database
5. Eseguire azioni nel sistema operativo, controllare l’esistenza di un file, …
6. Manipolare un record alla volta (le macro utilizzano interi set di record)
7. Passare argomenti al codice durante l’esecuzione
Pagina 16
Corso avanzato di Microsoft Access
CONVERTIRE UNA MACRO IN VISUAL BASIC
Si possono convertire sia le macro di una maschera o di un report che le macro globali non allegata ad una specifica
maschera o report.
Aprire una maschera in Visualizzazione struttura
Menu Strumenti/Macro/Converti macro in Visual Basic
Viene utilizzato l’oggetto speciale DoCmd
Un’azione viene eseguita aggiungendo alla routine un metodo dell’oggetto DoCmd
DoCmd.metodo [argomenti]
Non supporta i metodi corrispondenti alle seguenti azioni:
AggiungiMenu
FinestraMessaggio usare la funzione MsgBox
EseguiApplicazione usare la funzione Shell
EseguiCodice Eseguire direttamente la funzione in VisualBasic
InviaTasti usare l’istruzione SendKeys
ImpostaValore Impostare direttamente il valore in VisualBasic
ArrestaOgniMacro
ArrestaMacro
Pagina 17
Corso avanzato di Microsoft Access
I MODULI
I Moduli rappresentano il modo più completo ed avanzato per scrivere un programma che automatizzi le funzioni del
database; come già anticipato, un modulo è un insieme di dichiarazioni e routine (Function o Sub) di Visual Basic,
Applications Edition memorizzate come una singola unità.
Un modulo non puo’ essere eseguito, sono le singole routine ad essere richiamate da espressioni, altre routine o macro.
Per richiamare una funzione è obbligatorio fare precedere il nome della funzione da un simbolo di uguale (=) e fare
seguire il nome stesso da due parentesi tonde; esempio: =NomeFunzione(). I nomi delle funzioni non possono
presentare punti o spazi al loro interno.
Esistono 2 tipi di moduli contenenti delle routine (o Function o Sub):
• Moduli di classe
• Moduli standard
Pagina 18
Corso avanzato di Microsoft Access
Moduli di classe
Sono i moduli di maschera e di report associati ad una maschera o report contenenti delle routine evento che vengono
eseguite in risposta ad un evento che si verifica sulla maschera o sul report (creati quando si crea la prima routine evento
per una maschera o report).
'------------------------------------------------------------
' Comando0_Click
'
'------------------------------------------------------------
Private Sub Comando0_Click()
On Error GoTo Comando0_Click_Err
DoCmd.OpenForm "Clienti", acNormal, "", "", , acNormal
Comando0_Click_Exit:
Exit Sub
Comando0_Click_Err:
MsgBox Error$
Resume Comando0_Click_Exit
End Sub
Pagina 19
Corso avanzato di Microsoft Access
Moduli standard
Contengono routine generali che non sono associate ad alcun altro oggetto e routine utilizzate di frequente che è
possibile eseguire da un punto qualsiasi del database.
Function Caricata(ByVal strNomeMaschera As String) As Boolean
' Restituisce vero se la maschera specificata è caricata in visualizzazione Struttura.
Const conStatoOggettoChiuso = 0
Const conVisualizzazioneStruttura = 0
If SysCmd(acSysCmdGetObjectState, acForm, strNomeMaschera) <> conStatoOggettoChiuso Then
If Forms(strNomeMaschera).CurrentView <> conVisualizzazioneStruttura Then
Caricata = True
End If
End If
End Function
Pagina 20
Corso avanzato di Microsoft Access
Esempi
Private Sub ApriOrdini_Clik()
DoCmd.OpenForm “Ordini”
End Sub
Uso: come routine evento associata ad un controllo, a una maschera o a un report
Function PrimoDelMeseSuccessivo()
PrimoDelMeseSuccessivo = DateSerial(Year(Now),Month(Now)+1,1)
End Function
Uso : Ad esempio, Valore Predefinito =PrimoDelMeseSuccessivo()
Pagina 21
Corso avanzato di Microsoft Access
Il motore del database: MS Jet Database Engine
Le applicazioni database Access si articolano in più componenti software. In particolare si distinguono uno strato contenete l’interfaccia utente, che mette in grado l’utilizzatore finale di interagire con l’applicazione, ed uno strato, detto motore del database, che consente il collegamento tra l’applicazione ed i suoi dati. In tal modo si realizza l’indipendenza del database dalla particolare applicazione che vi accede. Ciò rende possibile, ad esempio, ad un foglio Excel di condividere i dati con una applicazione Access.
Il motore del database della linea Office 97 è il Microsoft Jet 3.5 ed è un componente condiviso da tutti i prodotti che ne fanno parte: Word, Excel, Access.
La connessione ai dati viene fornita da Microsoft Jet attraverso una serie di servizi che sono tipici di un sistema di gestione di un database (database management system DBMS). I servizi base di un DBMS possono essere così riassunti:
• Definizione delle strutture e dei vincoli di integrità dei dati.
MS Jet consente di creare strutture dati ed oggetti: database, tabelle, campi, indici, relazioni, query, che contengono i dati o che definiscono relazioni fra di essi o che ne limitino l’accesso.
• Archiviazione.
MS Jet archivia i dati e tutti gli oggetti del database in un unico file con estensione mdb. I dati vengono archiviati secondo il metodo di accesso sequenziale indicizzato (Indexed Sequential Access Method, ISAM) e fisicamente allocati in pagine della dimensione di 2 KB. Un record può estendersi su più pagine e utilizza solo lo spazio necessario per l’archiviazione dei dati. Ciò rende ragione del fatto che record di una stessa tabella possono avere lunghezza diversa. I campi memo e gli oggetti OLE occupano pagine distinte.
• Manipolazione e reperimento dei dati.
La manipolazione ed il reperimento dei dati consente di aggiungere, cancellare ed aggiornare, o semplicemente di visualizzare, record di una tabella. Avviene tramite due servizi: il motore delle interrogazioni a cui vengono inviate stringhe contenenti enunciati del linguaggio SQL, e da programma utilizzando una particolare interfaccia detta DAO (Data Access Object). In quest’ultimo caso la modifica dei record avviene direttamente utilizzando un oggetto di tipo Recordset.
• Sicurezza.
MS Jet consente di implementare, in ambiente multiutente, politiche di sicurezza abbastanza raffinate, in modo da proteggere i dati da utilizzi non autorizzati. È possibile definire, come si è visto nel corso base, utenti e gruppi di utenti a cui vengono assegnati permessi specifici sugli oggetti del database. La gestione della sicurezza è affidata ad all’applicazione Workgroup Administrator (WrkAdm.exe).
• Gestione degli accessi concorrenti.
Negli ambienti multiutente, MS Jet consente la condivisione dei dati, gestendo gli eventuali accessi concorrenti. Nel caso più utenti accedano allo stesso record è possibile definire il livello di blocco sia a livello di record che a livello di tabella.
• Manutenzione del database.
La manutenzione del database avviene attraverso le funzioni di compattazione e ripristino del database. MS Jet consente di ripristinare un database danneggiato e di deframmentarlo nel caso in cui, per effetto di ripetute cancellazioni, il file risultasse, appunto, frammentato.
Pagina 22
Corso avanzato di Microsoft Access
Microsoft Jet SQL
Il MS Jet SQL è un dialetto del Structured Query Language, linguaggio per le interrogazioni strutturate compatibile con lo standard ANSI 89. Il linguaggio SQL è uno standard industriale rivolto esclusivamente alla manipolazione ed amministrazione di database relazionali. Nella sua versione standard si presenta come un linguaggio applicativo non procedurale: non contiene né strutture di controllo per l’esecuzione del codice né costrutti che consentano la creazione di maschere di immissione dati o report, destinati alla stampa. Le parole riservate che compongono il linguaggio possono essere così classificate:
• Comandi, sono verbi che dichiarano l’azione che deve essere eseguita: SELECT;
• Qualificatori, limitano l’insieme di valori delle entità coinvolte nell’interrogazione: WHERE;
• Clausole, modificano l’azione invocata nell’istruzione: ORDER BY
• Operatori, consentono la comparazione di valori, vengono usati, in particolare nella creazione di JOIN: =,<,>;
• Funzioni di aggregazione, effettuano dei calcoli su un insieme di record ritornando un unico valore: MIN().
•
Tutti i comandi, i qualificatori, le clausole sono parole riservate del linguaggio SQL.
Le istruzioni del linguaggio SQL vengono a loro volta raggruppate in categorie che sono indicative del tipo di azione che viene eseguita:
• Data Definition Language, consente di definire le strutture dei dati e gli indici;
• Data Query Language, consente di estrarre dati da tabelle e di decidere come devono essere presentati;
• Data Manipulation Language, consente la manipolazione dei dati: l’inserimento, la cancellazione l’aggiornamento dei record.
Pagina 23
Corso avanzato di Microsoft Access
♦ Data Definition Language
CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1] [, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT multifieldindex [, ...]])
Consente la creazione di tabelle indicando i nomi dei campi, relativi tipi di dato gli indici, la chiave primaria.
Es.:
CREATE TABLE PrimaTabella (Nome TEXT, Cognome TEXT);
CREATE [ UNIQUE ] INDEX index ON table (field [ASC|DESC][, field [ASC|DESC], ...]) [WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]
Consente la creazione di indici, in una tabella, anche su campi multipli.
Es.:
CREATE INDEX NuovoIndice ON PrimaTabella (Cognome,Nome);
DROP {TABLE table | INDEX index ON table}
Consente la cancellazione di tabelle o di indici reletivi a tabelle.
Es.:
DROP TABLE PrimaTabella
Pagina 24
Corso avanzato di Microsoft Access
♦ Data Query Language
Di seguito si danno alcuni esempi di interrogazione di un database, utilizzando i costrutti DQL. Le tabelle utilizzate nelle interrogazioni sono quelle di Nothwind, database di esempio incluso in Access.
Selezione di campi da una singola tabella: SELECT clienti.contatto, clienti.indirizzo from clienti;
Assegnazione di un alias: SELECT clienti.contatto, clienti.indirizzo AS via from clienti;
Impostare criteri di selezione con il qualificatore WHERE: SELECT clienti.contatto, clienti.indirizzo AS Via, clienti.paese from clienti WHERE clienti.paese='USA';
Impostare criteri di selezione mediante corrispondenze parziali di stringhe (operatore LIKE): SELECT clienti.contatto, clienti.indirizzo from clienti WHERE clienti.contatto LIKE 'C*';
Selezione di record distinti (DISTINCTROW): SELECT DISTINCTROW clienti.paese from clienti;
Selezione di valori distinti di campi (DISTINCT): SELECT DISTINCT clienti.paese from clienti;
Selezione con sottoquery annidate (IN): SELECT prodotti.nomeprodotto from prodotti WHERE prodotti.idfornitore IN (SELECT IDFornitore from fornitori WHERE NomeSocietà='Exotic Liquids');
Ordinamento del set dei risultati (ORDER BY):
SELECT clienti.contatto, clienti.indirizzo from clienti ORDER BY contatto ASC;
Funzioni di aggregazione. MS Jet supporta le seguenti funzioni di aggregazione: COUNT, SUM, AVG, MAX, MIN
SELECT sum(prodotti.prezzounitario) AS Totale FROM Prodotti;
Pagina 25
Corso avanzato di Microsoft Access
Raggrupamento di record: (GROUP BY) SELECT COUNT(clienti.contatto) AS NumClienti FROM clienti GROUP BY clienti.paese;
Raggrupamento di record con criteri di selezione: (HAVING) SELECT COUNT(clienti.contatto) AS NumClienti FROM clienti GROUP BY clienti.paese HAVING COUNT(clienti.contatto) > 5;
Selezionare campi appartenenti a più tabelle
Il collegamento fra due o più tabelle si ottiene dichiarando le coppie di campi che realizzano il join ed il tipo di confronto che deve essere effettuato fra di essi.
Selezione da più tabelle collegate con il qualificatore WHERE (Join implicito) SELECT Prodotti.NomeProdotto, Prodotti.PrezzoUnitario, Fornitori.NomeSocietà FROM Prodotti, Fornitori WHERE Prodotti.IDFornitore = Fornitori.IDFornitore ;
Selezione da più tabelle collegate con un Join esplicito (INNER JOIN) SELECT Prodotti.NomeProdotto, Prodotti.PrezzoUnitario, Fornitori.NomeSocietà FROM Prodotti INNER JOIN Fornitori ON Prodotti.IDFornitore = Fornitori.IDFornitore;
Le clausole LEFT, (RIGHT) OUTER JOIN rendono disponibili i record che non hanno corrispondenza nella tabella collegata indicata a sinistra (LEFT) o a destra (RIGHT).
Vi sono casi in cui è necessario esprimere la condizione di join con operatori di confronto diversi da quello di uguaglianza, normalmente usato. Questi collegamenti vengono detti Join non equi.
Unione di due o più selezioni di record da tabelle aventi i medesimi campi.
SELECT Città, NomeSocietà, Contatto, "Clienti" AS [Relazione] FROM Clienti UNION SELECT Città, NomeSocietà, Contatto, "Fornitori" FROM Fornitori ORDER BY Città, NomeSocietà;
Pagina 26
Corso avanzato di Microsoft Access
♦ Data Manipulation Language
Aggiornamento dei valori dei campi per insiemi di record: UPDATE Clienti SET Clienti.Zona = 'AS' WHERE Clienti.Zona = 'SP';
Cancellazione di insiemi di record DELETE * FROM Clienti WHERE Clienti.Zona = 'SP';
Inserimento di record e caricamento dei valori dei campi: INSERT INTO Clienti (Contatto) VALUES (“Massimo Severo Giannini”);
Pagina 27
Corso avanzato di Microsoft Access
OGGETTI E INSIEMI di MICROSOFT ACCESS
Applications applicazione di access attiva
Forms maschere aperte
Controls controlli di maschere
Reports reports aperti e sottoreports
Controls controlli di report
Modules modulo di maschera/report
Screen visualizzazione su schermo
DoCmd oggetto speciale per eseguire una azione di macro
Si fa riferimento ad un oggetto appartenente ad un insieme in 3 modi diversi:
identificatore![nomeoggetto] Forms![Impiegati]
identificatore(“nomeoggetto”) Forms(“Impiegati”)
identificatore(indice) Forms(0)
(ad ogni maschera aperta e’ associato un numero crescente a partire da 0)
Si fa riferimento ad una proprietà di un oggetto:
oggetto.proprietà Forms![Mia].Caption = Now
Me![Cliente].Visible = False
Pagina 28
Corso avanzato di Microsoft Access
OGGETTI DAO (Data Access Objects)
Oggetti per l’esecuzione delle operazioni di gestione dei dati di un’applicazione, quali tabelle, query, relazioni e indici.
E’ possibile scrivere routine che creano, eliminano e modificano in modo dinamico dati ed oggetti, facendo riferimento a
dati ed oggetti direttamente nel codice oppure dichiarando variabili di oggetto che li rappresentino.
Insiemi Oggetti Descrizione
---------------------------------------------------------------------------------------------
Databases Database Database aperto
Fields Field Colonna che fa parte di una tabella, di una query,di un indice,
di una relazione o di un set di record
Indexes Index Ordinamento e univocità predefiniti dei valori di una tabella. Properties Property Proprietà interna al
sistema o definita dall’utente
QueryDefs QueryDef Definizione di query salvata
Recordsets Recordset Record di una tabella base o di una query
Relations Relation Relazione tra campi di tabelle e query.
TableDefs TableDef Definizione di tabella salvata.
Ad esempio,
un oggetto Database possiede un insieme Recordsets (tutti i Recordset aperti). Un oggetto Recordset può essere ad
esempio una tabella o un dynaset.
Il metodo OpenRecordSet accetta una stringa SQL o un nome QueyDef (query memorizzata) come argomento di origine
dati: possiede a sua volta proprietà e metodi predefiniti con cui sfogliare e modificare i dati.
Pagina 29
Corso avanzato di Microsoft Access
Sub CreaTabella ()
' Dichiara variabili.
Dim dbs As Database, tbl As TableDef, fld As Field
' Assegna il database corrente alla variabile
' di database (oppure OpenDatabase(“prova.mdb”)).
Set dbs = CurrentDB
' Crea una nuova tabella e un nuovo campo e li assegna
' alle variabili di tabella e campo.
Set tbl = dbs.CreateTableDef("Clienti scaduti")
Set fld = tbl.CreateField("IDCliente ", dbText)
' Aggiunge il campo alla tabella, quindi aggiunge
' la tabella al database.
tbl.Fields.Append fld
dbs.TableDefs.Append tbl
dbs.TableDefs.Refresh
End Sub
Pagina 30
Corso avanzato di Microsoft Access
Nell'esempio riportato di seguito si crea un oggetto Recordset di tipo dynaset da un'istruzione SQL. Tale istruzione
include la funzione Year in una proposizione WHERE per restituire solo i record relativi ai noleggi effettuati nel 1995.
Sub Noleggi95()
Dim dbs As Database, rst As Recordset, strSQL As String
Dim fld As Field
Set dbs = CurrentDb
strSQL = "SELECT DISTINCTROW Cliente, DataNoleggio " _
& "FROM Noleggi WHERE ((Year([DataNoleggio])=1995));"
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
‘ Uso del metodo Movelast dell’ oggetto Recordset
rst.MoveLast
‘ Uso della finestra di Debug
Debug.Print rst.RecordCount
End Sub
Pagina 31
Corso avanzato di Microsoft Access
Microsoft Access Bibliografia
Quick Course Microsoft Access 97 Online Press Inc. Mondadori Informatica Microsoft Press Catapult Microsoft Access 97 Passo per Passo Mondadori Informatica Microsoft Press J. Habraken Microsoft Office User Specialist Microsoft Access 97 Exam Guide QUE T. M. O'Brien, S. J. Pogge, G. E. White Microsoft Access 97 Manuale dello sviluppatore Mondadori Informatica Microsoft Press F. Scott Barker Access 97 Manuale di Programmazione Jackson Libri
Pagina 32