Access Macro E Moduli

32
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

description

manuale access

Transcript of Access Macro E Moduli

Page 1: Access Macro E Moduli

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

Page 2: Access Macro E Moduli

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

Page 3: Access Macro E Moduli

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

Page 4: Access Macro E Moduli

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

Page 5: Access Macro E Moduli

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

Page 6: Access Macro E Moduli

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

Page 7: Access Macro E Moduli

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

Page 8: Access Macro E Moduli

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

Page 9: Access Macro E Moduli

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

Page 10: Access Macro E Moduli

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

Page 11: Access Macro E Moduli

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

Page 12: Access Macro E Moduli

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

Page 13: Access Macro E Moduli

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

Page 14: Access Macro E Moduli

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

Page 15: Access Macro E Moduli

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

Page 16: Access Macro E Moduli

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

Page 17: Access Macro E Moduli

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

Page 18: Access Macro E Moduli

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

Page 19: Access Macro E Moduli

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

Page 20: Access Macro E Moduli

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

Page 21: Access Macro E Moduli

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

Page 22: Access Macro E Moduli

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

Page 23: Access Macro E Moduli

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

Page 24: Access Macro E Moduli

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

Page 25: Access Macro E Moduli

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

Page 26: Access Macro E Moduli

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

Page 27: Access Macro E Moduli

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

Page 28: Access Macro E Moduli

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

Page 29: Access Macro E Moduli

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

Page 30: Access Macro E Moduli

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

Page 31: Access Macro E Moduli

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

Page 32: Access Macro E Moduli

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