Попытка использовать VB для автоматизации некоторых запросов. Возникла проблема со строкой

Я использую MS Access 2003 и пытаюсь выполнить сразу несколько запросов с помощью VB. Когда я пишу запрос в SQL, он работает нормально, но когда я пытаюсь сделать это в VB, он просит меня «Ввести значение параметра» для DEPA, а затем DND (это первые несколько букв из двух имеющихся у меня строк). Вот код:

Option Compare Database

Public Sub RemoveDupelicateDepartments()

Dim oldID As String
Dim newID As String
Dim sqlStatement As String


oldID = "DND-01"
newID = "DEPA-04"

sqlStatement = "UPDATE [Clean student table] SET [HomeDepartment]=" & newID & " WHERE [HomeDepartment]=" & oldID & ";"

DoCmd.RunSQL sqlStatement & ""

End Sub

Мне кажется, что он берет струну до - и больше ничего. Я не знаю, поэтому я спрашиваю, лол. Как должен выглядеть мой код?


person Jeff    schedule 10.05.2010    source источник
comment
НЕ используйте конкатенацию строк для создания подобных запросов.   -  person Joel Coehoorn    schedule 10.05.2010
comment
Хорошо, есть ли другой способ построить этот запрос?   -  person Jeff    schedule 10.05.2010
comment
Или это скорее плохая практика?   -  person Jeff    schedule 10.05.2010
comment
@Jeff - Это целые числа newId и oldId?   -  person Thomas    schedule 10.05.2010
comment
Нет, это струны. На вопрос дан ответ, просто я еще не зарегистрировался, чтобы пометить его таким   -  person Jeff    schedule 11.05.2010
comment
Использовать SQL-инъекцию с приложением Access довольно сложно.   -  person Fionnuala    schedule 12.05.2010
comment
Сложно, но возможно. Ущерб, который может быть нанесен, обычно заключается в обнаружении данных, которые должны быть скрыты, поскольку невозможно внедрить DML, поскольку Jet / ACE не может принимать несколько; -ограниченных команд SQL любого типа. См. stackoverflow.com/questions/512174/non-web-sql-injection для in- углубленное обсуждение.   -  person David-W-Fenton    schedule 13.05.2010
comment
Ого, я всего этого не осознавал. Спасибо за ссылку   -  person Jeff    schedule 14.05.2010


Ответы (2)


Используйте символ ('), чтобы установить начало и конец значения

sqlStatement = "UPDATE [Clean student
table] SET [HomeDepartment]='" & newID
& "' WHERE [HomeDepartment]='" & oldID
& "';"
person volody    schedule 10.05.2010
comment
Поскольку буквальный запрос похож на ... SET field = 'abc' ... вместо ... SET field = abc .... Если вы попытаетесь запустить второй (без кавычек) запрос непосредственно в Access, вы увидите та же ошибка. - person Carl Manaster; 10.05.2010
comment
Ах, спасибо большое! Это отвечает на все мои вопросы (кроме одного, о котором меня задумал мистер Кохорн: P) - person Jeff; 10.05.2010
comment
Суть Джоэла в том, что вы открыты для выполнения любых произвольных данных, которые пользователь предоставляет для вашей переменной. Он предполагает многое, но он прав. См. stackoverflow.com/questions/512174/non-web-sql-injection для продолжительного обсуждения. вопроса. - person David-W-Fenton; 13.05.2010

Вероятно, вы захотите заключить идентификаторы в кавычки.

person Carl Manaster    schedule 10.05.2010