Я пытаюсь INSERT INTO с SQL в таблице в VBA, но при запуске этого скрипта выдает ошибку. почему?
Я ожидал, что он добавит значения в таблицу, но вместо этого выдает ошибку, у кого-нибудь есть решение для этого?
DoCmd.RunSQL "INSERT INTO tblScores (Student, Score, Date, ExamType, Lesson) VALUES (cbStudent.Value,txtScore.Value,txtDate.Value,cbExamType.value,cbLesson.Value);"
Сообщение об ошибке:
Значения формы должны быть объединены в строку SQL, а не заключены в нее.
Например:
"WHERE ID = " & IdControl.Value
Но этот путь не рекомендуется по разным причинам. Лучше всего создать временный запрос и передать значения в качестве параметров. Если вам нужно запускать его часто, создайте постоянный запрос и просто вызывайте его — это будет немного быстрее.
Const SQL As String = "PARAMETERS [Student] Text (255), [Score] IEEESingle, [Date] DateTime, [ExamType] Text (255), [Lesson] Text (255); " & _
"INSERT INTO tblScores (Student, Score, [Date], ExamType, Lesson) " & _
"SELECT [Student] AS [Student], [Score] AS [Score], [Date] AS [Date], [ExamType] AS [ExamType], [Lesson] AS [Lesson];"
Dim q As DAO.QueryDef
Set q = CurrentDb().CreateQueryDef("", SQL) 'temporary query
q.Parameters("[Student]").Value = cbStudent.Value
q.Parameters("[Score]").Value = txtScore.Value
q.Parameters("[Date]").Value = txtDate.Value
q.Parameters("[ExamType]").Value = cbExamType.Value
q.Parameters("[Lesson]").Value = cbLesson.Value
q.Execute
q.Close
Имейте в виду, что я не знаю фактических типов данных полей вашей таблицы, поэтому некоторые параметры могут быть отключены, например, оценка.
Ваша строка SQL неверна. Текстовые значения необходимо заключать в кавычки ' '
, а даты — в #
.
он дает ту же ошибку с ' ' ' для текстов
Вы должны сделать это для всех текстовых полей: "'" & cbStudent.Value & "'". Замените '
на #
для даты. Но, как я уже сказал, это не рекомендуется. Если текстовое значение содержит кавычки, например О'Брайен, SQL сломается. Параметры - это путь.
я нашел проблему. я набрал «значение» вместо «значение» (я набрал букву V в нижнем регистре)
нет, это было не то
Попробуй это: Dim varStudent как строка . varStudent = cbStudent . В строке SQL: ЗНАЧЕНИЯ ( '" & varStudent & "', '" & varTxtScore & "'
'" = одинарная кавычка двойная кавычка
это на самом деле то, что я делал неправильно! Спасибо!
почему тогда мой код работал? почему выдает синтаксическую ошибку. можно немного настроить код и заставить его работать?