Обновления / Вставки 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, """, "'")
? Таким образом, любой случай "
в строке будет заменено одинарной кавычкой '
?