Ricerca di cognome con nome accentato od apostrofo

di il
15 risposte

Ricerca di cognome con nome accentato od apostrofo

Buongiorno, per velocizzare il lavoro ho creato un piccolo database con Access che mi permette di registrare tutte le attività di segreteria. Lavoro sul database a casa mia ed è estremamente semplice e serve allo scopo. L'unico problema è la ricerca di nomi con apostrofo o accentati.

In sostanza ho creato una solo tabella e tramite query dalla tabella estraggo i campi che mi interessano e sulla base delle nuove query creo le maschere. Sarà ridondante, ma funziona allo scopo.

Ho creato una maschera con ul pulsante che esegue questo script;

Private Sub Comando9_Click()
On Error GoTo Err_Comando9_Click

   Dim stDocName As String
   Dim stLinkCriteria As String

   stDocName = "000RIEPILOGO_msk"
   
   stLinkCriteria = "[dipendente]=" & "'" & Me![dipendente] & "'"
   DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Comando9_Click:
   Exit Sub

Err_Comando9_Click:
   MsgBox Err.Description
   Resume Exit_Comando9_Click
   
End Sub

Funnziona per tutti i cognomi ma per quelli in oggetto mi da ; errore di sintassi operatore mancante.

Su questo forun ho trovato il suggerimento di usare Replace.Ho modificato lo script in questo modo:

Private Sub Comando9_Click()
On Error GoTo Err_Comando9_Click

   Dim stDocName As String
   Dim stLinkCriteria As String

   stDocName = "000RIEPILOGO_msk"
   
   stLinkCriteria = "[Cognome]=" & " ' " & Replace([cognome], "'", "''") & " ' "
   DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Comando9_Click:
   Exit Sub

Err_Comando9_Click:
   MsgBox Err.Description
   Resume Exit_Comando9_Click
   
End Sub

Mi apre la maschera ma vuota.

La casella combinata ha origine in una query.

Ecco la maschera:

Spero di aver fatto tutto giusto, è la prima volta che posto.

15 Risposte

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Punto 1:

    classico errore da “niubbo” ;-)

    gli statement SQL da passare ad Access (e questo vale per QUALUNQUE DBMS)

    NON SI COSTRUISCONO MAI MEDIANTE CONCATENAZIONE DI STRINGHE

    MA

    si usano le “query parametriche”:

    https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/parameters-declaration-microsoft-access-sql

    PROPRIO per ovviare a DUE problemi fondamentali:

    1. tutti i “”casini"" con apici, apostrofi, accentate, caratteri NON latini, parentesi, virgole, punti e virgola, … , e chi piu' ne ha, piu ne' metta
    2. quello che viene chiamato SQL injection che SFRUTTA la concatenazione di stringhe ed il fatto di poter eseguire statement multipli per DISTRUGGERE un database

    Nota che 2) lo puo' fare il ragazzetto delle superiori, NON SERVE essere un super hacker! Ed e' ESTREMAMENTE banale farlo.

    Punto 2: per quelli con il pelo sullo stomaco (a meno che non si depilino ;-) )

    qualche volta e' un pasticcio scrivere correttamente il nome o il cognome di qualcuno: a volte l'apice c'e', a volte no, a volte si usano le accentate, a volte no, …

    Per ovviare a tali problemi esiste la funzione “Soundex”

    http://msaccess.erpmakers.com/Articles_MSAccess/0067-soundex%20function%20in%20microsoft%20access%20vba.php

    che permette di confrontare due stringhe “simili” e considerarle “uguali” a meno di piccole differenze (carattere accentato e non, apice/non apice, ecc)

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Anch'io voto la query parametrica. Considerato lo scopo di cui si parla…io eviterei di scontrarmi con la dura realtà delle stringhe con caratteri “rognosi”. Io punterei direttamente sul campo IDDipendente, quindi una casella combinata con 2 colonne che mostri [Cognome] & “ ” & [Nome].

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Ringrazio entrambi per la risposta. A prima vista mi sembra abbastanza complicato ma proverò nei prossimi giorni i vostri suggerimenti. A prima vista mi sembra tutto abbastanza complicato ma voglio provare comunque. Nel caso non riuscissi vi chiederò di suggerirmi qualche soluzione. Questa delle concatenazione di stringhe mi giunge assolutamente nuova idem per le query parametriche ma sono solo un autodidatta che copia qua e là in giro per il web. Vorrei compare qualche manuale ma non so cosa scegliere nel mare magnum dell'editoria. Se avete qualche suggerimento vene darei grato.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Ho provato e riprovato ma non riesco ad applicare i vostri consigli.

    Ho trovato una soluzione comunque: ho creato una semplicissima query parametrica con il campo cognome, ho creato una maschera basata sulla query e all'apertura di questa mi richiede di inserire il cognome, anche accentato e quindi mi apre una maschera. Funziona, trovo i cognomi accentati. 

    Non mi sembra una soluzione elegante ma funziona. Probabilmente le mie competenze sono troppo limitate.

    Grazie per la collaborazione e rinnovo la richiesta di suggerimento su qualche manuale per migliorare le mie competenze.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    22/01/2023 - Apache ha scritto:


    Ho provato e riprovato ma non riesco ad applicare i vostri consigli.

    Ho trovato una soluzione comunque: ho creato una semplicissima query parametrica con il campo cognome, ho creato una maschera basata sulla query e all'apertura di questa mi richiede di inserire il cognome, anche accentato e quindi mi apre una maschera. Funziona, trovo i cognomi accentati. 

    Non mi sembra una soluzione elegante ma funziona. Probabilmente le mie competenze sono troppo limitate.

    Grazie per la collaborazione e rinnovo la richiesta di suggerimento su qualche manuale per migliorare le mie competenze.

    Salve non ci dici niente sul suggerimento di Osvaldo Laviosa, indicizzare la Tab anagrafiche è la soluzione, ti chiedo c'è un motivo per non assegnare un id univoco? 

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Per Gianni

    In genere uso il CF per gli altri database che ho creato. In questo caso non posso creare una tabella anagrafica per motivo di velocità. Lavoro in ospedale e ci sono più di 7000 dipendenti, senza contare i servizi e i reparti. Non ho accesso a questi dati, anche volendo me li potrei procurare ma rischierei di crearmi inutili problemi. Nel caso in questione è una mia iniziativa personale per snellire il lavoro di segreteria. In meno di un anno ho creato 8000 record. 

    Con qst programma gestisco il movimento in/out di cartelle, posta, referti, esami, specializzandi, rinunce, e l'archivio storico dei dipendenti cessati, dei dipendenti cessati radioesposti, di tutti gli studenti che afferiscono al nostro servizio. E' una mole imponente di dati.

    Inizialmente usavo tabelle excel ma poi sono passato ad access. Inoltre i miei colleghi sono pigri e con poca esperienza di computer. Ho cercato di fare un sistema semplice ma che funziona. L'unico problema sono nomi con apostrofo e simili. Usando una query parametrica semplicissima ho aggirato il problema.

    Per sarebbe stato l'ideale usare la maschera cerca impòementando nello script un modo per cercare i nomi con caratteri speciali. Mi hanno detto che è sbagliato ma ma le mie competenze sono limitate. Ho provato con Replace ma senza esito.

    Ti ringrazio per il tuo intervento.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    22/01/2023 - Gianni55 ha scritto:


    Salve non ci dici niente sul suggerimento di Osvaldo Laviosa, indicizzare la Tab anagrafiche è la soluzione, ti chiedo c'è un motivo per non assegnare un id univoco? 

    Sei sicuro che Osvaldo abbia le idee chiare su cosa si intende per query PARAMETRICA…?

    Molti utilizzatori di Access scambiano la query parametrica con query con WHERE CONDITIONS… e cosi non è, basta guardare l'esempio suggerito da Migliorabile e capire la differenza sul metodo per valorizzare i PARAMETERS.

    Dico questo perché ul suggerimento di fare un campo calcolato con NOME e COGNOME ha veramente poco senso sfruttando i Parameters.

    Quindi siamo certi di aver compreso…?

  • Re: Ricerca di cognome con nome accentato od apostrofo

    07/01/2023 - OsvaldoLaviosa ha scritto:


    Io punterei direttamente sul campo IDDipendente, quindi una casella combinata con 2 colonne che mostri [Cognome] & “ ” & [Nome].

    Forse l'ho scritto poco chiaro. La casella combinata deve avere 2 colonne: IDDipendente (numerico), Dipendente: [Cognome] & “ ” & [Nome].
    Larghezza colonne: 0cm; 10cm
    Il parametro deve filtrare/guardare IDDipendente.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Ora capisco che ho confuso i due tipi di query, Sicuramente ho usato quella con WHERE CONDITIONS. Non è il max ma funziona.

    Sono andato sul primo link ma non riesco a capire quali parametri usare, sul secondo vale lo stesso discorso di prima. 

    Ho già specificato prima perché non posso usare l'IDDipendente che sarebbe la soluzione più ovvia.

    Ancora più semplice  e banale sarebbe nn utilizzare i caratteri speciali, ma la cosa mi disturba.

    Mi dispiace ma non il tempo né le necessarie competenze né attualmente nn ho il tempo di imparare.

    Ho anche importanti problemi di salute e nn riesco a stare dietro a tutto

    Grazie per i consigli.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Ciao, prova così.

    variabile= valore che vuoi confrontare
    variabile = Chr(34) & variabile & Chr(34)
    Me.Filter = "Nome_del_campo =" & variabile

    Non è infallibile, ma limita molto le eccezioni. Dovrebbe generare errore solo se hai queste "  virgolette nel nome. Per accenti ed apostrofi, anche più di uno non dovrebbe generare errore.
    Non è il massimo ed è una toppa, ma fino a quando non trovi il tempo di risolvere in altro modo, potrebbe essere una soluzione. 

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Per fratac:

    perdona la mia ignoranza in materia mo dove dovrei inserire la parte si script che hai mandato?

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Chr(34) è il codice ascii delle virgolette ".

    Praticamente in linkcriteria devi sostituire la sintassi “'” con chr(34). 

    Il vba si porta dietro un problema dai tempi della sua creazione legato all uso di " ed ' per collegare le stringhe.

    Ora il discorso è troppo lungo da fare sul forum e sopratutto scriverlo con il cellulare.

    In via molto semplificata tutto quello che è contenuto tra “  ” viene considerato testo, comprese gli apostrofi. 

    In particolari situazioni di concatenazioni di più stringhe si devono usare gli apostrofi per sostituire le virgolette, altrimenti si genera un errore.

    Per evitare di usare gli apostrofi che mandano in tilt sia il programmatore nello scrivere il codice, che l interprete vba, si scompone l assegnazione del valore in due passaggi, cosi che nel primo passaggio tutto quello contenuto tra le virgolette, compresi accenti e virgolette, verrà considerato testo, nel secondo passaggio ricostruisci il valore nel formato stringa corretto, cioè con le virgolette.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    Ringrazio tutti per i consigli ma erano di un livello troppo alto per le mie attuali capacità. Grazie ad un suggerimento di un utente del supporto Microsoft ho risolto il mio problema. 

    Nella parte stLinkCriteria ha modificato il mio script da, metto tra quadre per comodità:

    come lo avevo scritto io

    stLinkCriteria = "[dipendente]=" & "'" & Me![dipendente] & "'"

    come mi è stato suggerito

    stLinkCriteria = "[dipendente]=""" & Me![dipendente] & """"

    Non capisco come ma funziona perfettamente sia con accento che con l'apostrofo e sopratutto non devo fare cambiamenti, considerato il  mio poco tempo.

  • Re: Ricerca di cognome con nome accentato od apostrofo

    24/01/2023 - Apache ha scritto:


    Non capisco come ma funziona perfettamente sia con accento che con l'apostrofo e sopratutto non devo fare cambiamenti, considerato il  mio poco tempo.

    È identico a come ti avevo suggerito.

    Il mio è con piu passaggi perche fino a quando devi aprire e chiudere una sola stringa è facile scriverla tutta su una riga, se hai invece più elementi stringa da aprire e chiudere, la cosa si complica e metterlo tutta in una riga in modo esplicito diventa molto contorto.

Devi accedere o registrarti per scrivere nel forum
15 risposte