Moduli 1 In Access è possibile automatizzare diverse operazioni mediante l’utilizzo del linguaggio VBA (Visual Basic for Applications). Le istruzioni del linguaggio possono essere inserite in moduli, che sono “un insieme di dichiarazioni e routine Visual Basic memorizzate come una singola unità.” Esistono diversi tipi di moduli: • Moduli standard: “I 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.” • Moduli di maschera e di report: “sono moduli di classe associati a una determinata maschera o report contenenti in genere routine evento che vengono eseguite in risposta a un evento che si verifica sulla maschera o sul report.” • Moduli di classe: “utilizzare un modulo di classe per creare una definizione per un oggetto personalizzato (non collegato direttamente a una maschera o ad un report.)” CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 1 Moduli 2 Per accedere alla finestra di creazione dei moduli: - Selezioniamo la categoria “Moduli” tra gli oggetti e clicchiamo su “Nuovo” (database di riferimento “Studenti.mdb”) Finestra delle proprietà <- Qui vengono visualizzati i nomi di tutti i moduli del Database Qui vengono mostrate le proprietà del modulo selezionato -> Finestra delle routine 1 Casella Oggetto 2 Casella Routine 3 Dichiarazioni 4 Routine 5 Pulsante Visualizza routine 6 Pulsante Visualizza Modulo Intero CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 2 Moduli 3 Moduli di maschera e di report: “È possibile utilizzare le routine evento (routine evento: Routine eseguita automaticamente in risposta a un evento.) per controllare il funzionamento delle maschere e dei report e le risposte di questi oggetti ad azioni dell'utente quali il clic su un pulsante di comando. Quando si crea la prima routine evento per una maschera o per un report, viene automaticamente creato il modulo di maschera o di report associato. NOTA: chiudere la finestra di creazione dei Moduli Database “Studenti.mdb” > Maschera “inizio” in struttura > Visulizza > Codice 1 Per visualizzare oppure aggiungere la routine di una maschera, scegliere uno degli oggetti della maschera nella casella Oggetto 2 ... e quindi scegliere un evento nella casella Routine. I nomi degli eventi ai quali sono già associate routine sono visualizzati in grassetto. Le routine presenti nei moduli delle maschere e dei report possono chiamare le routine aggiunte ai moduli standard.” CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 3 Moduli 4 Esempio di modulo collegato alla maschera “inizio” del database “Studenti.mdb” Option Compare Database Indica che il confronto tra elementi è basato sul tipo di ordinamento determinato dal paese (Italia) dove si verifica il confronto Private Sub fine_Click() On Error GoTo Err_fine_Click DoCmd.Quit Exit_fine_Click: Exit Sub Err_fine_Click: MsgBox Err.Description Resume Exit_fine_Click End Sub ... Dichiarazione di routine (INIZIO) Rinvio per la gestione di situazioni di errore Chiude il database ed Access Label (si evince dai due punti) Istruzione di uscita dalla routine Label di inizio della gestione di errori Apertura di una finestra di notifica dell’errore Riprende l’esecuzione dalla label “Exit_fine_Click” Dichiarazione di routine (FINE) CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 4 Moduli 5 Inseriamo un pulsante nella maschera “Studenti” per calcolare l’età dello studente: • Inseriamo il pulsante sulla maschera annullando la procedura di autocomposizione • Accediamo alle “Proprietà” del pulsante, scheda “Altro” ed impostiamo il “Nome elemento” a “calcola età” • Nella scheda “Formato” impostiamo l’etichetta a “Calcola età” • Accediamo alla scheda “Eventi” e impostiamo l’evento “Su clic” cliccando sui puntini di sospensione • Selezioniamo “Generatore di codice” ed inseriamo: Private Sub calcola_età_Click() Dim anni As Integer anni = Year(Date) - Year(Forms!studenti!data_nascita) MsgBox "Età dello studente: " & anni End Sub • Chiudiamo la finestra dei moduli e passiamo alla “Visualizzazione Maschera” per verificare il funzionamento del pulsante CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 5 Moduli 6.1 Modulo standard: “I 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.” Creiamo una funzione per calcolare il numero di anni tra due date: • Selezioniamo la categoria “Moduli” tra gli oggetti, cliccare su “Nuovo” • Inseriamo il codice seguente: Function differenza_anni(data_piu_recente As Date, _ data_meno_recente As Date) As Integer differenza_anni = Year(data_piu_recente) - Year(data_meno_recente) End Function • Chiudiamo la finestra dei moduli salvando prima cliccando sul pulsante “Salva” e dando il nome al modulo: “Operazioni su date” • Creiamo una query sulla tabella “Studenti” aggiungendo tutti i campi più la il campo così calcolato: CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 6 Moduli 6.2 età: differenza_anni(Date();[data_nascita]) … in pratica: Eseguiamo la query per verificare la correttezza della funzione: Matricola Cognome Nome Data di Nascita età 0000001 ROSSI MARIO 11/11/1977 28 0000002 ROSSI UGO 11/11/1981 24 0000003 VERDI ANNA 11/11/1981 24 0000004 BIANCHI ALFREDO 11/11/1982 23 0000005 BIANCHI MARIA 11/11/1982 23 CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 7 Esercitazione CORSI DI INFORMATIZZAZIONE - Basi di Dati: MS Access - Parte 6 8