VBA igonra accento

di il
17 risposte

VBA igonra accento

Tramite VBA recupero il il cognome di un utente in questo modo Me!COGNOME 

Esempio: se il cognome è MASZYNSKI vba mi restituisce MASZYNSKI

Come si può evitare?

17 Risposte

  • Re: VBA igonra accento

    Il VBA non mangia gli accenti... ma il tuo post non è comprensibile in quanto l'editor probabilmente sopprime qualche cosa... quindi le 2 Parole risultano uguali.

    Come hai impostato la proprietà Unicode della tabella...?

  • Re: VBA igonra accento

    Le proprietà del campo

  • Re: VBA igonra accento

    Dov'è l'accento?

    Che significa vba mi restituisce?

    19/03/2025 - lucavalentino ha scritto:

    Me!COGNOME

    È il controllo.. devi prendere il valore che suppongo.sia testo... Ma prelevarlo in che modo? Valorizzando una variabile della stessa natura?

  • Re: VBA igonra accento

    Forse ho scritto male l'esempio:

    Il campo cognome ha valore MASZYNKI (con la n con accetto) e recupero il valore con Me!COGNOME che mi restituisce MASZYNKI (n senza accento). Insomma con i cognomi stranieri per lo piu

  • Re: VBA igonra accento

    Quindi è solo un problema di font...

    Come quando leggi bàbà e importi b%b%

  • Re: VBA igonra accento

    Ciao,

    is problem....  nota: per rappresentare la enne accentata qui di seguito la rappresento come   N(accentato)

    In visualizzazione Tabella o in visualizzazione Query il carattere N(accentato) viene correttamente rappresentato: (test con due tipi di Fields : Testo Breve e Testo Lungo)

    se si recupera l'informazione da Form, da DAO da ADO, etc... il carattere viene convertito in "N"  e il suo carattere Unicode è = "Ñ"  che come carattere in ChrW viene rappresentato con il codice 323 che è = "N" ( ? ChrW(323) = N )

    Da notare che anche l'editor VBA già pone il problema di conversione :
    Fare questo TEST 

    • Mettere in Copia il carattere N(accentato)
    • posizionarsi nell'Editor di Vba
      • eseguire l'Incolla

    .
    Risultato di incolla = a Ñ e se si converte in UTF-16  diventa = N

    VBA usa UTF-16 e non riesce a gestire il carattere N(accentato) che verrà rappresentato come carattere N

    Memtre se leggiamo il carattere N(accentato) e lo esportiamo in un file TXT per esempio in UTF 8 :

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim stm As Object
    Dim testo As String
    
    
    ' REPERIRE IL CARATTERE DALLA TABELLA A 
    
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT Descrizione FROM A WHERE CODICE='1'", dbOpenSnapshot)
    
    If Not rs.EOF Then
        testo = rs!Descrizione
    End If
    rs.Close
    Set rs = Nothing
    Set db = Nothing
    
    
    ' ESPORTARE IN UN FILE DI TESTO PER ESEMPIO IN UTF 8
    
    Set stm = CreateObject("ADODB.Stream")
    stm.Type = 2
    stm.Charset = "UTF-8"
    stm.Open
    stm.WriteText testo
    stm.SaveToFile "c:\xxxxxxxxx\test_unicode.txt", 2
    stm.Close
    Set stm = Nothing 

    Il risultato sarà come qui rappresentato con  il carattere N(accentato) esportato correttamente:

    .
    Insommaaaaa... na' cosa di questo tipo.  ;-)

  • Re: VBA igonra accento

    Il problema è un pochettino più complesso.

    Devo recuperare da VBA il cognome esatto che può avere qualsiasi tipo di caratteri accentati che non si conosce precisamente perché dipende dal record del cognome. 

  • Re: VBA igonra accento

    20/03/2025 - lucavalentino ha scritto:

    Il problema è un pochettino più complesso.

    Devo recuperare da VBA il cognome esatto che può avere qualsiasi tipo di caratteri accentati che non si conosce precisamente perché dipende dal record del cognome. 

    Si ho capito !!! ;-))

    io ho solo dimostrato/mostrato il fatto per il quale nella tabella di conversione caratteri in uso in Vba , tale carattere accentato non esiste e viene trasformato in N senza accento.
    Anzi, esiste con quel codice ma corrisponde a Ñ che a sua volta corrisponde in N (senza accento) ... anche l'editor di vba internamente lo trasforma. 
    Anzi esternamente se cambi il font dell'editor in un font europa occidentale, lo si vede correttamente, ma se poi deve essere manipolato allora access internamente lo trasforma senza accento.

    Mentre se si legge il record per esempio in ADO o in DAO e si esporta per esempio in un file txt, allora il carattere accentato non viene manipolato dalla codifica interna di msaccess e come ho dimostrato, viene esportato correttamente.

    ;-)  https://www.brescianet.com/appunti/vari/unicode.htm

    E'un bug che ha sempre avuto Ms Access e si presenta quando egli stesso deve manipolare tali caratteri per restituirli in variabili stringa o variant.

  • Re: VBA igonra accento

    Per aggirare ho trovayo ina funzione che converte i caratteri accentati, ma purteoppo non sono tutti.

    come si possono aggiubgere caratteri unicode

    Public Function StripAccent(thestring As String)
    Dim A As String * 1
    Dim B As String * 1
    Dim i As Integer
    Const AccChars = "ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóôõöùúûüýÿ"
    Const RegChars = "SZszYAAAAAACEEEEIIIIDNOOOOOUUUUYaaaaaaceeeeiiiidnooooouuuuyy"
    For i = 1 To Len(AccChars)
    A = Mid(AccChars, i, 1)
    B = Mid(RegChars, i, 1)
    thestring = Replace(thestring, A, B)
    Next
    StripAccent = Trim(thestring)
    End Function
    
  • Re: VBA igonra accento

    21/03/2025 - lucavalentino ha scritto:

    Per aggirare ho trovayo ina funzione

    Quella funzione elimina tutti i caratteri accentati da una stringa, tu hai chiesto di fare esattamente il contrario,  ovvero MANTENERE gli accenti.

    Sei sicuro di capire quello che fai?

  • Re: VBA igonra accento

    Sono sicuro di quello che faccio

    Era solo un modo per recuperare esattamente illn qualche modo il cognome

  • Re: VBA igonra accento

    21/03/2025 - lucavalentino ha scritto:

    Per aggirare ho trovayo ina funzione che converte i caratteri accentati, ma purteoppo non sono tutti.

    Ciao,

    partiamo dal fatto e dalla dichiarazione netta che i problemi "non si aggirano" ma "si risolvono" 

    Secondo : la funzione che proponi non ha nessun senso. Nel caso si deve fare ll'inverso e cioè...

    • si prendono i caratteri della stringa da analizzare e ogni carattere si confrontano con quelli di tabella caratteri in uso dal sistema
      • se il carattere esiste anche in tabella non si fa nulla
      • se il carattere non esiste in tabella allora si sostituisce il carattere con qualcos'altro

    Ma adogni modo invece di creare delle costanti, conviene sicuramente costruire una tabella con due colonne dove nella prima si immetteno i caratteri "speciali/accentati"  e nella seconda colonna si immettono i caratteri da utilizzare in sostituzione.

    Ma a parte le varie tecniche per espletare tale compito, ti sei domandato come elencare per esempio la N(accentta) dal momento in cui sia l'editor che la conversione interna di msaccess non la riconosce?

    Ma questo è solo un piccolo dettaglio.

    Veviamo al dunque... alcune domande per capire meglio:

    1. Quando inserisci un nome che richiede la N(accentata), come fai da tastiera a inserire tale carattere?
    2. Queste informazioni provengono da un altro database e le importi nel tuo database MsAccess?
    3. Queste informazioni, dove esistono anche i caratteri accentati e/o speciali, che tipo di manipolazione devono subire?
      1. per realizzare una visualizzazione?
      2. per realizzare una ricerca?
      3. per realizzare un report?

    .
    E' ovvio che per ogni scenario sopra elencato, potrebbe essere necessario un approccio diverso.

    Voglio dire, se si chiede un analisi del problema con una risposta adeguata, è necessario formulare una domanda ben strutturata ed esaustiva con relativa analisi e scopo.

    Diversamente, stare sul vago, si traduce solo in una perdita di tempo per tutti.

    E comunque i problemi si risolvono... e non si aggirano  ;-)

  • Re: VBA igonra accento

    Scusa ma fatico a seguire... se già Access li converte in caratteri Standard, come hai tu stesso indicato sopra... a cosa serve quel codice oltre a perdere un sacco di tempo..?

    Concordo con Antonio, hai chiesto di vedere i caratteri corretti perchè venivano convertiti, ed ora li sostituisci con caratteri Standard...

    Francamente devo essermi perso qualche cosa.

  • Re: VBA igonra accento

    21/03/2025 - @Alex ha scritto:

    Francamente devo essermi perso qualche cosa.

    Pure io @Alex  ;-)

    Comunque la soluzione esiste.

    Ho fatto nei post precedenti, degli esempi "dove" e "non dove" tali caratteri vengono modificati dalla conversione interna di MsAccess nel momento in cui si eseguono talune operazioni che portano alla manipolazione di queste stringhe con risultati non desiderati.

    Quindi ho dimostrato che nei form, negli oggetti query e nelle tabelle il carattere (in questo caso la N(accentata), rimangono inalterati.

    Ma non solo, si dimostra anche che con il DAO o con l' ADO si evita la manipolazione di MsAccess e si conservano tali caratteri speciali come la N(accentata)

    Adesso, trovato dove si verifica "l'inghippo" e stabilito dove invece tale "inghippo" non si verifica, basta adottare l'approccio più consono secondo il proprio scenario.

    Ma lo scenario non è ben descritto nel Thread e quindi.... ??? 

    quindi... comunque la Soluzione Esiste.  ;-)

Devi accedere o registrarti per scrivere nel forum
17 risposte