Newsgroup: it.comp.appl.access
Titolo: Evitare duplicazione di combinazione di dati

Ciao ciao,
ho una tabella, collegata ad una maschera:
tabella:
campo "num"
campo "nome"
form:
controllo con origine "num"
controllo con origine "nome"
i controlli di testo della form scrivono i dati nei campi corrispondenti 
della tabella... ma come faccio ad evitare (avvisando con un msgbox ad 
esempio) che la coppia num-nome venga ripetuta?
Se nella tabella ho
num    nome
15     marco
20     anna
34     andrea
15     marco      <--- errore perchï¿œ la coppia 15-marco c'ï¿œ giï¿œ!!
12     anna
20     andrea
.............
sicuramente si deve scansire la tabella dall'inizio alla fine leggendo 
num e nome e poi con if indicare all'utente che la coppia esiste giï¿œ...
Mi potete aiutare, per favore?
Grazie
Marco


una chiave combinata sui due campi nella tabella?
ciao
max 

 max 
Intendi fare un campo in piï¿œ in cui c'ï¿œ num+nome concatenati? Cioï¿œ 
15marco...
Ok, ma il mio problema ï¿œ piï¿œ che altro come dire: "Scorri i record uno 
alla volta e trova la chiave 15marco: se la trovi errore!"
Direi che mi mancano nozioni di analisi del db... hai qualche link, per 
favore?
Grazie
Marco

 favore?
vedi: evitare duplicati  
www.donkarl.com/it?FAQ4.25
ciao
Daniele

 
Ora me lo studio meglio, ma mi sembra la strada giusta!!!!
Grazie
Marco

 Daniele
Ecco, copiando il codice di Karl (grazie!!!) cosa ho scritto (ovviamente 
gli a capo sono giusti perchï¿œ non dï¿œ errore):
Private Sub nfatt_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("nfatt", "tblFatture", "nfatt = " &
Str(Me!nfatt))) And Me!nfatt <> Nz(Me!nfatt.oldValue) _
And Not IsNull(DLookup("forn", "tblFatture", "forn = " & Chr$(34) & 
Me!forn & Chr$(34))) And Me!forn <> Nz(Me!forn.oldValue) Then
   MsgBox Me!nfatt & " Giï¿œ esiste.", vbOKOnly, "Duplicato!"
   Cancel = True
End If
End Sub
Preticamente ï¿œ uguale a quello di Karl, ma ho aggiunto anche un'altra 
riga in cui il dlookup cerca nell'altro campo... usando un AND gli dico:
se trovi un valore numerico uguale a quello inserito ed un valore testo 
uguale a quello inserito fai il msgbox... ma sembra che cerchi solo 
nella parte numerica...
Ma forse forse... devo dirgli di cercare nello stesso record in cui ha 
trovato il valore numerico duplicato...
Quindi mi serve sapere il numero del record e passarlo a qualche 
funzione che rifaccia la ricerca solo nel record specificato...
Mi sa che non ci arrivo!!!!! :-(((
Ciao

 riga in cui il dlookup cerca nell'altro campo... usando un AND gli dico:
Male!
if dcount("forn","tblFatture", "nfatt =" & varFatt & " and forn=" & 
varForn) > 0 then ..... duplicato
--
ac

 ...
Per controllare due campi nello stesso record devi combinare
il criterio in un solo DLookUp. Prova cosï¿œ:
If Not IsNull(DLookup("nfatt", "tblFatture", _
    "nfatt = " & Me!nfatt & _
    " And forn = " & Chr$(34) & Me!forn & Chr$(34))) _
    And Me!nfatt <> Nz(Me!nfatt.OldValue) _
    And Me!forn <> Nz(Me!forn.OldValue) Then
   MsgBox Me!nfatt & " Giï¿œ esiste.", vbOKOnly, "Duplicato!"
   Cancel = True
End If
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 

 End If
Ovviamente funziona!!!!
Grazie mille!!!

 varForn) > 0 then ..... duplicato
Quindi il DCOUNT mi serve se ad esempio: voglio sapere quante volte son 
entrato in ufficio in un mese... se uso una tabella fatta da due campi
tblIngressi
data   nome
10/11  marco
11/11  marco
12/11  marco
13/11  marco
14/11  marco
14/11  anna
14/11  maria
15/11  marco
15/11  anna
15/11  maria
...
Usando come criterio il campo nome, posso sapere il numero di ingressi.
GIUSTO?
Grazie mille
Marco