我有一个使用评估和其他工具收集客户信息的数据库。通常在评估中,数据中有双引号 - 正如可能预期的那样 - 捕获直接引用。当我运行sql更新(使用VBA访问前端到SQL Server 2008 R2后端)时,它会炸毁数据中的双引号。在过渡期间,我曾要求员工在输入数据时使用单引号,但这是一个不可持续的解决方案,因为他们忘记了,当程序碰到双引号时程序崩溃了。数据类型为nvarchar(max)。
当前的VBA字符串如下所示:
strInsertSQL =“INSERT INTO tblIRPDetail(IRPID,SectionID,Challenge,Goal,Objective,Intervention,IntDate)VALUES(”& intNewID&“,”& intSection&“,”“& strChallenge& “”,“”“”& strGoal&“”“,”“”& strObjective&“”“,”“”& strIntervention&“”“,”“”& strIntDate&“” “);”
基本上任何strVariables都可以有任何组合的单引号或双引号。它适用于单引号但不适用于双引号。当然这是一个相当普遍的问题,我希望有人有一个简单的解决方案!
提前致谢!
答案 0 :(得分:0)
参数化查询并将值添加为参数。
答案 1 :(得分:0)
给我一点时间和我用来执行此方法的方法。
同时为什么不做Replace(val, """, "'")
?这样,字符串中"
的任何实例都将替换为单引号'
?
答案 2 :(得分:0)
Access SQL语句可以对文本值使用单引号或双引号。所以你可以在INSERT语句中使用单引号,但是当要插入的文本包含单引号时你会遇到类似的问题,然后你可以通过将插入文本中的单引号加倍来解决这个问题:
Replace(strChallenge, "'", "''")
这似乎没什么改善。 OTOH,因为您使用VBA向表中插入行,所以不需要使用INSERT
查询。
以DAO.Recordset
打开您的表格,添加新行,然后将变量值分配到相应的字段。
Public Sub NPO_AddRow()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tblIRPDetail", dbOpenTable, dbAppendOnly)
With rs
.AddNew
!IRPID = intNewID
!SectionID = intSection
!Challenge = strChallenge
!Goal = strGoal
!Objective = strObjective
!Intervention = strIntervention
!IntDate = strIntDate
.Update
.Close
End With
Set rs = Nothing
Set db = Nothing
End Sub
请注意,与参数查询不同,此方法允许您添加长度超过255个字符的文本字符串。