2010-10-20 24 views
6

Tôi lấy tên khách hàng từ trình đơn thả xuống và sử dụng giá trị đó để truy vấn bảng tính excel, tuy nhiên, tên có thể chứa một trích dẫn đơn (ví dụ: Thịt của Adam). Điều này làm hỏng ứng dụng của tôi và làm cách nào để tạo truy vấn có biến chứa một trích dẫn?Làm thế nào để đối phó với báo giá duy nhất trong truy vấn 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 

Trả lời

7

đâu bạn chỉ định hai dấu nháy đơn '', người ta sẽ thoát khỏi khác và sẽ cho kết quả duy nhất, cố gắng để thay thế nó như thế này:

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

Nhưng sau đó nó sẽ không khớp với tên khách hàng trong bảng tính? – Morgan

+0

Hai dấu nháy đơn sẽ được coi là một dấu nháy đơn, khi kết quả giá trị thực tế xảy ra. –

+0

Ok, tôi phải thay đổi nó thành customerName = Thay thế (customerName, "'", "' '"). Cảm ơn Sarfraz – Morgan

7

này khiến bạn rộng mở cho một cuộc tấn công SQL injection . Tôi khuyên bạn nên thay đổi cài đặt này thành truy vấn được tham số hóa như thế này

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 
Các vấn đề liên quan