Fonte: http://digilander.libero.it/ballardinig/dispense.htm ESERCIZI GRADUALI IN ACCESS 2007 (BETA 2) - TIPO PROBLEM SOLVING 0. CREAZIONE DI UN DATABASE. [Riferimento: dispensa capitolo 0] Creare un nuovo database di nome FATTURAZ. Chiuderlo e riaprilo. 1. LE TABELLE. [Riferimento: dispensa capitolo 1] 1. Creare/caricare/aggiornare una tabella Clienti con i dati identificativi dei vari clienti (identificati da un codice). 2. Creare/caricare/aggiornare una tabella Fatture con i dati delle fatture (ogni fattura è identificata da un numero ed associata ad un cliente). 3. Creare/caricare/aggiornare una tabella Magazzini con i dati dei magazzini (ogni magazzino è identificato da un codice). 4. Creare/caricare/aggiornare una tabella Prodotti con i dati dei prodotti (ogni prodotto è identificato dal codice del magazzino di appartenenza e da un proprio codice identificativo; tra le informazioni deve essere presente il prezzo unitario). 5. Creare/caricare/aggiornare una tabella RigheFatt con i dati delle righe delle fatture (ogni riga di fattura è identificata dal numero della fattura di appartenenza e da un numero di riga all’interno della fattura e contiene il codice di magazzino, il codice di articolo all’interno del magazzino e la quantità di merce relativa). 6. Creare/caricare/aggiornare una tabella AltriDatiCli con dati aggiuntivi sui clienti (es. Partita IVA, Codice Fiscale, ... non previsti in precedenza; ogni cliente è identificato dal suo codice). Per ogni tabella costruire anche gli indici opportuni e definire l’opportuna chiave primaria (che deve essere univoca). Produrre uno stampato del contenuto di ogni tabella alla fine. 2. LE RELAZIONI. [Riferimento: dispensa capitolo 2] Costruire le relazioni tra le precedenti 6 tabelle imponendo dove opportuno l’integrità referenziale. 3. LE QUERY (VISTE). [Riferimento: dispensa capitolo 3] 1. Creare/visualizzare una query QFatture che contenga dati del cliente, della fattura, della riga di fattura per ogni riga di fattura. La query dovrà essere ordinata per cliente, a parità di cliente per fattura, a parità di fattura per numero di riga. La query dovrà contenere anche l’importo di ogni riga di fattura. 2. Creare/visualizzare una query QFattConSomma che contenga dati del cliente, della fattura, e l’importo totale per ogni fattura. La query dovrà essere ordinata per cliente, a parità di cliente per fattura. 3. Creare/visualizzare una query QImpoClienti che contenga dati del cliente e l’importo totale del fatturato per ogni cliente. La query dovrà essere ordinata per cliente. 4. Creare/visualizzare una query QueryCli che contenga dati dei clienti che hanno anagrafica che inizia con una certa stringa fissata e che hanno codice minore o uguale di un certo valore fissato. La query dovrà essere ordinata per cliente. 5. Creare/visualizzare una query QFattureFino che contenga i dati di ogni fattura che abbia data inferiore o uguale ad una certa data fissata o comunque che appartenga ad un certo cliente fissato. La query dovrà essere ordinata per fattura. NB Le date vanno racchiuse tra simboli # (es. #21/10/99#). 6. Creare/visualizzare una query QFattureFiltro che contenga dati del cliente, della fattura, della riga di fattura per ogni riga di fattura. La query dovrà però mostrare le sole righe in cui il codice cliente stia compreso tra due valori selezionati ed in cui il numero di riga della fattura sia più piccolo del numero di fattura. La query dovrà essere ordinata per cliente, a parità di cliente per fattura, a parità di fattura per numero di riga. La query dovrà contenere anche l’importo di ogni riga di fattura selezionata. 7. Creare/visualizzare una query QRigheFatt che contenga dati della fattura, della riga di fattura per ogni riga di fattura. La query dovrà essere ordinata per fattura, a parità di fattura per numero di riga. La query dovrà contenere anche l’importo di ogni riga di fattura. Produrre uno stampato del contenuto di ogni query alla fine. 4. LE QUERY SQL. [Riferimento: dispensa capitolo 4] 1. Creare/visualizzare una query SQL QFattureClienti che contenga tutti i dati del cliente, tutti i dati della fattura per ogni fattura. La query dovrà essere ordinata per cliente, a parità di cliente per fattura. 2. Creare/visualizzare una query SQL QImportoMax che contenga l’anagrafica del/dei cliente/i che hanno (almeno un) importo di riga di fattura maggiore o uguale di ogni altro nel database. 3. Creare/visualizzare una query SQL QImportoMin che contenga l’anagrafica del/dei cliente/i che hanno (almeno un) importo di riga di fattura minore o uguale di ogni altro nel database. In questo caso usare la funzione di aggregazione MIN. 4. Creare/visualizzare una query SQL QMaxPerCliente che contenga i dati del cliente, della fattura e l’importo della riga che risulta massimo (tra tutte le fatture di quel cliente) per ogni cliente. 5. Creare/visualizzare una query SQL QMaxFattPerCli che contenga i dati del cliente, della fattura e l’importo totale della fattura che risulta massimo (tra tutte le fatture di quel cliente) per ogni cliente. 6. Creare/eseguire una query SQL di inserimento QInserimento che consenta di inserire un cliente fissato. 7. Creare/eseguire una query SQL di inserimento QInserimento1 che consenta di inserire un duplicato di tutti clienti esistenti con codice che però (per evitare errori di chiave) viene calcolato pari a max+codice attuale (dove max è una costante che indica il massimo codice attualmente presente). 8. Creare/eseguire una query SQL di aggiornamento QAggiornamento che consenta di fissare anagrafica ed indirizzo di ogni cliente ad una certa stringa costante per tutti i clienti con codice maggiore di un certo valore fissato. 9. Creare/eseguire una query SQL di cancellazione QCancellazione che consenta di cancellare tutti clienti che hanno una certa anagrafica. 10.Creare/eseguire una query SQL di creazione tabella QCreazione che consenta di creare una tabella FlTmp con un campo testo di lunghezza 10 ed un campo intero lungo. Produrre uno stampato del contenuto di ogni query (per cui sia sensata la stampa) alla fine. Stampare anche il testo della query SQL creata. 5. LE MASCHERE. [Riferimento: dispensa capitolo 5] 1. Creare/usare una maschera (scheda) SClienti1 che consenta di visualizzare / aggiornare i dati dei clienti in forma di “maschere continue” (“layout tabulare”). 2. Creare/usare una maschera (scheda) SClienti2 che consenta di visualizzare / aggiornare i dati dei clienti in forma di “maschera singola” (“layout a colonne”). 3. Creare/usare una maschera (scheda) SFatture che consenta di visualizzare / aggiornare i dati delle fatture in forma di “maschere continue” (“layout tabulare”). 4. Creare/usare una maschera (scheda) SClienti3 che consenta di visualizzare / aggiornare i dati dei clienti in forma di “maschera singola” (“layout a colonne”). Sulla maschera aggiungere in autocomposizione un bottone per aprire la maschera SFatture e visualizzare però solo le fatture del cliente attuale. 5. Creare/usare una maschera (scheda) SAssegnazFatture che consenta visualizzare e/o aggiornare i dati delle fatture in forma di “maschera singola” (“layout a colonne”). Tale maschera dovrà però consentire la scelta del cliente a cui associare la fattura attraverso un opportuno combobox o una opportuna listbox. 6. Creare/usare una maschera (scheda) SClientiFatture1 che consenta visualizzare e/o aggiornare la seguente situazione: i dati di un cliente, una sottomaschera con le fatture di quel cliente che però vengono reperite dalla query che seleziona solo le fatture fino ad una certa data fissata. Suggerimento: usare l’autocomposizione. 7. Creare/usare una maschera (scheda) SClientiFatture che consenta visualizzare e/o aggiornare la seguente situazione: i dati di un cliente, una sottomaschera con le fatture di quel cliente, una sottomaschera con le righe della fattura attualmente selezionata comprensive dell’importo della riga. Sulla maschera in ogni istante comparirà anche il totale della fattura attualmente selezionata. Produrre uno stampato di un caso prova significativo per ogni maschera (scheda). 6. I REPORT (LE STAMPE). [Riferimento: dispensa capitolo 6] 1. Creare/usare un report RClienti1 che consenta visualizzare e/o stampare i dati dei clienti in forma di “Report standard: a colonne” (autocomposizione). 2. Creare/usare un report RClienti2 che consenta visualizzare e/o stampare i dati dei clienti in forma “Report standard: tabulare” (autocomposizione). 3. Creare/usare un report RFatture che consenta visualizzare e/o stampare i dati seguenti: all’inizio il totale generale delle fatture; per ogni cliente i dati identificativi e sotto l’elenco delle fatture e sotto ogni fattura l’elenco delle righe di fattura. Ogni riga di fattura dovrà contenere tutti i dati significativi (compreso l’importo). Dovranno essere evidenziati alla fine di ogni fattura il totale di fattura ed alla fine di ogni cliente il totale del fatturato del cliente. E’ richiesta una interruzione di pagina dopo ogni cliente. 4. Creare/usare un report RFattColonna che consenta visualizzare e/o stampare i dati seguenti: per ogni cliente i dati identificativi e sotto l’elenco delle fatture e sotto ogni fattura l’elenco delle righe di fattura. E’ richiesto che i dati vengano disposti sul foglio in almeno tre colonne ed è richiesta una interruzione di colonna dopo ogni cliente. Produrre uno stampato di un caso prova significativo per ogni report. 7. LA PROGRAMMAZIONE IN ACCESS - VBA. [Riferimento: dispensa capitolo 7] 1. Creare/usare una maschera (scheda) S_VBA1 che consenta, relativamente alla tabella AltriDatiCli (ordinata usando un indice), di gestirla attraverso un “menù di pulsanti” che consentano di: 1.1. Inizializzare la maschera mostrando il primo record 1.2. Passare al prossimo record 1.3. Aggiornare il record corrente 1.4. Inserire un nuovo record 1.5. Ricercare un certo record 1.6. Cancellare il record corrente 1.7. “Pulire” la maschera 1.8. Mostrare il record corrente 1.9. Uscire dalla maschera 2. Creare/usare una maschera (scheda) S_VBA2 che consenta di: 2.1. Mostrare i valori selezionati in una listbox ed in un combo box della scheda (non associati a tabelle/query) 2.2. Aggiungere un valore simultaneamente alla listbox ed al combo box (in fondo) 2.3. Mostrare il valore attualmente selezionato di una serie di checkbox e option button disposti sulla maschera 3. Creare/usare una maschera (scheda) S_VBA3 che consenta di: 3.1. Mostrare i valori selezionati in una listbox ed in un combo box della scheda (associati a tabelle/query da cui traggono i loro valori) 3.2. Aggiungere un valore simultaneamente alla listbox ed al combo box 4. Creare/usare una maschera (scheda) S_VBA5 che consenta visualizzare e/o aggiornare i dati dei clienti; tramite un bottone si accede alla maschera S_VBA51 che consente di visualizzare e/o aggiornare i dati delle fatture del cliente attuale; tramite un bottone si accede alla maschera S_VBA52 che consente di visualizzare e/o aggiornare i dati delle righe della fattura attuale. Sulla maschera delle righe di fattura (S_VBA52) si vuole anche visualizzare il totale di fattura. Suggerimento: usare la programmazione in VBA nelle maschere e sottomaschere. 5. 6. 7. Creare/usare una maschera (scheda) S_VBA6 che consenta visualizzare e/o aggiornare la seguente situazione: i dati di un cliente, una sottomaschera con le fatture di quel cliente, una sottomaschera con le righe della fattura attualmente selezionata comprensive dell’importo della riga. Sulla maschera in ogni istante comparirà anche il totale della fattura attualmente selezionata. Suggerimento: la sincronizzazione tra le due sottomaschere e con la maschera principale viene mantenuto attraverso la programmazione in VBA nelle maschere e sottomaschere: occorre agire sull’evento “su corrente” della maschera principale e della maschera delle fatture, inoltre per aggirare alcuni problemi implementativi occorre usare anche un timer sulla maschera principale e lo scambio di informazioni tramite la proprietà tag. Creare/usare una maschera (scheda) SRFatture che consenta di visualizzare / stampare i dati delle fatture di un cliente indicato usando il report RFatture e filtrando i record in base al codice cliente. Suggerimento: usare l’opportuna opzione dell’istruzione DoCmd.OpenReport. Creare/usare una maschera (scheda) S_VBA7 che consenta di visualizzare / stampare i dati delle fatture di un cliente indicato usando il report RFatture1 (che è una copia, che poi dovrà essere modificata, del report RFatture) e filtrando i record in base al codice cliente. Si dovrà prevedere la possibilità di cambiare il titolo del report e la possibilità di invertire l’ordine delle righe di fattura. Suggerimento: per filtrare i record in base al codice cliente non usare l’opportuna opzione dell’istruzione DoCmd.OpenReport ma usare solo la normale programmazione VBA come per gli altri aspetti del problema. Produrre: stampato delle maschere, elenco eventi, analisi eventi, codifica, un caso prova significativo per ogni esercizio. In conclusione fare in modo che all’atto del caricamento del database venga aperta una certa maschera (quella che volete). 8. LE PRINCIPALI VOCI DI MENU’. [Riferimento: dispensa capitolo 8] • Importare la tabella Clienti all’interno di Word e stamparla. • Usando la voce “Unisci a MsWord” collegare i dati della tabella Clienti ad un documento Word in modo da stampare: 1. lettere “tipo”; 2. un “catalogo” (elenco). • Usando la voce “Analizza con MsExcel” importare la query QFatture all’interno di Excel per successive elaborazioni. In Excel si potranno applicare varie operazioni interessanti: filtro, tabella Pivot, ecc. ecc. • Compattare il database corrente eliminando lo spazio sprecato e così aumentando le prestazioni. Produrre stampati la dove significativo. 10. GENERAZIONE DI PAGINE HTML PER LA VISUALIZZAZIONE DI DATI TRAMITE REPORT. [Riferimento: dispensa capitolo 10] 1. Generare una pagina HTML per visualizzare i dati del report RFatture. Alla fine produrre uno stampato della pagina da Internet Explorer.