Condividi tramite

[Access 2007] - Inserimento dati da sottomaschera in tabelle correlate

Anonimo
2010-10-12T09:34:29+00:00

Salve a tutti, questo è il mio primo post e colgo l'occasione per salutare la comunità :-).

Veniamo al mio problema. Sto realizzando un db in access per l'azienda in cui lavoro, che si occupa di fornire servizi voip.

Il db dovrebbe gestire i contratti che l'azienda stipula con i vari clienti ma non solo, ogni contratto viene stipulato per l'attivazione di una lina, e ogni linea legata al contratto ha i propri parametri.

Ecco cosa ho fatto, ho creato la tabella contratti(Id_contratto, [Dati del cliente], ....., Attiva), id_contratto è chiave primaria, [dati cliente] sono un insieme di campi con l'anagrafica del cliente, e Attiva è chiave esterna per la tabella attiva che contiene i dati della relativa linea.

Quindi, Attiva(Id_attivazione, nuova linea, [altri campi]), id attivazione è chiave primaria, legata con attiva in contratti.

Concettualmente ad un contratto può corrispondere solo una linea, e ad una linea corrisponde un solo contratto, bene. Però già si presenta il primo problema perchè creando graficamente la relazione, questa viene vista come 1 a molti, tengo a precisare che non è questo il problema principale, perchè chi userà il programma sa cosa deve fare, però se lo risolviamo è meglio.

Veniamo invece al mio problema, una volta realizzate le tabelle, sono passato alla creazione delle maschere, ho creato la maschera contratti con tutti i campi, ho cancellato la txt attiva, e ho inserito una sottomaschera realizzata con la tabella attiva tramite la creazione guidata, con campi master Attiva e campo secondario Id_Attivazione. Il problema è il seguente compilando il contratto dalla maschera immetto i vari campi e poi passo nella sottomaschera a inserire i dati della linea, solo che nella relativa tabella(contratti) il riferimento non viene inserito e non capisco il perchè.

Facciamo un esempio, inserisco un contratto per Tizio, passo a specificare la linea con id ad es 1 e i relativi campi. Però se passo a controllare nella tabella contratti, nel campo attiva non compare il codice della relativa attivazione, cioè 1 in questo caso. In pratica è come se non scrivesse nella tabella.

Invece se opero sulle tabelle, e creo prima la linea su Attiva, nella tabella contratti nel campo attiva compare la casella combinata in cui trovo tutti gli id_attivazione e posso scegliere quale mettere, ma non è cosi che deve funzionare, l'inserimento devo farlo dalla maschera principale per comodita, in modo da non dover aprire più tabelle contemporaneamente.

Spero di essermi spiegato bene, in ogni caso domandate pure.

Ciao e grazie per essere arrivati in fondo xD

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2010-10-12T18:45:49+00:00

Ciao M4_rco,

Puoi risolvere così:

Nella tabella Contratti elimina il campo Attiva.

Nella tabella Attiva elimina il campo Id_Attivazione e al suo posto inserisci Id_Contratto (Chiave Pimaria)

Vai nelle relazioni del database e collega Id_Contratto di Contratti con Id_Contratto di Attiva, vedrai che verrà mostrata la relazione 1 a 1.

Poi nella sottomaschera imposta per il campo Master Id_Contratto e per i campi secondati sempre Id_Contratto.

Quando inserirai i dati nella sottomaschera verrà assunto automaticamente l'Id_Contratto della maschera principale.

In sostanza è la stessa procedura che si usa per la relazione uno a molti, con la differenza che la seconda tabella è collegata alla prima tramite una chiave primaria che determina la relazione 1 a 1.

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

1 risposta aggiuntiva

Ordina per: Più utili
  1. Anonimo
    2010-10-12T20:20:33+00:00

    Si infatti già nel pomeriggio sono arrivato alla stessa soluzione, il problema era appunto "concettuale" xD

    Grazie 1000 dell'aiuto!!

    La risposta è stata utile?

    0 commenti Nessun commento