| Tables |
| 1.3 Comporre stringhe SQL (tenendo conto degli apici). |
| NicoS |
|
(D) Come posso risolvere il problema degli apici quando creo una stringa SQL con filtro su campo testo? (R) Capita molto spesso di eseguire query o utilizzare il controllo Data per aprire un recordset di una tabella utilizzando stringhe SQL, molte volte per esigenza sono parametriche, come ad esempio: "SELECT ALL * FROM Canzoni " & "WHERE Titolo = '" & tbTitolo.Text & "';" E' un piccolo filtro che seleziona le canzoni che hanno un certo titolo, che ricaviamo dal contenuto di una textbox di nome tbTitolo. SEMBRA CHE FUNZIONI SEMPRE, ma purtroppo non è vero: se applichiamo il filtro per trovare la canzone "SELECT ALL * FROM Canzoni WHERE Titolo = 'Silvia's theme';" dove ovviamente c'è un errore perché il titolo di ricerca è diventato ...WHERE Titolo = 'Silvia''s theme';" Quindi gli apici nelle stringhe devono essere raddoppiati (è lo stesso problema che si ha in VB con le virgolette "). La funzione proposta risolve questo problema e nell'esempio verrà utilizzata così: "SELECT ALL * FROM Canzoni " & _ "WHERE Titolo = '" & _ ComponiStringaPerSQL(tbTitolo.Text) & "';" La funzione ComponiStringaPerSQL prende la stringa passata per parametro e ritorna la stringa con gli apici raddoppiati.
Public Function ComponiStringaPerSQL (ByVal stringa As String) As String
Dim n As Long, posiz As Long
Dim h As String
On Local Error Resume Next
If IsNull(stringa) Then
h = ""
GoTo Fine
End If
h = stringa: posiz = 1
n = InStr(posiz, h, "'")
While n > 0
h = Left$(h, n) & "'" & Right$(h, Len(h) - n)
posiz = n + 2
n = InStr(posiz, h, "'")
Wend
Fine:
ComponiStringaPerSQL = h
End Function
|