Apice in un filtro

Anonimo
2019-05-08T09:25:59+00:00

Buongiorno a tutti,

in una maschera continua ho inserito una casella combinata dove viene selezionato un filtro.

Questa casella prende i dati da una tabella, il filtro agisce sulla maschera per mezzo della seguente routine:

Private Sub cboLISTGENE_AfterUpdate()

    If Left(Me.cboLISTGENE, 1) = "(" Then

        Me.FilterOn = False

    Else

        Me.Filter = "LISTINO='" & Me.cboLISTGENE & "'"

        Me.FilterOn = True

    End If

End Sub

Private Sub Form_Load()

    cboLISTGENE = "(TUTTI)"

End Sub

con il valore (TUTTI) viene automaticamente azzerato il filtro.

I valori della tabella dove viene preso il filtro sono:

CREATIVE BRAND'S LAB
MD COSMETICS
TAILOR MADE

ma, quando vado a selezionare il "CREATIVE BRAND'S LAB" viene segnalato il seguente errore:

Errore di Run-time '3075'

Errore di Sintassi (operatore mancante) nell'espressione della query 'LISTINO='CREATIVE BRAND'S LAB".

per evitare l'errore devo togliere l'apice dal BRAND'S ma, non mi piace come soluzione.

Qualcuno sa come superare l'inconveniente?

Grazie a tutti per la collaborazione

Ciro

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

7 risposte

Ordina per: Più utili
  1. Anonimo
    2019-05-09T07:15:52+00:00

    ciao Ciro,

    se non esponi cosa hai testato come facciamo ad aiutarti…? vedo di mostrarti qualche esempio semplice.

    Assumendo di dover filtrare per cognome guarda l'ultimo in elenco con l'apostrofo.

    filtro per Davolio :

    strFilter = "cognome='" & .cboCognome & "'"

    filtro per dall'acqua  con la stessa modalita' sopra mostrata ed ottengo l'errore :

    filtro con la replace come ti ho consigliato ed ottengo il risultato voluto :

       strFilter = "cognome='" & Replace(.cboCognome, "'", "''") & "'"

    per il codice VBA ho riportato solo l'istruzione saliente contenuta nel blocco with...end with

    HTH e facci sapere.

    Ciao, Sandro.

    La risposta è stata utile?

    3 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2019-05-08T10:12:32+00:00

    ciao Ciro,

    utilizza una replace nella cboLISTGENE in modo da sostituire l'apice con un doppio apice.

    E' molto semplice quindi non ti posto il codice specifico, se hai problemi fai sapere.

    La funzione nativa si chiama proprio replace.

    Facci sapere.

    Sandro.

    ps. se la combo rende un valore null o nullString il filtro viene gestito correttamente?

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  3. Anonimo
    2019-05-08T11:51:50+00:00

    ciao Ciro,

    mi sa che non hai colto quanto suggerito...

    il filtro equivale all'applicazione di una clausa where in un predicato sql.

    in esso, le stringhe sono delimitate dagli apici.

    Se una stringa contiene un apice quando viene compilata l'apice che per te e' l'apostrofo per la macchina e' la chiusura della stringa.

    come si ovvia al fatto di fare collimare le due cose….? si raddoppiano gli apici.

    Intanto prova questo.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-05-08T11:44:01+00:00

    Ciao,

    fermo restando che sarebbe stato opportuno creare una tabella dei "ListGene" e quindi lavorare con il corrispondente ID per non cadere nelle problematiche degli apici nel testo, puoi provare la seguente sintassi:

      Me.Filter = "LISTINO="""" & Me.cboLISTGENE & """

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2019-05-08T10:30:35+00:00

    Ciao Sandro

    intanto ti ringrazio per la risposta immediata, sinceramente non capisco cosa intendi, se sostituisco l'apice con il doppio apice poi come fa ad esercitare il filtro? nel campo "LISTINO" viene utilizzato il termine con l'apice.

    Quanto al valore null, se capita restituisce un elenco vuoto ma, teoricamente non dovrebbe capitare, infatti al lancio della maschera la combo si predispone su (TUTTI).

    La risposta è stata utile?

    0 commenti Nessun commento