2010-10-20 4 views
6

Ricevo un nome cliente dal menu a discesa e utilizzo quel valore per interrogare un foglio di calcolo Excel, tuttavia, il nome può contenere una virgoletta singola (esempio: Adam's Meat). Questo rompe la mia domanda e come faccio a fare una query con una variabile che contiene una singola citazione?Come gestire una virgoletta singola nella query SQL VBA di Word?

Private Sub cboCompany_Change() 
      Dim customerName As String 
      customerName = cboCompany.Value 

rsT.Open "SELECT Customer, Postcode, Address1, Address2, State, Country FROM Customers WHERE Customer = '" & customerName & "'", cn, adOpenStatic 

risposta

7

Dove si specificano due apici '', sfuggirà l'altro e si tradurrà in singolo, provare a sostituire in questo modo:

customerName = Replace(customerName, "'", "''") 
+0

Ma allora non corrisponderà al nome del cliente nel foglio di calcolo? – Morgan

+0

Le due virgolette singole saranno considerate come una virgoletta singola, quando avviene la corrispondenza del valore reale. –

+0

Ok, ho dovuto cambiarlo in customerName = Replace (customerName, "'", "' '") però. Grazie Sarfraz – Morgan

7

Questo ti lascia spalancata ad un attacco SQL injection . Consiglierei di cambiarlo in una query parametrizzata come questa

Dim cmd as NEW ADODB.Command 

With cmd 
.CommandText=”SELECT foo from tblBar where foo=?” 
.Parameters.Append .CreateParameter("@foo", adVarChar, adParamInput, 50, “What ever you want”) 
.ActiveConnection=dbCon 
.CommandType=adCmdText 
End With 

Set rst=cmd.execute