Newsgroup: it.comp.appl.access
Titolo: integrità referenziale fra tabelle (e maschere)

Ciao a tutti
ho un problema con l'integrità referenziale fra alcune tabelle e spero
che qualche anima pia fra le tante esperte possa darmi un'indicazione
di aiuto che mi metta sulla giusta strada.
Immagino che sia una banalità, ma mi sto veramente incartocciando.
Un esempio può chiarire:
Ho 2 tabelle (Access 97, Windows 98)
- Testata 
  IdT 	Contatore
  Nota	testo (255 chr)
- Righe
  IdR	Contatore
  Id2   Numerico (Intero lungo)
  Testo testo (255 chr)
Ho impostato l'integrità referenziale fra IdT e Id2, con "aggiorna
campi correlati a catena"  e "elimina record correlati a catena".
Ho creato 1 maschera singola per l'input dei dati nella prima tabella
(Testata) con una sottomaschera (continua) per la seconda tabella,
linkando IdT e Id2.
In tal modo posso vedere i soli record di Righe che sono relazionati
con Testata, e cosa ancora più importante, per i record che aggiungo
viene automaticamente riempito il campo Id2 con il valore di IdT.
Se però invece di usare una sottomaschera continua, decido di
aggiungere un pulsante per aprire una maschera (singola o continua)
della seconda tabella (Righe) con funzionalità di ricerca valori
corrispondenti (apre Righe e ricerca i record che hanno corrispondenza
Idm--Id2), quando compilo i valori nella maschera Righe, il campo Id2
non viene valorizzato e mi viene giustamente segnalato l'errore "You
can't add or change a record because a related record is required in
table Testata"
Scusate se sono stato forse troppo prolisso, ma abbiate pazienza con
un new entry.
Grazie in anticipo per l'attenzione.

 ha scritto nel messaggio
news:518e3932.05012...@posting.google.com...

Mi sfugge il motivo per cui stai decidendo di abbandonare la tecnica di
maschera/sottomaschera (rinunciando a tutti gli automatismi offerti da
Access) ed optare per una tecnica basata su due maschere distinte
sincronizzate tra loro.
Comunque, viso che, quando inserirai una nuova riga nella relativa maschera,
sicuramente la maschera relativa ai titoli è sicuramente aperta, a fronte
dell'evento "Prima di aggiornare" della maschera delle righe memorizzati
nella casella di testo associata al campo Id2 il valore di IdT che andrai a
prelevare appunto dall'altra maschera, insomma qualcosa del genere:
Me!Id2 = Forms!NomeMascheraTitoli!IdT
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------


Grazie per la risposta. Il motivo per cui utilizzo 2 sottomascehre
anzichè maschera/sottomaschera è presto detto: ho molti campi in
entrambe le tabelle ed una gestione tradizionale mi diventa
difficilmente gestibile.
Pensavo ci fosse qualche meccanismo di gestione analogo a quello delle
maschere/sottomaschere. Comunque con l'indicazione che mi hai fornito
funziona correttamente. Grazie di nuovo :-)) Ciao
(Spero di aver postato correttamente, in caso contrrio chiedo già
scusa al NG).

 difficilmente gestibile.
Normalmente in questi casi si lascia la gestione canonica della
maschera/sottomaschera che gestirà automaticamente tutte le problematiche
relative alle relazioni tra le due tabelle visualizzando solo i campi più
importanti, poi se necessario si apre una maschera accessoria che dettaglia
meglio i dati del record corrente della sottomaschera sincronizzata con il
record corrente della maschera principale.
[CUT]
