2013-04-02 2 views
0

Я создал форму в Access 2010, которая используется для вставки данных в существующую таблицу. Таблица содержит поле «Ключевые слова», поле «Источник» и текстовое поле «Код», в котором я записываю данные, которые нужно вставить, и есть кнопка для выполнения запроса. Код формы:Сохранение отдельных котировок при доступе

Private Sub cmd_go_Click() 
Dim insertstring As String 
insertstring = "INSERT INTO KWTable (KW, Source, Code) VALUES('" & text_key.Value & "','" & combo_source.Value & "','" & txt_code.Value & "');" 
DoCmd.RunSQL insertstring 
End Sub 

код прост, он вводит данные в таблицу, так что я могу ссылаться на него для использования в будущем. Теперь проблема, с которой я столкнулась, заключается в том, что когда я пытаюсь добавить длинные биты кода, которые я использую в SQL Server, я получаю синтаксическую ошибку с отсутствующим выражением, которую, как я предполагаю, исходит из одинарных кавычек, поскольку код от SQL. Я получаю ошибку, потому что, когда я пытаюсь сохранить код, который я использую в SQL Server, он использует одинарные кавычки, доступ которых не распознается. Я думаю, что если я попытаюсь написать в коде для формы вставки что-то, чтобы помочь преобразовать одинарные кавычки в двойные кавычки, а затем переконвертировать их обратно в одинарные кавычки, поможет решить проблему. Я просто не могу понять, как это сделать и действительно может помочь.

Спасибо

+0

Можете ли вы опубликовать тыс e сообщение об ошибке? Также (тупая, но возможная и частая ситуация) 'debug.print' ваш оператор SQL: недостающее пространство может вызвать много шума – Barranka

+0

Я действительно смущен; мой инстинкт кишки - сказать «избегать ваших апострофов, заменив один апостроф двумя апострофами», но я не совсем уверен, что «Sub JoinCells» или ваш второй запрос относится к вашей проблеме. Я не совсем уверен, каков ваш общий вопрос. – LittleBobbyTables

+0

Функции кодов не относятся к моей проблеме, проблема заключается в получении в основном коде для вставки цели для замены одинарных кавычек с двойными кавычками, а затем замены их обратно на одинарные кавычки, однажды вставленные в доступ. Сообщение об ошибке: ERROR RUN-TIME «3075» СИНТАКСИС (ОПЕРАТОР ОБНАРУЖЕНИЯ) В ЭКСПРЕССИИ QUERY ..... – user2119980

ответ

2

Вы можете избежать неприятностей с включенными кавычками в вставленном тексте с помощью запроса параметров.

Рассмотрите такой подход, как для cmd_go_Click().

Dim strInsert As String 
Dim db As DAO.database 
Dim qdf As DAO.QueryDef 

strInsert = "PARAMETERS pKW TEXT(255), pSource TEXT(255), pCode TEXT(255);" & vbCrLf & _ 
"INSERT INTO KWTable (KW, Source, Code) VALUES (pKW, pSource, pCode);" 
'Debug.Print strInsert 
Set db = CurrentDb 
Set qdf = db.CreateQueryDef(vbNullString, strInsert) 
qdf.Parameters("pKW") = Me.text_key.value 
qdf.Parameters("pSource") = Me.combo_source.value 
qdf.Parameters("pCode") = Me.txt_code.value 
qdf.Execute dbFailOnError 
Set qdf = Nothing 
Set db = Nothing 

Однако, я не понимаю, как JoinCells() вписывается.

+0

Этот бит кода не работает, а код сотовых ячеек - всего лишь пример. Проблема, с которой я столкнулась, связана с кавычками – user2119980

+0

Каково было сообщение об ошибке, когда оно не удалось? Какая строка выделена в режиме отладки? – HansUp

+0

DoCmd.RunSQL insertstring - выделенная часть кода – user2119980

0

Я использую функцию, которая обрабатывает нулевые значения, и сбегает одиночные кавычки (путем преобразования их в две одинарные кавычки) при создании заявления SQL непосредственно :

Function SafeSQL(ByVal pvarSQL As Variant) As String 
    SafeSQL2 = Replace(Nz(pvarSQL, ""), "'", "''") 
End Function 

Тогда в вашей обычной вы бы:

insertstring = "INSERT INTO KWTable (KW, Source, Code) VALUES('" & SafeSQL(text_key.Value) & "','" & SafeSQL(combo_source.Value) & "','" & SafeSQL(txt_code.Value) & "');" 
Смежные вопросы