1

我有一个数据库,使用评估和其他工具收集客户端信息。通常在评估时,如果可以预期的话,数据中会有双引号,直接引用即可。当我运行SQL更新(Access前端使用VBA到SQL Server 2008 R2后端)时,它在数据中的双引号引起冲突。在此期间,我要求员工在输入数据时使用单引号,但这是一种不可持续的解决方案,因为他们忘记了,并且程序在碰到双引号时崩溃。数据类型是nvarchar(max)。SQL更新/插入数据带双引号

当前VBA字符串看起来像这样:

strInsertSQL = “INSERT INTO tblIRPDetail(IRPID,SectionID,挑战,目标,目的,干预,IntDate)VALUES(” & intNewID & “” & intSection & “ ”“” & strChallenge & “” “ ”“” & strGoal & “” “ ”“” & strObjective & “” “ ”“” & strIntervention & “” “ ”“” & strIntDate &“”“);”

基本上任何strVariables可以有任何组合的单引号或双引号。它适用于单引号,但不适用于双引号。当然这是一个相当普遍的问题,我希望有人有一个简单的解决方案!

在此先感谢!

回答

0

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

+0

嗯,这很容易。非常感谢! –

0

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

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

+0

我认为,但有一个问题是,它似乎将参数限制为255个字符。我们绝大多数的参赛作品都比这个长得多。 –

0

给我了,我用得到这个执行的方法,一分钟和虐待的副本。

同时为什么不做Replace(val, """, "'")?这样,字符串中的"的任何实例都将被替换为单引号'