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,
> 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
--
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
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
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.
Vale lo stesso come per SQL:
http://www.donkarl.com/it?FAQ6.8