Обновления / Вставки SQL с данными в двойных кавычках

У меня есть база данных, которая собирает информацию о клиентах, используя оценки и другие инструменты. Часто в оценках содержатся двойные кавычки в данных, когда - как и следовало ожидать - фиксируется прямая кавычка. Когда я запускаю обновления sql (доступ к интерфейсу с помощью VBA для SQL Server 2008 R2 бэкэнд), он взрывается в двойных кавычках в данных. Тем временем я попросил сотрудников использовать одинарные кавычки при вводе данных, но это неустойчивое решение, так как они забывают, и программа падает, когда попадает в двойные кавычки. Тип данных nvarchar(max).

Текущая строка VBA выглядит следующим образом:

strInsertSQL = "INSERT INTO tblIRPDetail (IRPID, SectionID, вызов, цель, цель, вмешательство, IntDate) ЗНАЧЕНИЯ (" & intNewID & ", " & intSection & ", """ & strChallenge & """, """ & strGoal & """, """ & strObjective & """, ""," & strIntervention & """, """ & strIntDate & """);"

По сути, любая из strVariables может иметь одинарные или двойные кавычки в любой комбинации. Он работает для одинарных кавычек, но не для двойных. Конечно, это довольно распространенная проблема, я надеюсь, что у кого-то есть простое решение!

Заранее спасибо!

3 ответа

Решение

Оператор 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 символов.

Параметризовать ваш запрос и вместо этого добавить значения в качестве параметров.

Это может помочь: параметризованный запрос в MS Access 2003 с использованием VBA

Дайте мне минуту и ​​точную копию методов, которые я использовал, чтобы добиться этого.

В то же время, почему бы не сделать Replace(val, """, "'")? Таким образом, любой случай " в строке будет заменено одинарной кавычкой '?

Другие вопросы по тегам