2010-10-20 20 views
6

Je reçois un nom de client à partir de la liste déroulante et utilise cette valeur pour interroger une feuille de calcul Excel, cependant, le nom peut contenir une seule citation (exemple: Adam's Meat). Cela casse mon application et comment puis-je faire une requête avec une variable qui contient un seul devis?Comment faire face à guillemet simple dans la requête SQL VBA 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 

Répondre

7

Si vous spécifiez deux apostrophes '', on échapper à l'autre et se traduira par simple, essayez de le remplacer comme ceci:

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

Mais alors cela ne correspondra pas au nom du client dans la feuille de calcul? – Morgan

+0

Les deux guillemets simples seront considérés comme un seul guillemet, lorsque la correspondance de valeur réelle se produit. –

+0

Ok, j'ai dû le changer en customerName = Replace (customerName, "'", "' '"). Merci Sarfraz – Morgan

7

Cela vous laisse grand ouvert à une attaque par injection SQL . Je recommanderais de changer ceci en une requête paramétrée comme ceci

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