trovare omonimi

Anonimo
2011-02-14T15:42:14+00:00

Ciao a tutti

vorrei controllare, al momento di inserire un nuovo record in una maschera "richieste" che, dopo aver inserito i valori nei campi Cognome e Nome non vi siano già stati inseriti omonimi nella tabella di riferimento "Richieste", che ha la chiave primaria non su questi campi.

In caso vi siano omonimi dovrebbe comparire un messaggio di avviso che impedisce l'inserimento del nuovo record

Suggerimenti? Grazie

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2011-02-15T16:28:34+00:00

ma la maschera richiestebis, ha come origine dati la stessa tabella richieste della maschera richieste (sarebbe meglio mettere un prefisso significativo davanti ai nomi degli oggetti...)?

hai dichiarato la variabile strNome come pubblica a livello di modulo maschera?

Copia e incolla il seguente codice

Option Compare Database

Option Explicit

Dim strNome As String

Private Sub cmdDuplicati_Click()

    If strNome = "" Then Exit Sub

    DoCmd.OpenForm "richiestebis", acNormal, , "[Cognome] = '" & Me!Cognome _

        & "' AND [Nome] = '" & strNome & "'", acFormReadOnly, acDialog

    strNome = ""

End Sub

Private Sub Nome_BeforeUpdate(Cancel As Integer)

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Set db = CurrentDb

    Set rst = db.OpenRecordset("Select Count(*) as ContaAnagrafiche From richieste " _

        & "Where Cognome = '" & Me!Cognome & "' AND Nome = '" & Me!Nome & "'")

    If rst!ContaAnagrafiche > 0 Then

        MsgBox "Anagrafiche Duplicate (" & rst!ContaAnagrafiche & ")"

        strNome = Me!Nome

        Me!Nome.Undo

        Cancel = True

    End If

    rst.Close

    db.Close

    Set rst = Nothing

    Set db = Nothing

End Sub

Private Sub Form_AfterInsert()

    strNome = ""

End Sub

David

La risposta è stata utile?

0 commenti Nessun commento

12 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-02-14T16:26:58+00:00

    Ok,

    incolla il seguente codice nel campo Prima di Aggiornare del campo Nome

        Dim db As DAO.Database

        Dim rst As DAO.Recordset

        Set db = CurrentDb

        Set rst = db.OpenRecordset("Select Count(*) as ContaAnagrafiche From Richieste Where Cognome = '" & Me!Cognome _

                  & "' AND Nome = '" & Me!Nome & "'")

        If rst!ContaAnagrafiche > 0 Then

            MsgBox "Anagrafiche Duplicate (" & rst!ContaAnagrafiche & ")"

            Cancel = True

        End If

        rst.Close

        db.Close

        Set rst = Nothing

        Set db = Nothing

    Se posso vorrei farti però notare che utilizzando questo codice solo sull'evento del campo Nome perderesti il controllo nel caso in cui venisse scritto prima il Nome e poi il Cognome oppure se venisse modificato un record già presente cambiando solo il campo Cognome.

    Per questo motivo ti avevo indicato l'evento Prima di Aggiornare della maschera.

    Se la tua esigenza invece è quella di avere subito il controllo allora invece di replicare il codice anche sull'evento del campo Cognome mi sembra più logica la soluzione proposta da Giorgio gestendo l'eventuale errore dovuto alla presenza di record duplicati nell'indice univioco creato sui due campi Nome e Cognome.

    David

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-02-14T16:14:58+00:00

    Ciao, avevo già provato con la soluzione di Giorgio ma non funziona, forse sbaglio qualcosa.....

    La soluzione di David non va del tutto bene perchè :

    * segnala l'errore solo quando si ripete il  cognome (invece deve ripertersi Cognome e Nome)

    * vorrei evitare all'utente di compilare tutti i campi della maschera, quindi chiedo se è possibile applicare la funzione all'evento dopo aggiornamento del campo Nome...

    Comunque grazie a entrambi, aspetto ragguagli

    ciao

    Mario

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-02-14T16:00:57+00:00

    Ciao Mario,

    puoi sempre creare un indice multicampo univoco composto da nome e cognome

    Per maggiori info vedi: Come aggiungere un indice a un database di Access in Access 2002 in particolare la sezione "Per creare un indice multicampo, attenersi alla seguente procedura:"

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-02-14T15:55:40+00:00

    Ciao Mario,

    Nell'evento Prima di aggiornare della maschera Richieste prova ad inserire questo codice

        Dim db As DAO.Database

        Dim rst As DAO.Recordset

        Set db = CurrentDb

        Set rst = db.OpenRecordset("Select Count(Cognome) as ContaCognomi From Richieste Where Cognome = '" & Me!Cognome & "'")

        If rst!ContaCognomi > 0 Then

            MsgBox "Cognomi Duplicati (" & rst!ContaCognomi & ")"

            Cancel = True

        End If

        rst.Close

        db.Close

        Set rst = Nothing

        Set db = Nothing

    David

    La risposta è stata utile?

    0 commenti Nessun commento