Newsgroup: it.comp.appl.access
Titolo: Re: Impedire record duplicati


Ciao FID
oltre ai suggerimenti avuti da Cara e Baraldi puoi risolvere
direttamente nella struttura della tabella,
impostando un indice univoco per nome e cognome.
vai in struttura della tabella e clicca su indici .
guarda l'help :
impedire l'immissione di valori duplicati in una combinazione di campi
---
Daniele 


Su evento BeforeUpdate esegui un controllo con Dcount relativo
a Nome e Cognome, quindi informa l'utente che il record è
presente e condizionane la scelta di accettarlo o eliminarlo.
Private Sub NomeForm_BeforeUpdate(Cancel as integer)
    dim intCount    as integer
    dim strMsg      as string
    intCount=DCount("[Nome]",_
                             "NomeTabella",_
                             "[Nome]=" & chr(34) & Me.Nome & chr(34) & _
                             " AND [Cognome]=" & chr(34) & me.Cognome &
chr(34))
    If intcount=0 then cancel=false:Exit Sub
    strMsg=msgbox("Record esistente lo confrmi..?",vbYesNo)
    cancel=(strMsg=vbno)
End sub
Ciao
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.mantuanet.it/alessandro.baraldi/
---------------------------------------------------------------------------


Ovviamente si, speriamo sia un CodiceFiscale o P.I.V.A
o Counter...!


 End sub
Se cambi un qualsiasi campo in un vecchio record ti dà sempre
il messaggio. Per questo IMO è meglio di paragonare anche con
OldValue dei controlli. Come mostrato nella variante 2 di
www.donkarl.com/it
 4.25 Evitare duplicati
-- 
cu
Karl
*********
Access FAQ: 
www.donkarl.com/it
+info sulla prima Conferenza Italiana per Sviluppatori di Access (CISA1) 

 altri suggerimenti.
[CUT]
A mio avviso il metodo migliore rimane quello di Alessandro:
Può verificarsi la necessità di dover inserire il soggetto e di non disporre
di altri dati ad esempio la data di nascita che comunque non garantisce
l'univocità, come del resto dici tu stessa.
A questo punto l'inserimento rimarrebbe vincolato alla disponibilità della
data di nascita che potrebbe invece essere aggiunta in un secondo momento.

 @Alex (Alessandro Baraldi)


 
http://tinyurl.com/5qr92
--
a.cara

 Daniele
In questo caso non è la soluzione ideale...!
Supponi che un'anagrafica abbia questa impostazione.
Il Signor "CIDI DANIELE" omonimo del sig. "CIDI DANIELE"
come farebbe ad essere registrato ugualmente....!!!
Lui spergiura di essere l'originale e pure l'altro....!!
Con l'imposizione di univocità che accennavi occorre che
il 2° cambi nome "CIDI DANIELA" ad esempio....!
;-)
Scherzi a parte spero di averti chiarito l'inghippo....!
-- 
@Alex (Alessandro Baraldi)



-- 


 ha scritto nel messaggio
news:ctfq5p$f2g$1...@news.newsland.it...

Un problema del genere l'ho risolto effettuando un controllo su Nome,
Cognome e Data di nascita, certo non si può escudere a priori che possano
capitare record identici per tali dati, per cui sarebbe meglio seguire gli
altri suggerimenti.
In ogni modo il codice è il seguente sull'evento BeforeUpdate:
On Error GoTo Err_data_nascita_Click
Dim stLinkCriteria As String
If (Not IsNull(DLookup(("[cognome]"), "TAnagPaz", "[cognome]=" & Chr$(34) &
Me!cognome & Chr$(34) & "AND" & "[nome]=" & Chr(34) & Me!nome & Chr(34) &
"AND" & "[data_nascita]=#" & Me![data_nascita] & "#"))) Then
   DoCmd.SetWarnings False
   If MsgBox("Il PAZIENTE è già presente in archivio!!", _
       vbQuestion + vbYes, _
       "ATTENZIONE!!!") = vbYesNo Then
     DoCmd.RunCommand acCmdSelectRecord
     DoCmd.RunCommand acCmdDeleteRecord
   End If
DoCmd.OpenForm ("FAggiornamenti"), , , , , , stLinkCriteria
DoCmd.Close acForm, "FImmissione", acSavePrompt
End If
Dando l'OK si apre la maschera degli aggiornamenti dove è possibile
richiamare il record già immesso per aggiungere nuove cartelle cliniche.
Ciao
Rita

 *********
Hai ragione mi sono dimenticato un pezzo...!
Io preferisco condizionare la cosa con la verifica del NewRecord
invece che l'OldValue, anche perchè spesso i campi Univoci
sono COUNTER.


 ...anche perchè spesso i campi Univoci sono COUNTER.


 record ai valori di un altro veccio record.
Karl non ho postato tutto il Codice di gestione, ma solo l'idea di
come valutarlo....!
Ovvio che se ( Not Me.NewRecord ) lo condiziono o lo accetto
in base alle esigenze....!
Es:
If not Me.NewRecord then Cancel=True.....
In ogni caso andrebbe valutato anche come lo sviluppatore gestisce
l'accesso ai dati io uso Form ReadOnly e forzo la modalità Modifica
per dati Fiscali......!
Ci sono molti modi di ottenere le stesse cose....


 stessa persona sia registrata 2 volte?
Grazie per la serie di proposte che a breve proverò direttamente sul
prodotto e con il suo utilizzatore, ovvero quello che è riuscito a
registrare la vendita di 3 oggetti alla stessa persona....registrandolo
come nuovo cliente per ben 3 volte, per poi chiamarmi e comunicarmi un bug
nel db: Registro le vendite e non me le mostra!!! Grazie ancora e buona
domenica a tutti


 Ci sono molti modi di ottenere le stesse cose....
Non io ma l'OP dovrebbe sapere che ci possono essere problemi
se il codice postato non considera situazioni frequenti.


 se il codice postato non considera situazioni frequenti.
UN MOMENTO! UN MOMENTO!!
mi state confondendo!
potete postare il codice completo?
il link dove ci ha mandato karl è solo per evitare la duplicazione
grazie


 grazie
Appunto, il problema originale era questo.
Io ho postato una soluzione alternativa parziale
da valutare in base alla gestione....!
Fammi capire meglio i tuoi dubbi.
@ALex
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG