Access & C.

Maschere Collegate e Integrità referenziale

Salvatore mi pone un problema interessante e ricorrente: quello delle maschere collegate. In realtà questa dizione non è appropriata perchè esistono maschere collegate a tabelle e tabelle in relazione tra loro. Se per maschere collegate si intendono maschere che richiamino altre che, a loro volta, creino o visualizzino record associati, allora bisogna prendere degli accorgimenti affinchè tutto funzioni correttamente e la parola magica è, in questi casi, "integrità referenziale".

- - - -

Ciao Michele, cerco di spiegarti meglio le mie difficoltà : in pratica io ho una maschera "MSC1", nella quale vi è una sottomaschera SMSC1 nella quale per ogni record vi è un bottone che mi permette di aprire un maschera collegata MSC2.

Il problema nasce proprio nella maschera collegata MSC2 perchè nel momento in cui io cerco di creare un nuovo record nella maschera MSC2, il buon Access non si accorge che il nuovo record è correlato al record della sottomaschera SMSC1 infatti Access mi segnala che nella SMSC1 è necessario un record correlato. In pratica la maschera MSC2 non riesce ad ereditare la chiave primaria della sottomaschera SMC1.

Per completezza aggiungo che tutte le maschere (MSC1-SMC1-MSC2) sono collegate tra loro da sinistra verso destra con una relazione Uno a Molti. Spero di essere riuscito a farti capire il problema. Ti ringrazio e spero tu possa illuminarmi in qualche modo. Salvatore

Risposta

Carissimo Salvatore,
io ho capito che hai una situazione come questa:
Hai una maschera MSC1 collegata ad una tabella Tab1.
Tab1 è in relazione 1-Molti con Tab2. Dunque per visualizzare tutti i record di Tab2 associati ad un record di Tab1 hai creato una maschera SMSC1, associata alla tabella Tab2, che visualizzi come sottomaschera in MSC1. Nella maschera SMSC1 hai un bottone mediante il quale, premendolo, si apre una nuova maschera MSC2 associata ad una tabella Tab3 che dovrebbe creare in Tab3 un nuovo record. Tab2 è in relazione 1-Molti con Tab3.
Se questa mia interpretazione è corretta, si deve andare ad esaminare la struttura del database con particolare riguardo ad i vincoli di integrità referenziale.

Tu mi scrivi: "Per completezza aggiungo che tutte le maschere (MSC1-SMC1-MSC2) sono collegate tra loro da sinistra verso destra con una relazione Uno a Molti".
Permettimi di correggerti: sarebbe più corretto dire che le tabelle associate a MSC1-SMC1-MSC2 sono collegate 1-molti. Dunque Tab1 -> Tab2 -> Tab3.
Così come è stato strutturato il db è possibile creare un record di Tab3 solo specificando, quale chiave esterna del vincolo di integrità referenziale, la chiave primaria di Tab2 (quella associata a SMC1).
Soluzione:
A) verifica che vi sia integrità referenziale corretta tra Tab3 e Tab2 (in pratica in Tab3 deve esistere un campo, detto chiave esterna, che fa riferimento alla chiave primaria di Tab2);
B) Nel momento in cui premi il tasto di SMSC1 per aprire la maschera MSC2, imposti il valore del campo "chiave esterna" di MSC2 col valore del campo chiave primaria di SMC1.
In Altre parole, avrai quialcosa di simile a:
(Nota bene: il codice che ti scrivo non è stato verificato con il debug perchè è stato inventato, quindi potresti doverlo correggere con i reali valori dei controlli delle tue maschere)

' Codice di riferimento del modulo della form 'SMC1'
sub Button_Click()
Form_MSC2.ChiaveEsterna.value = me.Chiave.value
DoCmd.OpenForm "MSC2" ........

End Sub

Inserisci un commento   |   Indietro

[1] Nick Name: Arkham00     Data: 11/04/2008 15:24:35   
Michele, sono capitato casualmente sul tuo sito perchè cercavo un blog    

  [da 1 a 1 di 1 commenti]     |   Indietro

Inserisci un commento

Nick: e-mail:

web:

Commento: