Newsgroup: it.comp.appl.access
Titolo: Tabelle correlate

In un database di Access 2000 ho una tabella principale e una secondaria
correlata. Come posso  fare in modo che il programma mi consideri nulli i
dati inseriti in un record della tabella principale quando ometto
l'inserimento di dati in quella secondaria correlata? O almeno che mi avvisi
quando cerco di passare ad un nuovo record della tabella principale senza
che abbia inserito alcun dato in quella secondaria. Qualcuno puň aiutarmi?
Grazie


Ipotizziamo che la tabella che tu chiami tabella principale si chiami
MOVIMENTI e contenga dei movimenti di magazzino, e che la tabella che tu
chiami secondaria si chiami PRODOTTI e contenga le anagrafiche dei prodotti.
Il primo presupposto è che in ambedue le tabelle esista un campo in base al
quale mettere in relazione le due tabelle e che nel nostro esempio
chiameremo
IDProdotto, che necessariamente deve essere la chiave primaria della tabella
PRODOTTI.
Il Tipo dati di IDProdotto nelle due tabelle deve essere omogeneo, se ad
esempio in PRODOTTI è Contatore nella MOVIMENTI dovrà essere Numerico,
oppure Numerico in ambedue, od infine Testo in ambedue.
Ora, in base ad IDProdotto, bisogna creare una relazione tra PRODOTTI e
MOVIMENTI di tipo reverenziale; a tal fine rendi attiva la finestra
Database, quindi dal menu Strumenti seleziona il comando Relazioni... .
 Ti si aprirà la finestra Relazioni; controlla se all'interno di essa ci
sono due rettangolini che portano il nome delle tue due tabelle; se non ci
sono, dal menu Relazioni seleziona il comando Mostra tabella.. ; dalla nuova
finestra che ti si è aperta seleziona il nome della prima tabella e premi il
pulsante Aggiungi, quindi seleziona il nome della seconda tabella e premi
nell'ordine il pulsante Aggiungi e poi il pulsante Chiudi.
Se le tabelle non sono vicine, con il mouse trascinale una vicina all'altra;
verifica se
esiste una linea che unisce tra loro le due tabelle; se non c'è clicca con
il mouse il nome IDProdotto della tabella PRODOTTI e trascinalo sullo stesso
nome della tabella MOVIMENTI; ti si aprirà una finestra chiamata Relazione :
fai un clic sulla casellina vicino alla scritta Applica integrità
reverenziale ed a questo punto comparirà uno svirgolino; fai la stessa cosa
sulla casellina vicino alla scritta Aggiorna campi correlati a catena; premi
il pulsante Crea per chiudere la finestra Relazione.
Se invece già esisteva una linea che univa i rettangoli delle due tabelle,
con il mouse fai un doppio clic su di essa; ti si aprirà così la finestra
Relazione; fai comunque quello che do scritto sopra dopo la sua apertura.
Ora hiudi la finestra Relazioni cliccando su X e salvala pigiando sul
pulsante SI
della nuova finestra che ti è aperta.
Il gioco è fatto; da questo momento non riuscirai a registrare  un record
sulla tabella MOVIMENTI se essa non avrà un record corrispondente nella
tabella PRODOTTI.
Ciao, Roberto


Fermo restando che nel tuo caso č indispensabile aggiungere l'integritą
reverenziale nel mettere in relazione le due tabelle, e puoi farlo nella
maniera che ti ho descritto nel mio messaggio del 17/06/00 delle ore 00:51,
resta il fatto che Access ti avvertirą del fatto che non esiste un record
corrispondente nella tabella secondaria solo quando tenti di passare ad un
nuovo record della tabella principale; dovrai pertanto uscire dalla
procedura di immissione dati nella tabella principale per passare ad
inserire i dati mancanti nella tabella secondaria per poi riaprire la
precedente procedura; naturalmente cosģ facendo perdi anche i dati validi
che avevi gią digitato per il record della tabella principale, oltre a non
rendere facile la vita a chi opera su PC.
E' possibile fare in modo di accorgersi dell'errore subito dopo aver
digitato,  per la tabella principale, il campo che mette in relazione le due
tabelle (nell'esempio che abbiamo trattato questa notte il campo
IDProdotto), e predisporre delle attivitą che permettano solo di sospendere
l'immissione dei dati per la tabella principale, passare all'immissione dei
dati mancanti della tabella secondaria, quindi riprendere la digitazione dei
dati della tabella principale dal punto in cui si erano interrotti.
Presuppongo, come č logico, che l'immissione dei dati nella tabella
principale tu li faccia tramite una maschera (MASCHERA1) e sempre tramite
una maschera (MASCHERA2) tu faccia l'immissione nella tabella secondaria.
E' buona norma, se non altro per facilitare l'immissione dei dati, che, in
un caso come il tuo, il controllo IDProdotto della MASCHERA1 venga definito
con una casella combinata; cosģ facendo, settando a SI la proprietą "Solo in
elenco" del controllo IDProdotto di MASCHERA1, a fronte dell'evento "Su non
in elenco" si puņ generare del codice VBA tramite il quale effettuare le
azioni di cui accennavo qui sopra, azioni atte a  gestire adeguatamente
l'errore: tra queste azioni ci potrą essere l'invio di un messaggio
all'operatore per avvertirlo dell'accaduto, chiedere all'operatore se ha
commesso un errore di digitazione e alla sua risposta negativa, aprire
MASCHERA2 per immettere i dati mancanti nella tabella secondaria; dopo aver
chiuso MASCHERA2, l'operatore potrą riprendere a digitare i dati con
MASCHERA1 dal punto in cui era rimasto.
Spero cosģ di aver risposto pił compiutamente al tuo quesito.
Ciao Roberto

 [cut]
dai Roberto consentimi una piccola correzione, visto anche il tuo post
precedente delle 0.51, "integrita' reverenziale" che roba e' magari non
pensi che "integrita' referenziale" sia meglio?
a.cara


Grazie per i suggerimenti

 wrote in message
394B8306...@blunet.it...



E certo che sì, ma quando una ha il momento del co...ne!
Scusatemi Roberto