2013-10-11 46 views
1

'的字段中插入数据我正在追加到正在工作的记录集的表数据,直到我找到一个法语客户端,该客户端名称中包含''。这里是代码:如何在包含'

StrSQL3 = " INSERT INTO [ATB] (SLSMAN, NOCARDEX, email, CLIENT, " 
StrSQL3 = StrSQL3 & " NOTRANS, InvoiceDate, Current, [31-60], [61-90], [90+]) " 
StrSQL3 = StrSQL3 & " VALUES ('" & myRecordSet.Fields(0).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(1).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(2).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(3).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(4).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(5).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(6).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(7).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(8).Value & "', " 
StrSQL3 = StrSQL3 & " '" & myRecordSet.Fields(9).Value & "') " 
    If OldEmail = email Then 
    DoCmd.RunSQL StrSQL3 

这一切都很好,直到我得到这个客户:位置D'Outils Nicolet。 由于'在客户名称中,我得到错误3075 - 缺少操作员。

有没有人知道解决这个问题的方法?

+2

VBA是否支持参数化SQL?因为这是去这里的方法...... –

回答

3

当您使用参数查询时,引号不是问题。

Dim db As DAO.Database 
Dim qdf As DAO.QueryDef 
Dim strInsert As String 

strInsert = "INSERT INTO [ATB] (" & vbCrLf & _ 
    "SLSMAN, NOCARDEX, email, CLIENT, " & _ 
    "NOTRANS, InvoiceDate, [Current], " & _ 
    "[31-60], [61-90], [90+])" & vbCrLf & _ 
    "VALUES (p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);" 
Debug.Print strInsert 

Set db = CurrentDb 
Set qdf = db.CreateQueryDef("", strInsert) 
qdf.Parameters("p0").value = MyRecordSet.Fields(0).value 
qdf.Parameters("p1").value = MyRecordSet.Fields(1).value 
' add the remaining parameter values 
qdf.Execute 
Set qdf = Nothing 
Set db = Nothing 
+1

值得注意的是,除了解决问题,参数化查询也解决了[SQL注入](http://en.wikipedia.org/wiki/SQL_injection) – Steve

+0

谢谢Hans for即时响应。我不清楚什么是 –