Newsgroup: it.comp.appl.access
Titolo: Repost #2- controllo duplicati dopo CF

Ciao a tutti... ho una Form di inserimento dati anagrafici
e dopo l'inserimento del CF premendo Invio il bottone Elabora mi calcola 
il codice fiscale.
Purtroppo ho notato che inserendo un doppione mi avverte dello stesso 
solo a fine inserimento di tutti i record...invece vorrei che dopo aver 
premuto l'invio del calcolo del Cf mi dicesse se è un duplicato...
quindi vi chiedo cortesemente... come è possibile modificare il codice 
del bottone Elabora ??
grazie per l'aiuto
Private Sub cmdElabora_Click()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If ctl.Tag = "x" Then
            If IsNull(ctl) Or ctl = "" Then
                MsgBox "Il campo " & Mid$(ctl.Name, 4) & " non può 
essere vuoto!"
                Exit Sub
            End If
        End If
    Next ctl
    Me.txtCodiceFiscale = CalcoloCodFis(Me.txtCognome, Me.txtNome, 
CVDate(Me.txtDataNascita), Me.cboSesso, Trim(Me.txtCodiceComune))
SendKeys "{TAB}", True
End Sub 

 del bottone Elabora ??
Non devi modificare quel codice, ma eseguire il controllo anche sull'evento 
che ti ho detto poco sopra.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution

 il codice fiscale.
La risposta al tuo problema l'ha gia' data l'amico PBSoft, io pero' ti
dico altro:
hai previsto la possibilita' che tu debba inserire uno di quei
disgraziati esseri che hanno l'immane sfortuna di avere un codice
fiscale "derivato" (i.e. uno o piu' caratteri sostituiti per mantenere
l'unicita' del codice in caso di omonimia totale)?
Fallo. Il caso e' raro, rarissimo, ma quando arriva e non e' previsto,
sei nelle pesti... in fin dei conti si tratta solo di lasciare la
possibilita' di inserire a mano il CF e dare un po' di flessibilita'
all'algoritmo che verifica la validita' del codice inserito.
cia'
Max

 Max
-------------------->
grazie a PbSoft e a te per la risposta... rispondendo prima a Gabriele
dico che l'evento BeforeUpdate nella lista degli eventi del bottone 
Elabora non c'è....:-((
invece è presente nel controllo TXTCodiceFiscale...
ecco il codice...però inserendo il CF doppio non me lo segnala...
Private Sub txtCodiceFiscale_BeforeUpdate(Cancel As Integer)
Dim x
If DCount("*", "Anagrafe", "TxTCodiceFiscale= '" _
& Me!txtCodiceFiscale & "'") <> 0 Then
x = MsgBox("Il tizio " & Me!Cerca1 & _
" è già in archivio!", _
vbCritical + vbOKOnly, "Attenzione")
Cancel = True
End If
End Sub
riguardo ""immane sfortuna di avere un codice
 fiscale "derivato" (i.e. uno o piu' caratteri sostituiti per mantenere
 l'unicita' del codice in caso di omonimia totale)?""
penso di non avere problemi in quanto il DB non dovrà contenere + di
3200
utenti... per cui penso sia controllabile in questo caso...
Ciao Pino

 ecco il codice...però inserendo il CF doppio non me lo segnala...
Questo perche' compili (immagino) il campo txtCodiceFiscale dalla
routine che sta sotto all'azionamento del pulsante (con qualcosa tipo
Me.txtCodiceFiscale=CodiceFiscaleCalc"), ma cosi' facendo non si
attiva l'evento beforeupdate/afterupdate (che si triggera solo quando
modifichi a mano il contenuto del controllo), di conseguenza ti tocca
chiamare esplicitamente la routine di controllo dopo aver calcolato il
codice:
Private sub Elabora_Click()
Dim CF as string
(calcola il tuo codice fiscale e mettilo nella variabile CF)
If not CheckCF(CF) then me!txtCodiceFiscale=CF
End sub
Private Sub txtCodiceFiscale_BeforeUpdate(Cancel As Integer)
Cancel=CheckCF(me!txtCodiceFiscale)
End sub
Function CheckCF (CF as String)
If DCount("*", "Anagrafe", "TxTCodiceFiscale= '" & CF & "'" eccetera
eccetera
End Sub
cia'
Max

 utenti... per cui penso sia controllabile in questo caso...
Sbagli, nel senso che l'algoritmo per il calcolo del codice fiscale non fornisce 
risultati univoci.
I casi di omocodia possono erificarsi.
Poiché però solo l'Agenzia delle Entrate (per conto del Ministero dell'Interno) 
è l'unico ente autorizzato a risolvere i casi di omocodia, hai almeno due 
alternative per affrontare il problema.
Nella prima, permetti (ma segnali) la presenza di un codice fiscale identico 
a quello che hai calcolato.
Nella seconda, blocchi l'inserimento del codice fiscale duplicato in attesa 
della risoluzione da parte dell'Agenzia delle Entrate.



Scusate, mi viene il dubbio.
Nel precedente post dove si parlava dei duplicati, ho indicato un metodo 
alternativo; il dubbio è
a) è un metodo che non funziona?
b) non l'avete preso in considerazione?
il metodo da me suggerito è di inserire una casella combinata e col metodo 
autocomposizione: si sceglie l'opzione "Trova record nella maschera..." Con 
questo sistema ogni volta che apro la maschera, la casella combinata riceve 
il focus per prima e qui digitando il nome di Tizio succede che se Tizio è 
in archivio il suo nominativo si autocompleta nella casella e premendo tab o 
invio  viene recuperato il record di Tizio, se Tizio non è in archivio 
l'autocompletamento non avviene.
Si può intervenire sull'evento "su non in elenco per evitare l'errore "Non 
in elenco" , si può modificare l'istruzione SQL autogenerata per avere i 
dati come si gradiscono, si possono aggiungere altre bellurie, ma vi 
assicuro che a me ha evitato l'inserimento di duplicati.
Grazie per l'attenzione
NSantini

 ha scritto nel messaggio 
news:1184061075....@57g2000hsv.googlegroups.com...





Max
-----------
Ciao Max... stavo provando il tutto quanto sopra...
ma nel modulo questa riga diventa rossa...come mai ???
If DCount("*", "Anagrafe", "TxTCodiceFiscale= '" & CF & "'" eccetera
eccetera
Ciao

 eccetera
Ehm...Devi definire un variant che si chiama "eccetera" e
valorizzarla, occhio che potrebbero servirti delle API che spesso non
sono fornite col sistema operativo:
Dim Brain as Object, Eccetera as Object
On error resume next
Set Brain =CreateObject("User.Brain")
If err.number>0 then
     msgbox"L'utente e' privo di capacita' cognitive!", vbcritical
     err.clear
     exit sub
     end if
On error goto 0
Brain.SwitchOn
Set Eccetera=Brain.GetFromMemory("Recupera tutto quello che avevo
scritto prima")
Eccetera.AdeguaAllaNuovaSituazione
Eccetera.Commit
Cumpri'?
cia'
Max

 Brain.SwitchOn
Beh questa non è fornito a tutti...
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Segrate (MI), 7-8 giugno 2007