Ricerca record da casella riepilogo con record omonimi

di il
10 risposte

Ricerca record da casella riepilogo con record omonimi

Ciao,
nel mio db (albero genealogico) ho due tabelle. una query "accorpa" i campi che m'interessano da queste due tabelle e li visualizzo (e modifico) in maschera singola.
Ora nella maschera ho inserito una casella di riepilogo per eseguire una ricerca sui record ma non capisco come poter definire il criterio che mi restituisca il record corretto in caso di omonimia poiche i campi Surname e Given capita che siano uguali per più persone.
Mentre scrivo il cognome mi si deve "comporre" la lista (e funziona).

Dopo di questo però quando sono arrivato al Cognome Nome corretti ne appaiono tot (gli omonimi) e anche fino a qui tutto ok.
Però poi qualunque record (individuo) scelgo mi porta sempre a primo degli omonimi. (Ovviamente mi manca un riferimento univoco al record).

Ogni persona oltre al campo cognome e nome ha un campo univoco (title ad esempio ma vedendolo dalla maschera non mi aiuterebbe a capire il riferimento a quale tra gli omonimi sto guardando) e altri campi che potrei utilizzare per andare al record specifico senza sbagliare (ad esempio il campo che contiene la data di nascita (molto improbabile che abbia due omonimi nati esatttamente alla stessa data).

Quindi dovrei usare Surname (possibile duplicati), Given (possibile duplicati) e Bir_Date (univoco).

Per esempio: (Metto i nomi dei campi che utilizzo)
Surname: Rossi
Given: Mario
Title: P1
Bir_Date: 23 Gen 1900

Surname: Rossi
Given: Mario
Title: P44
Bir_Date: 2 Lug 1870

Surname: Rossi
Given: Mario
Title: P145
Bir_Date: 4 Apr 1666

Cosa devo inserire nell'origine riga della casella di riepilogo? (immagino una select dei tre campi Surname, Given e Bir_date ma non so come ...
E poi anche un evento After Update che mi restituisca il record corretto visualizzando nella lista surname, given e bir_date...

Mi potete aiutare ?
Grazie mille
Ciao
J

10 Risposte

  • Re: Ricerca record da casella riepilogo con record omonimi

    Vedi se ti possono aiutare questi
    https://support.office.com/it-it/article/aggiungere-una-casella-di-riepilogo-o-una-casella-combinata-70abf4a9-0439-4885-9099-b9fa83517603
  • Re: Ricerca record da casella riepilogo con record omonimi

    Ciao jfk105,

    nella tua query devi includere anche il campo (o i campi se più di uno) che si riferiscono alla chiave primaria della tabella che contiene i dati anagrafici.
    Non sapendo come è strutturata la tabella, né come è fatto la query, non posso essere più specifico.
    Qual è la chiave primaria della tua tabella?
  • Re: Ricerca record da casella riepilogo con record omonimi

    @gibra. Nella mia tabella "tbl" il campo univoco che relaziona l'altra tabella "Note" è il campo Title (relazione 1-1) che è Primary Key. Nella query ho inserito tutti campi della tabella "tbl" (quindi anche il Title) e dalla Note quelli che integrano la prima (ma non di nuovo il campo Title).

    @Osvaldo

    Ciao, grazie ma, niente non capisco come fare, nel senso: creo la casella combinata (non di riepilogo) con la creazione guidata, "Ricerca valori per casella combinata da tabella o query", scelgo la query e seleziono i tre campi (Surname, Given, Bir_date), scelgo l'ordinamento che preferisco (surname poi Given poi Bir_date). A questo punto mi fa scegliere quale campo usare come univoco e scelgo "Bir_date", poi "Memorizaa il valore per uso successivo",inserisco il nome del controllo che voglio, fine.
    Provo, non succede nulla... dove sbaglio?
    Vedo che sull'evento non aggiunge nulla e quindi sono punto e a capo perchè non so cosa inserire nella Routine avendo più campi...

    Allora ho provato : creo casella combinata (non di riepilogo) con la creazione guidata, "Trova valori...", seleziono i tre campi (Surname, Given, Bir_date), fine.
    Viene creata una macro sull'evento "Dopo Aggiornamento"che come azione è "CercaRecord" - Record: Primo Condizione Where :
    ="[Surname] = " & "'" & [Screen].[ActiveControl] & "'"
    Ma in questo modo nella casella non vedo nulla.

    Scusate ma proprio non ho capito la logica...
    In sostanza io ritengo che debba selezionare i record su cui eseguire la ricerca e per ovviare all'omonimia devo dirgli quale campo (la data di nascita) me lo renda riconoscibile e differente dagli altri record con nomi e cognomi omonimi e generare un evento dopo che scelgo il record per mostrarmelo.
    E' giusta la logica? Purtroppo non riesco a tradurlo in pratica
    Grazie, scusate la dabbenaggine
    Ciao, J
  • Re: Ricerca record da casella riepilogo con record omonimi

    Jfk105 ha scritto:


    @gibra. Nella mia tabella "tbl" il campo univoco che relaziona l'altra tabella "Note" è il campo Title (relazione 1-1) che è Primary Key.
    Non so cosa sia il campo Title, ma se dici che è univoco ci credo, quindi non dovresti avere alcun problema nel senso che la ricerca dovresti farla su questo campo, non su cognome e nome.
    Intendo dire che l'utente cercherà il nome ma tu, per identificare il record univocamente devi basarti esclusivamente su Title, il campo chiave.
    Sia in lettura, che in scrittura.

    Jfk105 ha scritto:


    In sostanza io ritengo che debba selezionare i record su cui eseguire la ricerca e per ovviare all'omonimia devo dirgli quale campo (la data di nascita) me lo renda riconoscibile e differente dagli altri record con nomi e cognomi omonimi e generare un evento dopo che scelgo il record per mostrarmelo.
    E' giusta la logica?
    No, non è giusta perché a parte l'omonimia vi possono sempre essere casi di omocodia:
    Omocodia - Wikipedia
    https://it.wikipedia.org/wiki/Omocodi

    Ovvero persone che si chiamano uguale e sono nate lo stesso giorno.
    Per cui non puoi avere il cmapo bird_date univoco.
    Che guida, e deve guidare, la selezione è sempre il chiave primaria che, come tale, è univoca.

    Personalmente, come prassi abituale, ho sempre usato un campo ID numerico che prende il nome dalla tabella:
    - Clienti -> IDCliente
    - Indirizzi -> IDIndirizzo
    - Fatture ->IDFattura
    e così via.
  • Re: Ricerca record da casella riepilogo con record omonimi

    Io devo essere sincero sincero nella mia ormai riconosciuta cocciutaggine: non ho capito cosa devi fare davvero, intendo PASSO PASSO e con i nomi propri di riferimenti a tabelle, campi, maschere ecc...forse non è così importante!!!
    Di conseguenza non sono certo di averti dato il suggerimento giusto/adatto. Noto solo che hai bisogno di FARE LEVA su un campo UNIVOCO. gibra suggerisce sempre IDCliente (o IDPersona, di cosa si parla?)...Numerico è sempre più preferibile di un campo Testo. Tu hai detto che il campo Title è sempre e sicuramente univoco. Puoi puntare su quello (se vuoi).
    Poi però, almeno io, non capisco che cosa ci devi fare.
  • Re: Ricerca record da casella riepilogo con record omonimi

    Grazie mille Gibra. Per l'omocodia nom mi preoccupo (di solito gli omonimi che ho sono sempre nonno-nipote , bisnonno-nipote ecc. Non ho nessun caso di omonimi nati nello stesso giorno, mese, anno). Siccome i dati li inserisco io di questo non mi preoccupo, davvero.
    Quindi però non ho chiaro come dovrei procedere... Come forse hai letto dalla mia risposta precedente ho tentato con due creazioni guidate di casella combinata ma non funzionano perchè mi manca di capire queste cose:
    1) Quando mi dice di scegliere tra "Ricerca valori per casella combinata da tabella o query", "Immissione personalizzata" oppure "Trova un record nella maschera basato sul valore selezionato nella casella combinata" cosa devo scegliere?
    2) Access 2016 con l'ultima scelta ( "Trova un record nella maschera basato sul valore selezionato nella casella combinata", che reputo quella giusta) genera una select sull'origine dati
    SELECT [Query_Globale].[Surname], [Query_Globale].[Given], [Query_Globale].[Bir_Date], [Query_Globale].[Title] FROM [Query_Globale] ;
    e una macro sull'evento "Dopo Aggiornamento"che come azione è "CercaRecord" - Record: Primo Condizione Where :
    ="[Surname] = " & "'" & [Screen].[ActiveControl] & "'"
    Ho poi aggiunto manualmente l'ordinamento in base al Surname e Given.

    Così vedo correttamente tutte le colonne (Surname,Given,Bir_Date,Title) nella casella, ma quando eseguo la ricerca (credo di aver capito che) solo il cognome (Surname) discrimina il record.
    Come correggo quindi la macro per includere anche il nomem(Given) e il Title (o Bir_Date) per evitare il discorso omonimia?
    Mi puoi fare un esempio (anche in routine vba, se preferisci, poi la sostituisco nell'evento togliendo la macro)
    Grazie mille, ciao
    J
  • Re: Ricerca record da casella riepilogo con record omonimi

    Forse avevo suggerito bene, ma noto che non hai capito il senso del campo CHIAVE PRIMARIA (quello univoco).
    Direi che fare una ricerca su MULTICAMPO è un bel "casino". Un solo campo chiave univoco è la cosa migliore.
    Devi prendere una decisione seria su quale deve essere sto campo chiave primaria univoco. Usa un IDCliente o IDPersona, è la soluzione migliore, standard, consolidata.
    Una volta eletto/scelto il campo chiave primaria, ripeti tutta la procedura guidata e scegli "Trova un record nella maschera basato sul valore selezionato nella casella combinata". Abbi cura di NASCONDERE il campo ID chiave primaria e otterrai l'effetto visivo desiderato. La procedura guidata fa tutto lei. Non andare a modificare il codice o macro sottostante manualmente, se non sai dove mettere mano, rischi di fare solo pasticci.
    N.B.: se leggi attentamente il documento Word che ti ho suggerito (il secondo link), si parla anche di un caso su campo testo univoco che inciampa però sulla possibilità di avere testo con l'apostrofo. Io riuscii a suo tempo a trovare la soluzione (leggi il seguito), ma come puoi ben capire, si tratta di complicarsi la vita.
    Usa vivamente UN SOLO CAMPO numerico ID.
  • Re: Ricerca record da casella riepilogo con record omonimi

    Ciao Osvaldo, il campo Title è chiave primaria ed univoco. Si chiama Title perchè lo eredito da una tabella che scarico e che non posso modificare...
    ripeti tutta la procedura guidata e scegli "Trova un record nella maschera basato sul valore selezionato nella casella combinata". Abbi cura di NASCONDERE il campo ID chiave primaria e otterrai l'effetto visivo desiderato
    Ho provato una procedura guidata utilizzando solo con il campo Title per vedere se funzionava (chiaramente come test poichè il campo Title non significa molto visivamente!) e funziona. Ho controllato la macro generata e vedo che come condizione where ha :
    ="[Title] = " & "'" & [Screen].[ActiveControl] & "'"

    Quindi sulla mia precedente casella combinata (che come "costruzione" era già corretta) ho modificato la macro che (non ho idea del perchè) inseriva sempre e solo
    sull'evento "Dopo Aggiornamento":

    ="[Surname] = " & "'" & [Screen].[ActiveControl] & "'"

    in

    ="[Title] = " & "'" & [Screen].[ActiveControl] & "'"

    e funziona.

    Mi rimane solo di capire come eventualmente visualizzare Surname e Given concatenati...
    MA già così fa quello che volevo, grazie mille.
    Ciao
    J
  • Re: Ricerca record da casella riepilogo con record omonimi

    Ok sono riuscito a fare tutto.
    Ho modificato la select così :

    SELECT [Query_Globale.Surname] & " " & [Query_Globale.Given] AS NomeCompleto, Query_Globale.Bir_Date, Query_Globale.Title
    FROM Query_Globale
    ORDER BY [Query_Globale.Surname] & " " & [Query_Globale.Given], Query_Globale.Bir_Date;

    e visualizzato le colonne che m'interessano nascondendo il title.
  • Re: Ricerca record da casella riepilogo con record omonimi

    Jfk105 ha scritto:


    Mi rimane solo di capire come eventualmente visualizzare Surname e Given concatenati...
    Vedo che hai risolto. Ipotizza anche questa soluzione.
    1. Pensa a una query dove importi la tabella (come si chiama?) Persone
    2. Nella prima colonna sottostante piazzi il campo chiave primaria: hai deciso che sia Title
    3. Nella seconda colonna scrivi una stringa di concatenazione, io me la giocherei così:
    Nominativo: [Surname] & " " [Given] & " (" & Format([Bir_Date];"aaaa/mm/gg") & ")"
    e ci metti Ordinamento: Crescente
    4. Salva la query con nome PersoneOrdinate
    5. Ripeti la procedura guidata richiamando la query PersoneOrdinate e nascondendo la prima colonna
Devi accedere o registrarti per scrivere nel forum
10 risposte