Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Problema con relazioni tabelle

44 views
Skip to first unread message

Ilario

unread,
Mar 21, 2005, 12:23:51 PM3/21/05
to
Ciao a tutti
ho questo problema:
ho una tabella ddt con una tabella relazionata uno a molti con un campo
dettaglioid numerico intero lungo, dettaglioddt. da una form con sotto
form non associate tramite codice vorrei inserire i dati nella tabella,
il problema si pone nel mettere nel campo dettaglioid della tabella
dettaglio ddt lo stesso numero che ho nel campo id (contatore) nella
tabella ddt.
Come fare?

Grazie

Ilario

Sandro

unread,
Mar 21, 2005, 12:37:48 PM3/21/05
to

"Ilario" <livae...@hotmail.it> ha scritto nel messaggio
news:HqD%d.24602$zZ1.6...@twister1.libero.it...

Ciao Ilario,
selezioni la sottomaschera e nella scheda dati collega a campi secondati e
campi master ci metti il nome della chiave esterna che relaziona 1 a molti
le due tabelle.(dettaglioId)
Mi pare però che questo lo faccia access in automatico.
Ciao


Sandro

unread,
Mar 21, 2005, 2:42:23 PM3/21/05
to

"Ilario" <livae...@hotmail.it> ha scritto nel messaggio
news:faF%d.4726$IN.1...@twister2.libero.it...
> Sandro ha scritto:
> Non vorrei dire una fesseria, ma avendo il db su altro ha non posso
> provare subito, ma mi pare di ricordare che all'atto del salvataggio dei
> dati sulla tabella lato molti appaia un messaggio di errore con la
> mancanza del dettaglioid.
>
> Grazie guarderò meglio
>
> Ilario

Ciao Ilario,
provo ad indovinare: l'errore che riscontri è :impossibile
aggiungere/modificare il record. Nella tabella T_.... è necessario un record
correlato.
se dovesse essere questo significa che stai violando l'integrità
referenziale tra tabelle.
Devi prima inserire nella tabella il record del lato uno e poi quello sul
lato molti.

Ciao.


Ilario

unread,
Mar 21, 2005, 2:22:51 PM3/21/05
to
Sandro ha scritto:

Ilario

unread,
Mar 22, 2005, 12:55:54 PM3/22/05
to

Esatto il messaggio è quello, quindi da codice, prima salvo i dati sulla
tabella ddt, lasciando che il campo contatore id aggiorni da solo il
numero, poi il codice dovrà salvare i dati sulla tabella dettaglio_ddt
lasciando ad access l'inserimento del campo dettaglioid? (lato molti
della relazione con la tabella ddt)

Ilario

Sandro

unread,
Mar 22, 2005, 5:13:54 PM3/22/05
to
[cut]

Ciao Ilario, in pratica se ho ben capito vorresti evitare la comparsa del
messaggio di errore.
Allora secondo me, devi innanzi tutto eliminare l'integrità referenziale tra
le tabelle.
Poi devi eseguire un test per verificare il contenuto del controllo che
utilizzi per popolare la tabella e impedire l'aggiunta del record.
se indichi meglio come popoli la tabella magari ci può provare a darti
qualche ulteriore suggerimento, e anche la struttura delle tabelle non
guasta

Se utilizzi una combobox che ha come colonna associata un numerico puoi fare
ad esempio così :

Private Sub tuocontrollo_AfterUpdate()

If Me.tuaCombo = 0 Then
MsgBox ("non puoi ")
Me.AllowAdditions = False
Else
Me.AllowAdditions = True
End If

End Sub

Non è detto che sia la soluzione ideale, ma se spieghi come è fatta la
sottomaschera, quali controlli ci sono, come popoli la tabella che sta
sotto.... è meglio.

Ilario

unread,
Mar 23, 2005, 1:18:26 PM3/23/05
to
Sandro ha scritto:
Hai ragione

adesso il codice a memoria nonlo ricordo essendo agli inizi per adesso
copio......

Con DAO apro un recordset sulla tabella ddt e poi con una serie di

rst!data = me!data
rst!cliente = me!cliente

o qualcosa del genere non ricordo bene ma il codice è corretto perchè
popola la tabella quando provo solo con la tabella lato uno della relazione.

poi apro un altro recordset per i dati della tabella dettaglio_ddt e con
una ulteriore serie di

me!quantità = forms!sottoform!quantità

i quali funzionano anche loro.

Quindi da codice salvo prima i dati della tabella ddt epoi quelli della
tabella dettaglio_ddt, ma non riesco a terminare il tutto in quanto
appare quel messaggio di errore.
Da codice non imposto il valore di detttaglio_id cioè il campo molti
della relazione sulla tabella dettaglio_ddt e penso che tutto il
problemea sia qui!

Ilario

Sandro

unread,
Mar 23, 2005, 3:15:56 PM3/23/05
to

"Ilario" <livae...@hotmail.it> ha scritto nel messaggio
news:Spi0e.27874$zZ1.7...@twister1.libero.it...
[cut]

Ciao Ilario,

ricapitolo un attimo.

Allora hai una tabella ddt che avrà ad esempio :

id_ddt chiave primaria conatatore

data_DDt tipo/dataora

numeroDDt testo

MezzoTrasporto Testo

N°colli testo

Poi una tabella articoli cosi costituita

Id_articolo chiave primaria conatatore

Colore testo

Cliente testo

Poi una tabella dettaglio ddt che ti servira da tabella di raccordo per la
relazione molti a molti che diventano 2 1 a molti in cui avari ad esempio

Id_dettaglioDdt chiave_primaria conatatore

Id_articolo chiave esterna

Id_ddt chiave esterna

Quantità numerico

E magari altri campi

Creando una form sulla tabella ddt e una su dettaglio (quest'ultima sarà la
subform all'interno della form ddt, inserendo i vari controlli nelle form,
non serve secondo me aprire recordset per popolare le tabelle, per questo ti
chiedevo di postare la struttura delle tabelle.

In questo caso popolando la tabella di dettaglio ddt con una combo box che
avrà come origine dati una select impostata sulla tabella articoli, le
chiavi esterne non potranno che essere inserite nella tabella di
raccordo/appoggio.

Ti ho fatto un altro esempio, ma se non ci dici come sono fatte queste
tabelle..non andiamo avanti.

Ciao a risentirti presto.


Ilario

unread,
Mar 24, 2005, 12:31:50 PM3/24/05
to
Sandro ha scritto:
Provo riassumere le tabelle

tab ddt

id = contatore (lato uno della relazione)
cliente = numerico
data = data/ora
n_ddt = numerico
ecc......


tab dettaglio_ddt

id contatore
dettaglio_id = numerico intero lungo duplicati ammessi (lato molti della
relazione )
descrizione = numerico
quantità = numerico
ecc....

Ora partendo da una maschera ( ddt non associata) e sottomaschera
(dettaglio_ddt non associata) con una routine dao popolo, cioè tento, le
tabelle, come descritto nel post precedente.
Il problema è che non so che valore dare a dettaglio_id, in quanto non
conosco il valore di id nella tabella ddt.

Spero di essere stato un po + chiaro


Ilario

Sandro

unread,
Mar 24, 2005, 2:25:40 PM3/24/05
to

"Ilario" <livae...@hotmail.it> ha scritto nel messaggio
news:aQC0e.9229$IN.2...@twister2.libero.it...

> Sandro ha scritto:
> > "Ilario" <livae...@hotmail.it> ha scritto nel messaggio
> > news:Spi0e.27874$zZ1.7...@twister1.libero.it...
> > [cut]

Ciao Illario,

> Provo riassumere le tabelle
>
> tab ddt
>
> id = contatore (lato uno della relazione)
> cliente = numerico
> data = data/ora
> n_ddt = numerico
> ecc......

> tab dettaglio_ddt
>
> id contatore
> dettaglio_id = numerico intero lungo duplicati ammessi (lato molti della
> relazione )
> descrizione = numerico
> quantità = numerico
> ecc....

> Ora partendo da una maschera ( ddt non associata) e sottomaschera
> (dettaglio_ddt non associata) con una routine dao popolo, cioè tento, le
> tabelle, come descritto nel post precedente.
> Il problema è che non so che valore dare a dettaglio_id, in quanto non
> conosco il valore di id nella tabella ddt.
>
> Spero di essere stato un po + chiaro

Io la vedo in questo modo:

con la stessa data posso emettere piu ddt, che possono evere più
descrizioni/ articoli (stiamo parlando di documenti di trasporto ?) ==>


relazione molti a molti che diventano 2 1 a molti

quindi creo una tabella che mi conterrà i dati delle descrizioni :

id_descrizione chiave primaria/contatore
descrizione testo

poi una relativa ai dati del ddt

id_ddt chiave primaria /contatore
numeroDdt testo (non numerico : ci devi fare calcoli ?)
dataDdt data/ora
numero colli testo
vettore testo
cliente testo (parli di ddt qui non ci va fornitore/terzista ?)

poi una tabella di appoggio relativa alla relazione molti a molti che non è
gestita da access e di conseguenza devi creare 2 1 a molti :

id_raccordo chiavePrimaria/contatore
id_descrizione numerico (imposti una ricerca guidata in modo da
popolare le descrizioni in questa tabella con una
combobox con 2 colonne di
cui la prima di larghezza 0 la seconda 5 cosi visualizi solo il
testo)

id_data_ddt numerico (imposti un'altra ricerca guidata sulla tabella ddt
dove stavolta visualiizzi la data)

quantità numerico (la quantità va messa in questa tabella)
numero ordine testo (se c'è)

impostando ora una maschera sulla tabella ddt e una sul raccordo, che
diventerà la sottomaschera della maschera ddt, quando scrivi un record nuovo
nella maschera ddt (e relativa tabella), ti creera il riferimento in
automatico sulla tabella di raccordo e non avrai problemi di scrivere codici
o altro.

Secondo me il database deve essere impostato in questo modo.
Non capisco il motivo che ti spinge a scrivere codice per popolare tabella
in una situzione come la tua.
Se vuoi mandarmi un demo del tuo database, ovviamente senza dati, forse ne
usciamo prima, perchè oltre a questo post non saprei proprio che altro
consigliarti.
L'integrità referenziale io la lascerei altrimenti rischi di trovarti con
delle descrizioni "orfane" delle rispettive data e numero ddt.
Puoi ad esempio mantenere l'impostazione dell'integritò referenziale e
aggiungere numero a data ddt in automatico all'aggiunta di ogni nuovo
record.

Ti auguro Buona Pasqua.
Ciao


Ilario

unread,
Mar 25, 2005, 3:16:07 PM3/25/05
to
Grazie di tutto, buona pasqua anche a te, adesso con calma leggo la tua
idea.
Ilario
0 new messages