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 |