Newsgroup: it.comp.appl.access
Titolo: impedire la duplicazione

Perdonate la domanda ma sono alle prime armi...
E' possibile settare gli indici in modo che in una tabella si possa impedire 
l'immissione di valori duplicati della
combinazione degli stessi?
mi spiego: ho tre campi a, b e c, vorrei fare in modo che il valore singolo 
di ciascun campo possa essere duplicato ma
non possa essere inserito due volte un record dove corrispondono tutti e tre 
i valori
se esempio ho gia inserito in tabella questi valori
record ### | a | b | c
----------------------
record #01 | 1 | 1 | 1
record #02 | 1 | 1 | 2
record #03 | 1 | 2 | 3
record #04 | 2 | 2 | 2
record #05 | 2 | 2 | 3
potrò inserire sucessivamente
record #11 | 3 | 2 | 1
record #12 | 3 | 2 | 3
ma non
record #13 | 1 | 1 | 2 perchè duplicato del record #02
Vi ringrazio e Vi auguro buona serata. 

 ha scritto nel messaggio 
news:UJY2i.10449$%k.5...@twister2.libero.it...

Creati un campo calcolato A+B+C e metti quello come univoco
-- 
--
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Segrate (MI), 7-8 giugno 2007

 Creati un campo calcolato A+B+C e metti quello come univoco
Perche' l'indice sulle tre colonne, di tipo univoco, e' da scartare?
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:zZY2i.52039$281....@tornado.fastwebnet.it...

no, ma non lo amo moltissimo.
In ogni caso a supporto di PiGreco:
seleziona i tre campi e inserisci la chiave numerica


 ha scritto nel messaggio 
news:f2hmsk$4rd$1...@tdi.cu.mi.it...

Scusate ma mi sono perso...
perdonate la mia ignoranza.
il campo a come b e c non sono univoci in quanto, singolarmente, vorrei che 
possono essere duplicati infinite volte a patto che varino i valori degli 
altri due campi
Nell'esempio iniziale il valore a assume piů volte il valore 1 ma in ogni 
record variano i valori b e/o c
se in tabella esiste
record ### | a | b | c
----------------------
record #01 | 1 | 1 | 1
vorrei poter inserire a=1, b=qualunquevalore, c=qualunquevalore aldi fuori 
di 1 se b=1 (in quanto duplicherebbe il record#1)
vorrei poter inserire a=1, b=qualunquevalore aldi fuori di 1 se c=1, 
c=qualunquevalore (in quanto duplicherebbe il record#1)
Impedire cioč che la sequenza a=1 b=1 c=1 si ripeta e cosě via per tutte le 
altre sequenze possibili.
Ciao e grazie per l'interessamento. 

 Ciao e grazie per l'interessamento.
Probabilmente dico una caz**ta perché io normalmente posto domande e ottengo 
gentilmente risposte e non viversa -:). Cmq visto che non costa nulla provo. 
Io credo che farei un campo nuovo (d) dove considero a, b, c come testo, 
quindi faccio in modo che non sia possibile duplicare questo nuovo campo 

 no, ma non lo amo moltissimo.
pur essendo di larghe vedute comprendo che e' difficile innamorarsi di 
un indice multicolonna, a me pero' anche gli id counter non stimolano 
una grande passione.
spesso la "mission" e' confusa sono carenti in "identity" ed anche il 
"naming" mi suona strano (ho cliccato!)
--
aca
-- 
ac
y-1=x

 quindi faccio in modo che non sia possibile duplicare questo nuovo campo 
Io continuo a ritenere che si fa prima a definire un indice multicolonna 
di tipo univoco. ;<)
-- 
ac
y-1=x

>
[cut]
il quesito era ed e' chiaro. Hai avuto 2 risposte
1) Definisci un campo aggiuntivo in cui concateni i tre valori e lo 
definisci come indice che non ammette duplicati
2) Crei un indice che non ammette duplicati indicando, per l'indice, i 
tre campi
ne aggiungo un'altra nel caso ti stiano antipatici gli indici
3) nella before update di form controlli (magari con una dlookup) che 
non sia presente in tabella un record con gli stessi valori per a ; b; c;
--
ac
-- 
ac
y-1=x

 a
Prova così:
crea un ulteriore campo e lo chiami per esempio keydelrecord
fai in modo che questo campo venga aggiornato concatenando i tre valori che
ti interessano, per esempio sull'evento "SuUscita"dai campi interessati - o
"PrimaDiAggiornare"
nell'aggiornamento del record fai una dlookup che cerchi il valore del campo
keydelrecord per vedere se già
esiste un record simile e te lo gestisci come preferisci, ovvero ti fai
avverti da una msgbox, stoppi l'esecuzione del programma...In alternativa
puoi fare un query che cerchi nella tabella se già esiste un record che ha
quei campi valorizzati,mettendo come parametro il valore
campo1=forms!miaforms!miocampo1, campo2=forms!miaforms!miocampo2...: in
questo caso, conti i record presenti nella query:se sono + di 1 vuol dire
che il valore già c'è...
Forse usando il dlookup il tutto sarà un pò lento, però sta a te decidere se
è più importante la velocità o la l'integrità dei tuoi dati....;-)
In ogni caso...la soluzione della chiave univoca sui tre campi forse è la
migliore...
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 nuovo campo
Oh matteo, l'ho già detto io...
-- 
--
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access


 di tipo univoco. ;<)
oltre a fare prima si rispetta anche la prima forma normale.
:-)
-- 
Giorgio Rancati
[Office Access MVP] 

Grazie a tutti quanti :) 

 :-)
Ciao Giorgio. Non mi parlare di cose complicate ;<)
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:8E03i.150$q92...@tornado.fastwebnet.it...

Certo ragazzi
il problema è se uno su tre è nullo
-- 
--
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access


 il problema è se uno su tre è nullo
Se si sceglie di usare la chiave primaria come da tuo suggerimento, è 
impossibile avere valori Null su uno dei tre campi.
Se si sceglie di usare un indice univoco basta inserire Is Not Null nella 
proprietà "Valido Se" dei tre campi
