带有双引号的数据的SQL更新/插入

时间:2012-10-19 11:23:33

标签: sql-server-2008 ms-access ms-access-2010 double-quotes datahandler

我有一个使用评估和其他工具收集客户信息的数据库。通常在评估中,数据中有双引号 - 正如可能预期的那样 - 捕获直接引用。当我运行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都可以有任何组合的单引号或双引号。它适用于单引号但不适用于双引号。当然这是一个相当普遍的问题,我希望有人有一个简单的解决方案!

提前致谢!

3 个答案:

答案 0 :(得分:0)

参数化查询并将值添加为参数。

这可能会有所帮助: parameterized query in ms access 2003 using vba

答案 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个字符的文本字符串。