Grazie
Ilario
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
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.
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
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.
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
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.
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
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