Discussione:
ricerca duplicati
(troppo vecchio per rispondere)
echiave
2006-03-13 08:02:34 UTC
Permalink
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando esiste già
un valore uguale mostrandomi in tal caso la data di nascita per verificare
che non si tratta della stessa persona. Ho pensato ad una query che cerchi i
duplicati dei due campi ma questa funziona solo dopo aver registrato il nuovo
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Cinzia
2006-03-13 10:15:52 UTC
Permalink
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando esiste già
un valore uguale mostrandomi in tal caso la data di nascita per verificare
che non si tratta della stessa persona. Ho pensato ad una query che cerchi i
duplicati dei due campi ma questa funziona solo dopo aver registrato il nuovo
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di aggiornare
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "' AND
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con quel nome e
cognome.
A questo punto potresti aprire una maschera avente come origine record una
query filtrata sul Cognome e Nome della maschera corrente.

Saluti
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
echiave
2006-03-13 14:08:28 UTC
Permalink
Grazie Cinzia per il suggerimento. Ho provato ad inserire la funziona DCount
nell'evento Prima di aggiornare della maschera di inserimento di un nuovo
nominativo con il seguente codice

=IIf(DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
me.cognomenome & " ' ")>=1;MsgBox("Duplicazione";"vbOKonly";"Errore");"")

dove speravo di ottenere in caso di duplicazione un msgbox. Purtroppo ricevo
sempre il seguente messaggio di errore

"L'oggetto non contiene l'oggetto di automazione 'me'."

Ho verificato varie volte l'ortografia (qui sopra ho allargato i vari " '
per capire meglio la loro disposizione). Ho provato anche utilizzando la
forma Me!cognomenome ma il risultato è lo stesso.
Che fare ?
Post by Cinzia
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando esiste
già
Post by echiave
un valore uguale mostrandomi in tal caso la data di nascita per verificare
che non si tratta della stessa persona. Ho pensato ad una query che cerchi
i
Post by echiave
duplicati dei due campi ma questa funziona solo dopo aver registrato il
nuovo
Post by echiave
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di aggiornare
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "' AND
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con quel nome e
cognome.
A questo punto potresti aprire una maschera avente come origine record una
query filtrata sul Cognome e Nome della maschera corrente.
Saluti
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
Cinzia
2006-03-13 14:27:38 UTC
Permalink
Post by echiave
Post by Cinzia
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando esiste
già
Post by echiave
un valore uguale mostrandomi in tal caso la data di nascita per verificare
che non si tratta della stessa persona. Ho pensato ad una query che cerchi
i
Post by echiave
duplicati dei due campi ma questa funziona solo dopo aver registrato il
nuovo
Post by echiave
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di aggiornare
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "' AND
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con quel nome e
cognome.
A questo punto potresti aprire una maschera avente come origine record una
query filtrata sul Cognome e Nome della maschera corrente.
Grazie Cinzia per il suggerimento. Ho provato ad inserire la funziona DCount
nell'evento Prima di aggiornare della maschera di inserimento di un nuovo
nominativo con il seguente codice
=IIf(DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
me.cognomenome & " ' ")>=1;MsgBox("Duplicazione";"vbOKonly";"Errore");"")
dove speravo di ottenere in caso di duplicazione un msgbox. Purtroppo ricevo
sempre il seguente messaggio di errore
"L'oggetto non contiene l'oggetto di automazione 'me'."
Ho verificato varie volte l'ortografia (qui sopra ho allargato i vari " '
per capire meglio la loro disposizione). Ho provato anche utilizzando la
forma Me!cognomenome ma il risultato è lo stesso.
Che fare ?
Ciao emilio
Prova a mettere semplicemente il nome del controllo che contiene il campo
CognomeNome supponendo sia txt_cognomeNome
if (DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
txt_cognomenome & " ' ")>=1 ) then
MsgBox("Duplicazione";"vbOKonly";"Errore")
cancel = true
end if
L'uguale davanti all'iif mi fa pensare che non l'hai messo nel codice VBA ma
direttamente nella proprietà dell'evento spostalo nel VBA
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
echiave
2006-03-14 16:10:33 UTC
Permalink
Post by echiave
Post by echiave
Post by Cinzia
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando
esiste
Post by echiave
Post by Cinzia
già
Post by echiave
un valore uguale mostrandomi in tal caso la data di nascita per
verificare
Post by echiave
Post by Cinzia
Post by echiave
che non si tratta della stessa persona. Ho pensato ad una query che
cerchi
Post by echiave
Post by Cinzia
i
Post by echiave
duplicati dei due campi ma questa funziona solo dopo aver registrato
il
Post by echiave
Post by Cinzia
nuovo
Post by echiave
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di aggiornare
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "' AND
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con quel
nome e
Post by echiave
Post by Cinzia
cognome.
A questo punto potresti aprire una maschera avente come origine record
una
Post by echiave
Post by Cinzia
query filtrata sul Cognome e Nome della maschera corrente.
Grazie Cinzia per il suggerimento. Ho provato ad inserire la funziona
DCount
Post by echiave
nell'evento Prima di aggiornare della maschera di inserimento di un nuovo
nominativo con il seguente codice
=IIf(DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
me.cognomenome & " ' ")>=1;MsgBox("Duplicazione";"vbOKonly";"Errore");"")
dove speravo di ottenere in caso di duplicazione un msgbox. Purtroppo
ricevo
Post by echiave
sempre il seguente messaggio di errore
"L'oggetto non contiene l'oggetto di automazione 'me'."
Ho verificato varie volte l'ortografia (qui sopra ho allargato i vari " '
per capire meglio la loro disposizione). Ho provato anche utilizzando la
forma Me!cognomenome ma il risultato è lo stesso.
Che fare ?
Ciao emilio
Prova a mettere semplicemente il nome del controllo che contiene il campo
CognomeNome supponendo sia txt_cognomeNome
if (DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
txt_cognomenome & " ' ")>=1 ) then
MsgBox("Duplicazione";"vbOKonly";"Errore")
cancel = true
end if
L'uguale davanti all'iif mi fa pensare che non l'hai messo nel codice VBA ma
direttamente nella proprietà dell'evento spostalo nel VBA
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
Cara Cinzia,
grazie veramente per l'aiuto. Ho inserito il codice nel VBA e funziona,
almeno per il cognome e nome (ho utilizzato senza problema la versione
Me![cognomenome]).
Purtroppo un altro problema mi nasce quando voglio verificare anche la data
di nascita.
Ho usato varie ortografie per il confronto delle date:

If (DCount("[IDdipendente]", "dipendenti", "[Cognomenome]='" &
Me![Cognomenome] & "' AND [datanascita]='#Me![datanascita]#'") >= 1) Then
MsgBox mgs, vbExclamation + vbOKOnly, "Duplicazione"
Cancel = True
End If

ma mi da sempre un errore. So che la data deve essere sempre nella forma
#24/04/1946# per effettuare i confronti. Infatti se inserisco una data
specifica al posto di '#Me![datanascita]#' allora la query funziona. Ho
provato anche ad usare una variabile stringa dove memorizzare il valore
Me![datanascita] e ho verificato che la variabile contiene in effetti il
valore inserito ma una volta immessa la variabile nella query non funziona
più. Anche se alla variabile stringa aggiungo i due cancelletti.
Mi puoi ancora aiutare?
grazie
Emilio
Cinzia
2006-03-15 08:32:17 UTC
Permalink
Post by echiave
Post by echiave
Post by echiave
Post by Cinzia
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando
esiste
Post by echiave
Post by Cinzia
già
Post by echiave
un valore uguale mostrandomi in tal caso la data di nascita per
verificare
Post by echiave
Post by Cinzia
Post by echiave
che non si tratta della stessa persona. Ho pensato ad una query che
cerchi
Post by echiave
Post by Cinzia
i
Post by echiave
duplicati dei due campi ma questa funziona solo dopo aver registrato
il
Post by echiave
Post by Cinzia
nuovo
Post by echiave
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di aggiornare
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "' AND
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con quel
nome e
Post by echiave
Post by Cinzia
cognome.
A questo punto potresti aprire una maschera avente come origine record
una
Post by echiave
Post by Cinzia
query filtrata sul Cognome e Nome della maschera corrente.
Grazie Cinzia per il suggerimento. Ho provato ad inserire la funziona
DCount
Post by echiave
nell'evento Prima di aggiornare della maschera di inserimento di un nuovo
nominativo con il seguente codice
=IIf(DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
me.cognomenome & " '
")>=1;MsgBox("Duplicazione";"vbOKonly";"Errore");"")
Post by echiave
Post by echiave
Post by echiave
dove speravo di ottenere in caso di duplicazione un msgbox. Purtroppo
ricevo
Post by echiave
sempre il seguente messaggio di errore
"L'oggetto non contiene l'oggetto di automazione 'me'."
Ho verificato varie volte l'ortografia (qui sopra ho allargato i vari " '
per capire meglio la loro disposizione). Ho provato anche utilizzando la
forma Me!cognomenome ma il risultato è lo stesso.
Che fare ?
Ciao emilio
Prova a mettere semplicemente il nome del controllo che contiene il campo
CognomeNome supponendo sia txt_cognomeNome
if (DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
txt_cognomenome & " ' ")>=1 ) then
MsgBox("Duplicazione";"vbOKonly";"Errore")
cancel = true
end if
L'uguale davanti all'iif mi fa pensare che non l'hai messo nel codice VBA ma
direttamente nella proprietà dell'evento spostalo nel VBA
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
Cara Cinzia,
grazie veramente per l'aiuto. Ho inserito il codice nel VBA e funziona,
almeno per il cognome e nome (ho utilizzato senza problema la versione
Me![cognomenome]).
Purtroppo un altro problema mi nasce quando voglio verificare anche la data
di nascita.
If (DCount("[IDdipendente]", "dipendenti", "[Cognomenome]='" &
Me![Cognomenome] & "' AND [datanascita]='#Me![datanascita]#'") >= 1) Then
MsgBox mgs, vbExclamation + vbOKOnly, "Duplicazione"
Cancel = True
End If
ma mi da sempre un errore. So che la data deve essere sempre nella forma
#24/04/1946# per effettuare i confronti. Infatti se inserisco una data
specifica al posto di '#Me![datanascita]#' allora la query funziona. Ho
provato anche ad usare una variabile stringa dove memorizzare il valore
Me![datanascita] e ho verificato che la variabile contiene in effetti il
valore inserito ma una volta immessa la variabile nella query non funziona
più. Anche se alla variabile stringa aggiungo i due cancelletti.
Mi puoi ancora aiutare?
grazie
Emilio
Ciao Emilio,
prova così:

If (DCount("[IDdipendente]", "dipendenti", "[Cognomenome]='" &
Me![Cognomenome] & "' AND [datanascita]=#" & Format(Me![datanascita],
"yyyy/mm/dd") & "#" ) >= 1) Then
MsgBox mgs, vbExclamation + vbOKOnly, "Duplicazione"
Cancel = True
End If
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
echiave
2006-03-17 08:47:29 UTC
Permalink
Cara Cinzia, non so proprio come ringraziarti per la tua preziosa
collaborazione. Ora funziona!
Vorrei approfittare per l'ultima volta della tua cortesia per il seguente
quesito:
nella tabella di cui abbiamo già parlato, ogni record relativo ad una
persona si collega ad uno o più record di un'altra tabella. Ho predisposto un
report che per ogni persona indica, a fianco, i relativi record della seconda
tabella. Per evitare che i nomi appaiano più di una volta ho impostato il
campo "dipendente" con l'opzione nascondi duplicati e funziona.
Tuttavia, alla fine del report, mentre vorrei conteggiare il numero di
persone totali, con la funzione Conteggio (IDdipendente) mi totalizza anche i
duplicati dei nomi e quindi il calcolo è sbagliato perchè il totale è il
numero di record della seconda tabella. Ho provato a cambiare i
raggruppamenti, ad usare altre funzioni, ma senza successo.
Mi puoi aiutare ancora?
Grazie
Emilio
Post by echiave
Post by echiave
Post by echiave
Post by echiave
Post by Cinzia
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando
esiste
Post by echiave
Post by Cinzia
già
Post by echiave
un valore uguale mostrandomi in tal caso la data di nascita per
verificare
Post by echiave
Post by Cinzia
Post by echiave
che non si tratta della stessa persona. Ho pensato ad una query
che
Post by echiave
Post by echiave
cerchi
Post by echiave
Post by Cinzia
i
Post by echiave
duplicati dei due campi ma questa funziona solo dopo aver
registrato
Post by echiave
Post by echiave
il
Post by echiave
Post by Cinzia
nuovo
Post by echiave
record e non durante l'inserimento. Esiste una subroutine che
possa
Post by echiave
Post by echiave
Post by echiave
Post by Cinzia
Post by echiave
effettuare questo controllo?
Grazie
Emilio Chiave
Ciao Emilio,
puoi ad esempio usare la funzione DCOUNT sull'evento Prima di
aggiornare
Post by echiave
Post by echiave
Post by echiave
Post by Cinzia
DCount("IDAnagrafica"; "Anagrafica"; "[Cognome]='" & me.Cognome & "'
AND
Post by echiave
Post by echiave
Post by echiave
Post by Cinzia
[Nome]='" & me.Nome &"'") se
il risultato è >=1 significa che ci sono già dei nomiinativi con
quel
Post by echiave
Post by echiave
nome e
Post by echiave
Post by Cinzia
cognome.
A questo punto potresti aprire una maschera avente come origine
record
Post by echiave
Post by echiave
una
Post by echiave
Post by Cinzia
query filtrata sul Cognome e Nome della maschera corrente.
Grazie Cinzia per il suggerimento. Ho provato ad inserire la funziona
DCount
Post by echiave
nell'evento Prima di aggiornare della maschera di inserimento di un
nuovo
Post by echiave
Post by echiave
Post by echiave
nominativo con il seguente codice
=IIf(DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
me.cognomenome & " '
")>=1;MsgBox("Duplicazione";"vbOKonly";"Errore");"")
Post by echiave
Post by echiave
Post by echiave
dove speravo di ottenere in caso di duplicazione un msgbox. Purtroppo
ricevo
Post by echiave
sempre il seguente messaggio di errore
"L'oggetto non contiene l'oggetto di automazione 'me'."
Ho verificato varie volte l'ortografia (qui sopra ho allargato i vari
" '
Post by echiave
Post by echiave
Post by echiave
per capire meglio la loro disposizione). Ho provato anche utilizzando
la
Post by echiave
Post by echiave
Post by echiave
forma Me!cognomenome ma il risultato è lo stesso.
Che fare ?
Ciao emilio
Prova a mettere semplicemente il nome del controllo che contiene il
campo
Post by echiave
Post by echiave
CognomeNome supponendo sia txt_cognomeNome
if (DCount("[IDdipendente]";"dipendenti";"[cognomenome]=' " &
txt_cognomenome & " ' ")>=1 ) then
MsgBox("Duplicazione";"vbOKonly";"Errore")
cancel = true
end if
L'uguale davanti all'iif mi fa pensare che non l'hai messo nel codice
VBA ma
Post by echiave
Post by echiave
direttamente nella proprietà dell'evento spostalo nel VBA
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
Cara Cinzia,
grazie veramente per l'aiuto. Ho inserito il codice nel VBA e funziona,
almeno per il cognome e nome (ho utilizzato senza problema la versione
Me![cognomenome]).
Purtroppo un altro problema mi nasce quando voglio verificare anche la
data
Post by echiave
di nascita.
If (DCount("[IDdipendente]", "dipendenti", "[Cognomenome]='" &
Me![Cognomenome] & "' AND [datanascita]='#Me![datanascita]#'") >= 1) Then
MsgBox mgs, vbExclamation + vbOKOnly, "Duplicazione"
Cancel = True
End If
ma mi da sempre un errore. So che la data deve essere sempre nella forma
#24/04/1946# per effettuare i confronti. Infatti se inserisco una data
specifica al posto di '#Me![datanascita]#' allora la query funziona. Ho
provato anche ad usare una variabile stringa dove memorizzare il valore
Me![datanascita] e ho verificato che la variabile contiene in effetti il
valore inserito ma una volta immessa la variabile nella query non funziona
più. Anche se alla variabile stringa aggiungo i due cancelletti.
Mi puoi ancora aiutare?
grazie
Emilio
Ciao Emilio,
If (DCount("[IDdipendente]", "dipendenti", "[Cognomenome]='" &
Me![Cognomenome] & "' AND [datanascita]=#" & Format(Me![datanascita],
"yyyy/mm/dd") & "#" ) >= 1) Then
MsgBox mgs, vbExclamation + vbOKOnly, "Duplicazione"
Cancel = True
End If
--
Cinzia
---------------------------------------
| http://www.riolab.org |
---------------------------------------
Roberto da casa
2006-03-13 10:24:46 UTC
Permalink
Post by echiave
In una tabella con un campo "cognome e nome" vorrei che, all'atto
dell'inserimento di un nuovo record, mi venisse segnalato quando esiste già
un valore uguale mostrandomi in tal caso la data di nascita per verificare
che non si tratta della stessa persona. Ho pensato ad una query che cerchi i
duplicati dei due campi ma questa funziona solo dopo aver registrato il nuovo
record e non durante l'inserimento. Esiste una subroutine che possa
effettuare questo controllo?
Ti consiglio di usare le funzioni di aggregazione sui dominii invece che una
query.
A fronte dell'evento "Prima di aggiornare" della maschera di inserimento
verifica con una DLookup o con una DCount (vedi help) se in tabella esistono
o meno record con lo stesso cognome e nome, ed eventualmente visualizzare
con una DLookup la data di nascita; naturalmente se c'è più di un record con
lo stesso cognome e nome verrà fornita solo la data di nascita di uno di
essi.
Post by echiave
Grazie
Prego
Post by echiave
Emilio Chiave
--
Roberto
-----------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
-----------------------------------------------
Continua a leggere su narkive:
Loading...