Ciao.
Come ti è stato detto, l'approccio sull'utilizzo di un database è ben diversa da quella che si usa con excel.
In realtà scoprirai che la logica su come gestire una base di dati fatta con excel o access è praticamente identica, ma avviene usando strumenti diversi.
Un consiglio che ti do è quello di usare sempre una chiave primaria, per ogni tabella che usi.
E' vero che potrebbe essere opzionale, ma dopo che avrai preso un po' di pratica con access (di solito dopo una settimana) vorrai aggiungere funzionalità dove ti servirà avere a disposizione un valore univoco da poter utilizzare per recuperare dati diversi tra tabelle diverse.
La potenza dei database è proprio questa.
La possibilità di usare un unico valore per recuperare migliaia di dati da centinaia di tabelle, semplicemente con un click.
Inoltre una chiave primaria non da fastidio. Sta li. Se ti occorre, la usi, se non ti occorre non da fastidio a nessuno, anzi in alcune operazioni interne è access stesso che la sfrutta per i suoi scopi, senza che tu te ne accorga.
A differenza di excel, dove l'immissione dei dati, corrisponde anche alla visualizzazione, nei database, è buona regola avere strumenti diversi per immettere i dati e per visualizzarli.
Anzi. di solito in un database, l'utente finale non vede mai il contenuto intero delle tabelle, ma solo quello che gli occorre in quel momento per fare l'operazione desiderata. Tutto il lavoro avviene dietro le quinte in base alle regole create in fase di sviluppo.
Nei database, esponendolo in modo molto semplicistico, possiamo individuare quattro fasi diverse che vengono realizzare con 4 elementi differenti.
- il contenitore dei dati (le tabelle)
- l'immissione dei dati (di solito una maschera)
- il recupero dei dati e la loro manipolazione (query, formule e calcoli)
- la visualizzazione (Maschere apposite dove non è possibile modificare dati, report o stampe).
Quindi ti consiglio sempre di usare maschere diverse per immettere i dati e per visualizzarli. Questo approccio semplifica di molto il lavoro e soprattutto evita immissioni e modifiche involontarie dei dati.
Solitamente è sconsigliabile usare direttamente la visualizzazione della tabella per aggiungere i dati, anche se in un primo momento può sembrare più agevole.
Ma non lo è. Perchè più si va avanti nella realizzazione di database e si inizia ad usare la giusta logica nella loro stesura e più nelle tabelle verranno archiviati solo numeri o dati non agevolmente riconoscibili.
Quando inizierai a leggere qualche manuale, scoprirai che nei database (ed anche nella programmazione) esistono delle regole da seguire, per creare una applicazione, veloce, compatta e snella.
Facendo un sunto veloce, una di queste è quella che "Non si archiviano dati che possono essere recuperati o calcolati andando ad usare valori che sono già stati archiviati in altre tabelle". (da qui la fondamentale importanza delle chiavi primarie univoche e dei database relazionali)
Questo si fa per avere una minore quantità di dati archiviati, che renderebbero pesanti i database, sia in termini di spazio che di prestazioni.
Un database relazionale nasce proprio per l'esigenza di avere archiviati solo i dati necessari, senza che si ripetano inutilmente.
Ti dico questo perchè l'approccio che stai seguendo a questo specifico problema è tipico di execel, ma non è ottimale per access, o almeno hai strumenti già pronti per rendere tutto automatizzato.
Ora non so quali sono le tue reali esigenze, però stai archiviando dei dati che potrebbero essere semplicemente calcolati.
Dati che, nel momento in cui cambiasse il valore al singolo metro quadro, praticamente dovresti munirti di calcolatrice ed andare a modificare manualmente e singolarmente ogni dato in ogni record, con perdita di tempo, lavoro inutile e soprattutto con il rischio di commettere errori.
Inoltre come detto da Alex, questo comporta anche la gestione della virgola al posto del punto nell'archiviazione dei decimali.
Purtroppo, essendo access, un prodotto che nasce seguendo la notazione anglosassone, alcuni dati sono rognosi da gestire. Come l'archiviazione dei decimali, oppure la gestione delle date.
Nulla che non sia gestibile, ma occorre una buona preparazione e una buona conoscenza dello strumento. Esistono anche delle patch che risolvono il problema, ma indovina un po'? Sono a pagamento e mi sembra che siano disponibili solo per le versioni 365 professional.
Quindi, secondo me, dovresti cambiare approccio, ed invece che archiviare ogni singolo valore, dovresti archiviare solo il prezzo al metro quadro.
Questo ti permette di non avere una grande mole di dati e sopratutto al variare del prezzo, dovrai solo modificare un singolo valore.
Il resto lo calcoli in fase di visualizzazione dei dati o quando fai un preventivo.
Quindi nella tabella avresti solo il valore al metro quadro (ad esempio 15 euro). Oppure avere il valore con iva, senza iva, con lo sconto. Ma comunque solo valori da utilizzare per calcolare il prezzo finale del computo metrico.
In questo modo, aprendo la maschera di visualizzazione, andrai a recuperare solo il valore al metro quadro, immetterai in una specifica text box non associata, i metri quadri da calcolare e con una semplice moltiplicazione (magari cliccando un pulsante) avere il costo totale, visualizzato su un'altra text box non associata.
Se poi hai bisogno di archiviare un preventivo, archivierai tutti i dati in un'altra tabella, con tutti i dati necessari, tipo il nome del committente, i metri quadri, il valore etc etc.
Comunque seguendo il tuo approccio, e basandomi sulle tue attuali conoscenze, la via più semplice e più veloce è di procedere in questa maniera, senza usare codice VBA, o Macro, ma semplicemente sfruttando le proprietà degli strumenti.
Creare una maschera di immissione:
-Selezioni la tabella.
-Clicchi su crea maschera.
La maschera è pronta e funzionante senza nessuna modifica. Con questa andrai a popolare la tabella.
Creare una maschera di visualizzazione:
- Selezioni la tabella
- Clicchi su crea maschera.
Ora la apri in modalità struttura.
-Modifichi la text box dei metri quadri in una casella combinata.
Vai nella sezione delle proprietà DATI
-elimini il collegamento su "Origine controllo" (la rendi non associata)
-su "origine riga", crei una query basata sulla tabella sorgente selezionando tutti i campi (è preferibile non usare l'asterisco) e la salvi
Vai nella sezione FORMATO.
-Modifichi il valore "numero colonne" immettendo il numero dei campi presenti nella query
-Imposti "Intestazione colonne" su SI.
Ritorni nella sezione DATI e modifichi "colonna associata" in base a quale colonna contiene il valore che vuoi visualizzare nella combo box. (se non è quello giusto, fai delle prove cambiando colonne. I consigli quelli professionali )
Ricorda che la numerazione interna di access non parte da uno ma da zero. Quindi quella che per noi sarebbe la colonna uno, in realtà access la chiama colonna 0.
Se vuoi nascondere alcune colonne, ti basterà impostare la larghezza delle colonne.
Vai su "formato", "Larghezza colonne" ed immetti i valori di larghezza di ogni singola colonna, separati da un punto e virgola.
Se vuoi nascondere una colonna ti basterà impostare la larghezza a 0
Esempio: 3;0;3
la seconda colonna non verrà visualizzata nel menù a tendina della combo box e le altre due avranno una larghezza di 3 cm.
Passiamo ora alla seconda text box.
-Elimini il collegamento su "origine controllo"
-scrivi all'interno della text box : =[nome della combo box].[column( numero della colonna della combo box che contiene il prezzo) ]
- salva la maschera.
La maschera è funzionante. Selezionando il relativo valore nella combo box avrai il relativo prezzo, senza il rischio di modificare accidentalmente i dati, cosa difficile in excel, ma molto probabile in access. Senza avere poi la possibilità di fare un Undo.
Sicuramente ho commesso errori nella descrizione, ma il concetto è questo.
Poi quando avrai più esperienza, potrai trovare altri modi ed altri approcci, come usare i suggerimenti che ti hanno già dato.