2010-10-20 3 views
6

Я получаю имя клиента из раскрывающегося списка и использую это значение для запроса таблицы Excel, однако имя может содержать одну цитату (например, Adam's Meat). Это нарушает мое приложение и как я могу сделать запрос с переменной, которая содержит одну цитату?Как справиться с одной цитатой в Word VBA SQL-запрос?

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 

ответ

7

Где указать две одиночные кавычки '', один убежит другой и приведет сингл, попробуйте заменить его следующим образом:

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

Но не совпадает ли оно с именем клиента в электронной таблице? – Morgan

+0

Две одиночные кавычки будут рассматриваться как одна одинарная кавычка, когда происходит совпадение фактического значения. –

+0

Хорошо, мне пришлось изменить его на customerName = Replace (customerName, «'», «' '»). Спасибо Sarfraz – Morgan

7

Это оставляет вас широко открыты для атаки инъекции SQL , Я бы порекомендовал изменить это на параметризованный запрос вроде этого

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 
Смежные вопросы