Newsgroup: it.comp.appl.access
Titolo: integrità referenziale

ciao a tutti
ho inserito nella maschera una combo per lo sconto,
aggiungendo idPercSconto nella TbPrincipale e collegandola con
l'idPercSconto della TbPercSconto
ma nelle relazioni se cerco di spuntare le tre checkbox
ho quest'errore:
impossibile creare la relazione e applicare l'integrità referenziale
ecc. ecc.
Vuol dire che ho impostato qualcosa di errato?
Grazie

 wrote in news:99a2947f-11d9-4ec3-88e8-
81e4bf...@f15g2000pro.googlegroups.com
:

a naso, due possiblita':
- hai gia' dei dati nella tbprincipale con valore per il campo idpercsconto 
nullo oppure non presente in tbpercsconto
- i tipi di dati dei due campi sono diversi
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 
81e4bf487...@f15g2000pro.googlegroups.com
:

ciao Paolo
la tbprincipale.idpercsconto è popolata ma con valori da 0 a 4 in
tutti i campi, collegata al'idpercsconto della  tbpercsconto
per il secondo punto come faccio ad accertarmi?
questo vuol dire che qualcosa non va bene?
Grazie


Nell'integrita' referenziale, la tabella dal lato 1 (TbPercSconto?
[1]) deve contenere tutte le chiavi che si trovano nel campo
corrispondente della tabella dal lato N (TbPrincipale? [1]).
Nel tuo caso dici che la tabella dal lato N contiene chiavi con valori
da 0 a 4, ma non ci dici nulla delle chiavi presenti nella tabella dal
lato 1.
Quando mi capita di dover normalizzare un db a posteriori (nel senso
che altri lo fanno ed io lo prendo "a posteriori" [2] ) mi apro la
tabella 1 e vado all'ultimo record, poi apro la tabella N e copio la
colonna (o le colonne) della relazione e poi incollo tutti i nuovi
record nella tabella 1.
Cosi' facendo scopro quali erano i dati che violavano la relazione (a
volte tocca notificare gli utenti delle cretinate che hanno fatto).
Da ultimo, dato che la tabella 1 contiene tutti i dati referenziati
nella N, posso creare la relazione con vincolo di integrita'
referenziale senza problemi.
HTH
Popi
[1] *Se* ho capito bene la tua descrizione.
[2] Lo prendo a posteriori ... in carico!!! Cos'avevate pensato,
brutti maniaci maliziosi??? :D


innanzi tutto grazie per l'aiuto
ti descrivo quello che ho:
TbPrincipale:
idPercSconto tipo dati Numerico, intero lungo, posizione decimali
automatiche, richiesto no, indicizzato (duplicati ammessi)
collegata a TbPercSconto.idPercSconto
Nome Campo IdPercSconto, Tipo dati Contatore, intero lungo, nuovi
valori incremento, indicizzato si (duplicati non ammessi)
e nome Campo PercSconto, Tipo dati numerico, Precisione doppia,
Formato pecentuale, Decimali Automatiche, Etichetta %Sconto,
valido se <1, richiesto no, indicizzato no.
Grazie


Come dire che nella tabella TbPercSconto (lato 1) definisci le tue
percentuali e nella tabella TbPrincipale (lato N) nel campo
idPercSconto troverai solo valori che esistono nel campo idPercSconto
della tabella TbPercSconto.
Popi


Ciao Popi e grazie
quindi copio nella TbPrincipale (lato N) l'idPercSconto della
TbPerSconto
Giusto?


Se con "copio" intendi "nel campo idPercSconto dei record della
TbPrincipale metto il codice dello sconto (definito nella TbPerSconto)
che si applica a ciascun record" allora si' e' cosi'.
Popi


Ciao Popi
bisogna che facciamo un passo indietro e che partiamo come se non
avessi ancora fatto nulla.
Tbprincipale
con idPerSconto che mi servirà per creare il collegamento
al'idPercSconto della
TbPercSconto
entrambi gli idPercSconto devono essere della stessa natura
dopodichè se ho nella tbPercSconto il nomecampo Sconto
Tipo dati numerico, precisione doppia, Formato Percentuale,
Posizione decimali automatiche, valido se <1, richiesto no e
indicizzato no
dovrebbe andare bene.
o mi sbaglio?


Domanda (Acc dannaz malediz ... perche' non ci ho pensato prima?):
perche' non provi a svuotare le tabelle (tanto contengono dati di test
e comunque hai il backup, vero?) poi crei la relazione, ed a quel
punto cominci a rimetterci dentro i dati e vedi cosa succede?
Popi


ciao Popi
ok, ma prima volevo chiederti
nella TbPercSconto che ho modificato in TbSconto, ora ho
IdSconto Contatore (chiave primaria)
Sconto numerico, precisione doppia, formato percentuale, valido se <1,
richiesto no, indicizzato no.
Va bene?
Grazie


AFAIK direi di si'.
Fai la prova che ti ho detto, popolando prima la tabella TbSconto e
poi la TbPrincipale: vedrai che alcuni record della TbPrincipale non
verranno incollati perche' il campo dell'idPercSconto contengono
chiavi non valide (cioe' non esistenti nella TbSconto).
Popi


esatto, hai ragione.
Ora come si fa?


Come gia' ti dicevo, i record che non sono stati incollati contengono
degli idPercSconto che non esistono nella tabella TbSconto, quindi
dovrai crearti i record corrispondenti a quegli sconti e POI potrai
incollarli.
Popi


Ciao Popi
se non mi aiuti non ne vengo fuori.
Ti chiedo cortesemente di elencarmi
i campi da inserire nella TbPrincipale
(dove io ho idSconto)
per poi collegarla alla tbsconto.idsconto
così strutturata:
IdSconto, contatore, intero lungo, incremento ecc
Sconto, numerico, Precisione doppia, formato:Percentuale,
decimali:Automatiche, Valido se:<1
Grazie per l'aiuto


Uh? Nella TbPrincipale ci deve essere SOLO idSconto!
+--------------+      +----------+
| TbPrincipale |      | TbSconti |
+--------------+      +----------+
| .....        |      | Sconto   |
| idSconto     |1----N| idSconto |
| .....        |      | .....    |
Popi


ciao Popi
ok
idsconto che deve essere nella tbsconto contatore intero lungo con
chiave primaria e poi sconto con le percentuali,
mentre nella tbprincipale numerico
intero lungo, decimali automatiche, richiesto no, indicizzato
si(duplicati ammessi)
Ma non funziona
Perchè?
Grazie ancora


"non funziona" ... mi sembra un po' poco come descrizione del
problema.
Se hai la possibilita' di mettere il tuo mdb in un'area che mi sia
accessibile (dal lavoro non posso accedere alla mail su yahoo, e posso
accedere a siti "non istituzionali" solo fra le 13 e le 14) posso
provare a dargli un'occhiata.
Popi


ciao Popi e grazie
dammi il tuo indirizzo email

 dammi il tuo indirizzo email
Chi gioca in prima base?
Popi