Perchè, con ADO, se inserisco un apostropo in una query SQL, ad esempio specificando “WHERE Via=Sant’Andrea”, ottengo un messaggio di errore?

Utente HTML.it
chiede

Perchè, con ADO, se inserisco un apostropo in una query SQL, ad esempio specificando “WHERE Via=Sant’Andrea”, ottengo un messaggio di errore?

Redazione HTML.it
risponde

In SQL le stringhe sono delimitate da due apostrofi ( ‘ ), quindi se la stringa stessa ne contiene uno ADO non è più in grado di interpretare correttamente la query. Per risolvere il problema è sufficiente raddoppiare gli apici contenuti nella stringa, ad esempio utilizzando la funzione Replace:

RS.Open “SELECT * FROM Rubrica WHERE Via = ‘” & Replace(“Sant’Andrea”, “‘”, “””) & “‘;”, DB

Per non dover riscrivere ogni volta la funzione Replace con tutti i suoi argomenti, è possibile utilizzare una semplicissima funzione che raddoppia gli apici:

Public Function StringaControllata(str) As String

StringaControllata = Replace(str, “‘”, “””)

End Function

Così facendo l’istruzione precedente diventa:

RS.Open “SELECT * FROM Rubrica WHERE Via = ‘” & StringaControllata(“Sant’Andrea”) & “‘;”, DB