Newsgroup: it.comp.appl.access
Titolo: Problema con relazioni tabelle

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

 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

 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.

Sandro ha scritto:




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

[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.

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

 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.

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

 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


Grazie di tutto, buona pasqua anche a te, adesso con calma leggo la tua 
idea.
Ilario