Davy ha scritto:
...sto testando questo codice di SQL injection ...
No, hai capito male, la SQL injection è un tipo di "attacco" che sfruttando il sistema di aggiungere "parti variabili" ad una query lasciate alla libertà dell'utente possono creare danni anche notevoli.
Quello che stai facendo è la concatenazione di stringhe che contengono anche "parametri" (virgolette non casuali, non sono parametri in senso proprio, come indicato sopra). Di per sè, se l'operazione viene fatta con particolare attenzione, non crea problemi, però appunto bisogna usare molta attenzione, in particolare nelle query d'azione, ma non solo.
Quanto già suggerito da Oregon, cioè racchiudere la stringa da due apici singoli, basta e avanza per il caso specifico.
In generale, in VBA, se all'interno di una stringa vuoi inserire il doppio apice devi ricordardi di raddoppiarlo affinché venga considerato parte della stringa e non come delimitatore della stringa stessa. Un esempio dovrebbe chiarire
Dim strMiaStringa As String
'Voglio ottenere questa stringa: A me piace scrivere "tutto" tra virgolette
strMiaStringa = "A me piace scrivere ""tutto"" tra virgolette"
Debug.Print strMiaStringa
Questa è la versione più semplice. Pensa ad esempio ad una variabile che contenga la stringa "tutto" e che voglia usare quella per costruire la stessa stringa finale
Dim strMiaStringa As String
Dim strTutto as String
'Voglio ottenere questa stringa: A me piace scrivere "tutto" tra virgolette
strTutto = "tutto"
strMiaStringa = "A me piace scrivere """ & strTutto & """ tra virgolette"
Debug.Print = strMiaStringa
Perché ci sono 3 doppiapici consecutivi? i primi due sono un doppioapice raddoppiato, per indicare che il doppioapice (1 volta sola, ovviamente) fa parte del contenuto della stringa e il terzo chiude la stringa
Nella finestra immediata vedi il contenuto di strMiaStringa, con il doppioapice prima e dopo la parola tutto.
Esempio esasperato che puoi incrociare
Dim strDoppioApice As String
strDoppioApice = """"
Debug.Print strDoppioApice
Nella finestra immediata apparirà un doppioapice e basta, nonostante nel codice ce ne siano ben 4 consecutivi.
Spiegazione: il primo e l'ultimo servono a delimitare una stringa su VBA, i due centrali sono il modo con cui in VBA si fa capire che si vuole mettere un doppioapice in una stringa.
Questo fa parte delle conoscenze che uno deve avere radicate per poter gestire le stringhe in VBA. Niente di impossibile, solo un po' di tempo, alcuni errori all'inizio ma poi con il Debug.Print di sicurezza, perché non si sa mai, se ne acquisisce padronanza e via!
Da non sottovalultare l'uso dell'equivalente codice ASCII da usare con Chr$: il doppio apice è Chr$(34)
Con quello l'ultimo esempio sarebbe di una banalità disarmante
Dim strDoppioApice As String
strDoppioApice = Chr$(34)
Debug.Print strDoppioApice
mentre gli altri due diventerebbero rispettivamente
'Primo esempio, con Chr$(34)
strMiaStringa = "A me piace scrivere " & Chr$(34) & "tutto" & Chr$(34) & " tra virgolette"
'Secondo esempio
strMiaStringa = "A me piace scrivere " & Chr$(34) & strTutto & Chr$(34) & " tra virgolette"
Come vedi a volte aiuta, a volte complica. Dipende dal caso specifico.