Newsgroup: it.comp.appl.access
Titolo: Anagrafica con controlli duplicati

So che l'argomento è già stato discusso, ma non riesco a venirne a
capo pur aver letto tutti i post.
Ho creato una maschera con il campo Cognome e Nome (insieme così da
poter inseriire Rossi Mario e Rossi Maria) ma non riesco a trovare il
modo per far apparire un messaggio qualora il nome fosse già inserito.
Mi è sufficiente il controllo su quel campo e non mi serve la
"verifica" sulla data di nascita o sul codice fiscale.
Mi serve che se scrivo la stessa parola (Rossi Mario), il db mi
avvisi......
Settando in Tabella "Duplicati non ammessi" e avendolo scelto come
Chiave Primaria non funge!!!!!
Come faccio? Grazie!!!

 ...
Se hai "letto tutti i post", conosci già l'articolo:
 Evitare duplicati
 
www.donkarl.com/it?FAQ4.25
Cosa non riesci a fare con la descrizione li?
Cosa esattamente hai provato? Quale codice o espressione?
E poi la solita domanda:
"non funge!!!!!" si esprime come?
-- 
Ciao
Karl
*********
Access FAQ: 
www.donkarl.com/it


Grazie Karl.....
Aveo già provato questo codice, ma da ignorante in materia.......
If Not IsNull(Dlookup("MioCampo", "MiaTabella", _
    "MioCampo = " & Chr$(34) & Me!MioControllo & Chr$(34))) _
    And Me!MioControllo <> nz(Me!MioControllo.OldValue) Then
  MsgBox Me!MioControllo & " Già esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
Quindi MioCampo sarà il campo che io ho chiamato Cognome e Nome, cioè
lì dove inserisco i dati
MiaTabella è Anagrafica
MioControllo? Che vuol dire? Dove come lo trovo/creo?

 (insieme così da poter inseriire Rossi Mario e Rossi Maria)
?
Se veramente hai un solo campo che si chiama "Cognome e Nome"
dove inserisci combinazioni di nomi, sarebbe una catastrofe nel
senso della normalizzazione e per molte operazioni ulteriori.



La possibilità che io possa trovare nel mio database persone con due
nomi identici è una su un milardo....quindi non ho la necessità di
creare il campo Nome ed il campo Cognome e mi posso "permettere" di
inserirli insieme Nome+Cognome insieme......Quindi ho bisogno che
riconosca Rossi Mario, così, insieme! Ovviamente Rossi Maria è
un'altra persona e, seppur rarissimo che avvenga, il fatto che i due
abbiano lo stesso cognome non deve influenzare il database......

 
rarissimo incontrare due persone con lo stesso cognome?
ma... vivi anche tu in italia?
O_o
vuoi un campo unico per consentire l'inserimento di piu' persone con lo 
stesso cognome?
se hai il campo cognome e il campo nome separati, puoi comunque 
permettere l'inserimento di piu' persone con lo stesso cognome: basta 
mettere la chiave primaria sui due campi...
se invece vuoi il campo unico per altri motivi ti conviene spiegare 
quali, perche' non capendo la ragione che ti porta a fare questa scelta 
e' piuttosto difficile suggerirti quale strada prendere...
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 wrote:

Il database che sto creando mi serve per un servizio psichiatrico
minorile femminile: quante probabilità ho che due pazze sotto i 18
anni abbiano lo stesso nome? In 30 anni di lavoro ancora nessuna.....

 abbiano lo stesso cognome non deve influenzare il database......
Non ho parlato di un campo univoco o no. Questo sarebbe un
altro discorso che si tratterebbe di indici. Invece ho parlata
della prima regola di normalizzazione, cioè un campo deve
contenere un unico entità di informazione.
Se non rispetti almeno la prima regola come creare un
database relazionale, ti crei tanti problemi con separare,
cercare, filtrare, indicizzare, usare funzioni di SQL per questo
campo ecc. ecc.
Del resto anche il nome "Cognome e Nome" per un campo creerà
lavoro superfluo inutile, perché contiene due spazi.
Vedi 
www.donkarl.com/it?FAQ1.5
.


 
avere i due campi separati e' una modifica minima che rende il tuo 
software molto piu' robusto.
ovvio che poi sta a te decidere cosa fare.
resta la domanda: l'unico motivo che ti porta a volere il campo unico e' 
consentirti l'inserimento di piu' persone con lo stesso cognome?


 wrote:

Diciamo che mi viene comodo avere Nome e Cognome nello stesso campo e
poco conta se rinomino il campo in Nome.
Quindi, presupponendo che il campo si chiami semplicemente Nome, la
tabella Anagrafica, il codice sopra si trasforma in
If Not IsNull(Dlookup("Nome", "Anagrafica", _
    "Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Nome <> nz(Me!Nome.OldValue) Then
  MsgBox Me!Nome & " Già esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
??????
Cioè MioControllo cosa diventa?

 Cioè MioControllo cosa diventa?
Non è chiaro cosa non è chiaro. ;-)
Hai già completto il codice. Quindi, cos'è la domanda?
Funziona o no? Se no, con quale problema e/o messaggio?
Se una volta avrai più esperienza con database e ti deciderai
per la variante corretta con due campi, il codice sarà:
If Not IsNull(Dlookup("Nome", "Anagrafica", _
    "Cognome = " & Chr$(34) & Me!Cognome & Chr$(34) & _
    " And Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Cognome <> nz(Me!Cognome.OldValue) _
    Or Me!Nome <> nz(Me!Nome.OldValue) Then
  MsgBox Me!Cognome & " " & Me!Nome & _
        " Già esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
-- 



Niente....c'è qualcosa che continua a non "tornarni".....Non ci
riesco....
Se volete darci un'occhiata il file è qui:
http://www.fileden.com/files/2008/5/4/1895747//provadb3.rar
In ogni caso mi sa che apro un post più generale perchè le difficoltà
che riscontro sono molteplici...
Grazie per l'aiuto comunque!

 Grazie per l'aiuto comunque!
-- 
Ciao
Geppo

 Geppo
Noooo!
Magari trovassi qualcuno che mi desse una mano a farlo completo come
serve a me!!!
In questo caso è solo un modo per capire dove e cosa sbaglio......

 In questo caso è solo un modo per capire dove e cosa sbaglio......
cosi mi sembra un po' difficile.
-- 
Ciao
Geppo 


E cosa dovrei inserire? Lo sto facendo ora!!!!!
A me interessa capire come far apparire un msg con su scritto "Nome
già esistente" nel momento in cui inserisco un nuovo record con lo
stesso nome....
In questo caso, tutto lì!!!!



cioè
tu vorresti che ti scrivessimo noi la tua applicazione......?????
ma posta quello che hai fatto tu.
e poi si corregge
ciao
ciao


Allora io faccio questo:
copio il seguente codice
If Not IsNull(Dlookup("Nome", "Anagrafica", _
    "Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Nome <> nz(Me!Nome.OldValue) Then
  MsgBox Me!Nome & " Già esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
 apro la maschera Anagrafica e vado sul campo Nome
Col destro seleziono proprietà
Scelgo Evento, creo una Routine evento ed incollo il codice sopra,
così che diventa:
Private Sub Nome_e_Cognome_AfterUpdate()
If Not IsNull(DLookup("Nome", "Anagrafica", _
    "Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Nome <> Nz(Me!Nome.OldValue) Then
  MsgBox Me!Nome & " Già esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
End Sub
Salvo tutto e provo ad inserire un vuovo record con il nome già
presente e mi appare una finestrella con su:
Errore di run-time '438':
Proprietà o metodo non supportato dall'oggetto.
Clicco su debug e mi appare evidenziato in giallo questa parte di
codice:
If Not IsNull(DLookup("Nome", "Anagrafica", _
    "Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Nome <> Nz(Me!Nome.OldValue) Then
Dove sbaglio?

> Dove sbaglio?
Sbaglio che dovrei fare Prima di aggiornare e NON dopo
aggiornamento...e questo è ok......
Ma seguendo la stessa procedura di Routine e creando il codice
Private Sub Nome_e_Cognome_BeforeUpdate(Cancel As Integer)
If Not IsNull(DLookup("Nome", "Anagrafica", _
    "Nome = " & Chr$(34) & Me!Nome & Chr$(34))) _
    And Me!Nome <> Nz(Me!Nome.OldValue) Then MsgBox Me!Nome & " Già
esiste.", vbOKOnly, "Duplicato!"
  Cancel = True
End If
End Sub
immettendo nel nuovo record lo stesso nome, PRIMA mi appare un msg con
Errore Compilazione
End If senza blocco If evidenziando in Blu End If
Poi, cliccando sull'OK della finestrella, mi evidenzia in giallo
Private Sub Nome_e_Cognome_BeforeUpdate(Cancel As Integer)
Qual'è l'arcano?



posta db completo
con il codice, le tabelle, le maschere, le qry
tutto insomma....


http://www.fileden.com/files/2008/5/4/1895747//provadb3.rar



ma hai ripostato il db vuoto?
ho capito
sei un troll....


Il comando MsgBox dopo Then va a capo.
Ciao, Mauro