1

我有一个使用评估和其他工具收集客户信息的数据库。通常在评估中,数据中有双引号,当——正如预期的那样——直接引用被捕获。当我运行 sql 更新(使用 VBA 访问前端到 SQL Server 2008 R2 后端)时,它会在数据中出现双引号。在此期间,我要求员工在输入数据时使用单引号,但这是一个不可持续的解决方案,因为他们忘记了,并且程序在遇到双引号时会崩溃。数据类型是 nvarchar(max)。

当前的 VBA 字符串如下所示:

strInsertSQL = "插入到 tblIRPDetail(IRPID, SectionID, Challenge, Goal, Objective, Intervention, IntDate) VALUES(" & intNewID & ", " & intSection & ", """ & strChallenge & """, """ & strGoal & """, """ & strObjective & """, """ & strIntervention & """, """ & strIntDate & """);"

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

提前致谢!

4

3 回答 3

0

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

这可能会有所帮助: ms access 2003 using vba 中的参数化查询

于 2012-10-19T11:36:55.897 回答
0

给我一分钟,复制一下我用来执行此操作的方法。

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

于 2012-10-19T12:39:16.450 回答
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 个字符的文本字符串。

于 2012-10-19T14:52:37.517 回答