Простой SQL-запрос в Access завершается с ошибкой пропущенной точки с запятой - PullRequest
2 голосов
/ 06 октября 2009

Итак, я одновременно изучаю Access 2007, Visual Basic и SQL. Не идеально.

Этот код прикреплен к кнопке в стандартном интерфейсе, созданном мастером. Я пытаюсь скопировать строку из tblA в tblB. Каждый раз, когда код выполняется, я получаю сообщение «Ошибка времени выполнения» 3137 «Отсутствует точка с запятой (;) в конце инструкции SQL.»

Я предполагаю, что он ожидает завершения оператора SQL раньше, до ГДЕ? Но без ГДЕ, как бы я прикрепил добавление к определенному идентификатору строки?

Private Sub buttonAdd_Click()
Dim strSQL As String
strSQL = "INSERT INTO [tblB]" & _
    "VALUES (ID, [Name], [Some value], [Some other value])" & _
    "SELECT * FROM tblA" & _
    "WHERE ID = '" & Me.ID & "' " & _
    ";"

DoCmd.RunSQL strSQL
End Sub

Ответы [ 3 ]

3 голосов
/ 06 октября 2009

Синтаксис неверен, вам нужно удалить ключевое слово "VALUES".
Предполагается, что ID, [Имя], [Некоторое значение] и [Некоторое другое значение] являются именами столбцов tblB (некоторые сомнения с моей стороны, причем последние два имени имеют «значение»). Синтаксис SQL VALUES () используется для предоставления немедленных значений, но поскольку вы получаете значения из tblA, запрос должен выглядеть следующим образом:

strSQL = "INSERT INTO [tblB] " & _
    "(ID, [Name], [Some value], [Some other value]) " & _
    "SELECT * FROM tblA " & _
    "WHERE ID = '" & Me.ID & "' " & _
    ";"

Редактировать : Я также добавил пробелы между токенами. Хороший улов Ник D, спасибо, что заметили это!

2 голосов
/ 06 октября 2009

Вы поместили имена полей в предложении значений вместо имени таблицы, и между табличным символом и где отсутствует пробел. И предложение value, за которым следует select, и пропущенный пробел сами могут вызвать сообщение об ошибке.

strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _
   "SELECT * FROM tblA " & _
   "WHERE ID = '" & Me.ID & "'"

Точка с запятой в конце в настоящее время не требуется. Он нужен только для разделения запросов, если вы выполняете более одного запроса одновременно.

Также, если поле ID числовое, у вас не должно быть апострофов вокруг значения:

strSQL = "INSERT INTO [tblB] (ID, [Name], [Some value], [Some other value])" & _
   "SELECT * FROM tblA " & _
   "WHERE ID = " & Me.ID
0 голосов
/ 06 октября 2009

MJV правильно. Вы должны удалить ключевое слово VALUES, а также поставить пробелы между ключевыми словами, например:

"SELECT * FROM tblA" & _
"WHERE ID = '" & Me.ID & "' " & _

вышеуказанное будет объединено как "...FROM tblAWHERE ID..."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...