Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: evitare duplicati da maschera

556 views
Skip to first unread message
Message has been deleted

Karl Donaubauer

unread,
Jun 22, 2011, 6:11:44 AM6/22/11
to
remigio wrote:
> nel mio db ho una tabella Utenti:
> CodUtente, Cognome, Nome, datanascita, ecc.
> Ho costruito una semplice maschera con dei campi non associati e
> che uso per iserire nuovi record nella tabella Utenti mediante una
> query di accodamento che viene eseguita premendo un pulsante
> "Inserisci".
> Capita spesso per� che trovo degli utenti duplicati a causa della
> distrazione degli operatori e vorrei quindi evitare che vengano
> inseriti due volte gli stessi utenti, ma questo deve avvenire prima
> dell'inserimento del record, ovvero vorrei inserire un controllo
> sul pulsante "Inserisci" che vada a verificare che i dati immessi
> nei campi Cognome, nome e datanascita della maschera non esistano
> gi� in tabella.
>
> Ho provato la soluzione di donkarl nella faq 4.25 versione 2 ma non
> sono riuscito a farla funzionare.
> ...

Devi essere pi� preciso di "non sono riuscito".
Cosa hai provato, cos'� successo, incolla il tuo codice ecc.
Abbiamo discusso tante volte qui come adattare il codice
a pi� campi ecc. Cerca un po' sul web, p.e. con il mio
nome e il numero 4.25.

--
Ciao
Karl
*********
Access FAQ: http://www.donkarl.com/it

Paolo opg

unread,
Jun 22, 2011, 6:19:42 AM6/22/11
to
remigio <lino...@gmail.com> wrote in
news:d412da94-e529-4599...@glegroupsg2000goo.googlegroups.
com:

> Ciao,

> nel mio db ho una tabella Utenti:
> CodUtente, Cognome, Nome, datanascita, ecc.
> Ho costruito una semplice maschera con dei campi non associati e che
> uso per iserire nuovi record nella tabella Utenti mediante una query
> di accodamento che viene eseguita premendo un pulsante "Inserisci".
> Capita spesso per� che trovo degli utenti duplicati a causa della
> distrazione degli operatori e vorrei quindi evitare che vengano
> inseriti due volte gli stessi utenti, ma questo deve avvenire prima
> dell'inserimento del record, ovvero vorrei inserire un controllo sul
> pulsante "Inserisci" che vada a verificare che i dati immessi nei
> campi Cognome, nome e datanascita della maschera non esistano gi� in
> tabella. Ho provato la soluzione di donkarl nella faq 4.25 versione 2

> ma non sono riuscito a farla funzionare. Grazie per l'aiuto.
>
> Remigio
>
>

non si fa nella maschera.

nella tua tabella inserisci una sola volta gli indici opportuni e vedrai
che il controllo sui duplicati te lo ritrovi aggratisse compreso nel
prezzo.

con la soluzione che vorresti applicare tu, dovresti riportare la logica
di controllo dei duplicati in ogni e qualsiasi maschera di inserimento e
modifica dei dati.

e se per caso piu' avanti tu decidessi di cambiare/aggiungere frontend
(chesso', la solita paginetta web) dovresti riportare anche li' la logica
di controllo dei duplicati.

--
Paolo opg

BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

remigio

unread,
Jun 22, 2011, 7:03:32 AM6/22/11
to
> Devi essere pi� preciso di "non sono riuscito".
> Cosa hai provato, cos'� successo, incolla il tuo codice ecc.

> Abbiamo discusso tante volte qui come adattare il codice
> a pi� campi ecc. Cerca un po' sul web, p.e. con il mio

> nome e il numero 4.25.
>
> --
> Ciao
> Karl
> *********
> Access FAQ: http://www.donkarl.com/it

Ciao Karl,
questo è il codice usato sull'evento click del pulsante Inserisci:

If Not IsNull(Dlookup("Cognome", "Utenti", _
"Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) _
And Me!Cognome <> nz(Me!Cognome.OldValue) Then
MsgBox Me!Cognome & " Già esiste.", vbOKOnly, "Duplicato!"
Cancel = True
End If
(segue il codice di esecuzione della query di accodamento.)

Nella maschera di inserimento dati, i cui campi non sono associati, vi sono tra gli altri i campi Cognome, Nome, Datanascita che sono i dati che non vorrei far duplicare.
Ho inserito il tuo codice PRIMA di quello che esegue la query, sull'evento click del pulsante e non succede nulla, i duplicati vengono inseriti tranquillamente nella tabella Utenti.
Per rispondere anche a Paolo opg devo dire che sto lavorando con tabelle collegate via odbc ad un server mysql, quindi preferisco agire sulle maschere per il momento, anche perchè la cosa non mi crea problemi.
Un saluto, e grazie ad entrambe.

Remigio

Karl Donaubauer

unread,
Jun 22, 2011, 7:26:01 AM6/22/11
to
remigio wrote:
> questo � il codice usato sull'evento click del pulsante Inserisci:

>
> If Not IsNull(Dlookup("Cognome", "Utenti", _
> "Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) _
> And Me!Cognome <> nz(Me!Cognome.OldValue) Then
> MsgBox Me!Cognome & " Gi� esiste.", vbOKOnly, "Duplicato!"

> Cancel = True
> End If
> (segue il codice di esecuzione della query di accodamento.)
>
> Nella maschera di inserimento dati, i cui campi non sono associati,
> vi sono tra gli altri i campi Cognome, Nome, Datanascita che sono i
> dati che non vorrei far duplicare.
> Ho inserito il tuo codice PRIMA di quello che esegue la query,
> sull'evento click del pulsante e non succede nulla, i duplicati
> vengono inseriti tranquillamente nella tabella Utenti.
> ...

Siccome usi un evento diverso dell'articolo e controlli
non associati devi togliere le sezioni con OldValue
e Cancel. Prova cos�:

If Not IsNull(Dlookup("Cognome", "Utenti", _

"Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) Then
MsgBox Me!Cognome & " Gi� esiste.", vbOKOnly, "Duplicato!"
End If

Se funziona, puoi aggiungere il paragone degli altri campi
con AND ecc.

remigio

unread,
Jun 23, 2011, 6:26:00 AM6/23/11
to
> Siccome usi un evento diverso dell'articolo e controlli
> non associati devi togliere le sezioni con OldValue
> e Cancel. Prova così:

>
> If Not IsNull(Dlookup("Cognome", "Utenti", _
> "Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) Then
> MsgBox Me!Cognome & " Già esiste.", vbOKOnly, "Duplicato!"

> End If
>
> Se funziona, puoi aggiungere il paragone degli altri campi
> con AND ecc.
>

Ora va bene, ma ho da chiederti due cose:
- volendo fare il confronto su più campi, AND va messo come di seguito?

If Not IsNull(Dlookup("Cognome", "Utenti", _
"Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) Then

MsgBox Me!Cognome & " Già esiste.", vbOKOnly, "Duplicato!"

AND

If Not IsNull(Dlookup("NOME", "Utenti", _
"NOME= " & Chr$(34) & Me!NOME& Chr$(34))) Then
MsgBox Me!NOME& " Già esiste.", vbOKOnly, "Duplicato!"

End If

- siccome questo codice lo metto giusto prima del codice che esegue la query di accodamento, come riportato di seguito


Private Sub inserisci_nuovo_utente_Click()
On Error GoTo Err_inserisci_nuovo_utente_Click


If Not IsNull(DLookup("Cognome", "Utenti", _


"Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) Then

MsgBox Me!Cognome & " Già esiste.", vbOKOnly, "Duplicato!"
End If



Dim stDocName As String

If IsNull(Me!Cognome) Then
MsgBox "ATTENZIONE!!! Inserire prima il cognome o premere Chiudi per uscire."
Exit Sub
End If

stDocName = "q_nuovo_utente"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.Close
DoCmd.OpenForm "Utenti1"

Exit_inserisci_nuovo_utente_Click:
Exit Sub

Err_inserisci_nuovo_utente_Click:
MsgBox Err.Description
Resume Exit_inserisci_nuovo_utente_Click

End Sub

nel caso il cognome e il nome esistono già come faccio a saltare il resto del codice in modo da non eseguire la query?
Grazie per l'aiuto prezioso.

Remigio

Karl Donaubauer

unread,
Jun 23, 2011, 7:12:03 AM6/23/11
to
remigio wrote:
> ...
> - volendo fare il confronto su pi� campi, AND va messo come di

> seguito?
>
> If Not IsNull(Dlookup("Cognome", "Utenti", _
> "Cognome = " & Chr$(34) & Me!Cognome & Chr$(34))) Then
> MsgBox Me!Cognome & " Gi� esiste.", vbOKOnly, "Duplicato!"

>
> AND
>
> If Not IsNull(Dlookup("NOME", "Utenti", _
> "NOME= " & Chr$(34) & Me!NOME& Chr$(34))) Then
> MsgBox Me!NOME& " Gi� esiste.", vbOKOnly, "Duplicato!"
>
> End If

No. Vedi sotto.

> - siccome questo codice lo metto giusto prima del codice che esegue
> la query di accodamento, come riportato di seguito

> ...
> nel caso il cognome e il nome esistono gi� come faccio a saltare il


> resto del codice in modo da non eseguire la query?

Aggiungi che vuoi andare via:

If Not IsNull(Dlookup("Cognome", "Utenti", _

"Cognome = " & Chr$(34) & Me!Cognome & Chr$(34) & _
" AND Nome= " & Chr$(34) & Me!Nome & Chr$(34))) Then


MsgBox Me!Cognome & " Gi� esiste.", vbOKOnly, "Duplicato!"

Exit Sub
End If

BTW: Nel tuo interfaccia google prova di impostare il regolare
"Re:" come segno di risposta invece del "R:".
Cos� che il filo non viene sempre strappato.

Message has been deleted

Karl Donaubauer

unread,
Jun 23, 2011, 10:50:10 AM6/23/11
to
Michele Reale wrote:
> ...

>> If Not IsNull(Dlookup("Cognome", "Utenti", _
>> "Cognome = " & Chr$(34) & Me!Cognome & Chr$(34) & _
>> " AND Nome= " & Chr$(34) & Me!Nome & Chr$(34))) Then
>> MsgBox Me!Cognome & " Gi� esiste.", vbOKOnly, "Duplicato!"
>> Exit Sub
>> End If
> ...
> Dovendo fare la verifica anche sulla data di nascita devo aggiungere
>
> " AND datanascita= " & Chr$(34) & Me!datanascita & Chr$(34))) Then
> ...
> o cambia la stringa?

Vale lo stesso come per SQL:
http://www.donkarl.com/it?FAQ6.8

0 new messages