INSERT INTO Слишком мало параметров - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть таблица с именем tb_tools , со следующими полями:

  • TOOL_ID (краткий текст) [key_field]
  • ОПИСАНИЕ (краткий текст)
  • СТОЙКА (краткий текст)
  • КОЛОННА (номер)
  • КОММЕНТАРИИ (длинный текст)

В форме, называемойfrm_insertion У меня есть кнопка с событием щелчка

Private Sub btn_add_Click()
    Dim part_temp As String
    Dim tempNum As Integer
    Dim tempStr As String

    tempNum = 12
    tempStr = "test"

    tool_temp = Nz(DLookup("[TOOL_ID]", "tb_tools", "[TOOL_ID]='" & [box_dien] & "'"), "-1")

    If StrComp(tool_temp, "-1", vbTextCompare) = 0 Then
        CurrentDb.Execute "INSERT INTO [tb_dies] ([TOOL_ID], [DESCRIPTION], [RACK], [COLUMN], [COMMENTS]) " _
            & "VALUES (" & tool_temp & "," & tempStr & "," & tempStr & "," & tempNum & "," & tempStr & ")"
    End If
End Sub

Я получаю ошибку «Слишком мало параметров. Ожидается 1» в строке INSERT INTO.Я проверил имена полей.Фактически, я скопировал и вставил их в код прямо из таблицы.

Я также использовал приведенный здесь код: http://forums.devarticles.com/microsoft-access-development-49/check-if-a-field-exists-in-a-table-using-vba-58559.html Чтобы проверить, доступны ли поля

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Это может быть проще следовать при использовании параметров в запросе.

Private Sub btn_add_Click()

    Dim qdf As DAO.QueryDef

    Set qdf = CurrentDb.CreateQueryDef("", _
        "PARAMETERS lToolID LONG, DescText TEXT (255), RackText TEXT (255), " & _
        "ColumnNum LONG, CommentText LONGTEXT; " & _
        "INSERT INTO tb_dies (TOOL_ID, DESCRIPTION, RACK, COLUMN, COMMENTS) " & _
        "VALUES (lToolID, DescText, RackText, ColumnNum, CommentText)")

    With qdf
        .Parameters("lToolID") = 1
        .Parameters("DescText") = "Some Text"
        .Parameters("RackText") = "Some Rack Text"
        .Parameters("ColumnNum") = 5
        .Parameters("CommentText") = "Some really long comments"
        .Execute
    End With

    Set qdf = Nothing

End Sub  

SQL читается как:

PARAMETERS  lToolID LONG
            , DescText TEXT (255)
            , RackText TEXT (255)
            , ColumnNum LONG
            , CommentText LONGTEXT; 
INSERT INTO tb_dies (TOOL_ID, DESCRIPTION, RACK, COLUMN, COMMENTS) 
VALUES      (lToolID, DescText, RackText, ColumnNum, CommentText);
0 голосов
/ 11 декабря 2018

Ваша строка SQL содержит:

INSERT INTO [tb_dies] ([TOOL_ID], [DESCRIPTION], [RACK], [COLUMN], [COMMENTS]) 
VALUES (-1,temp,temp,12,temp,temp)

Что не является допустимым SQL - сейчас сервер баз данных будет рассматривать эти вхождения temp как имя переменной или столбца;temp, вероятно, должен быть в единичных апострофах (что означает "строка"), например:

INSERT INTO [tb_dies] ([TOOL_ID], [DESCRIPTION], [RACK], [COLUMN], [COMMENTS]) 
VALUES (-1,'temp','temp',12,'temp','temp')

Следовательно, вы, вероятно, хотите, чтобы ваш VB был:

tempStr = "'test'"

PS;Будучи MS Access, есть шанс, что стандартный SQL не будет работать, и что одиночные апострофы не используются для строк.Если это двойные кавычки " для обозначения строки в доступе, вы будете смотреть на VBlike:

tempStr = """test"""

Комментаторы делают правильные точки;вам не следует использовать конкатенацию строк для построения SQL-запросов. Стоит прочитать http://bobby -tables.com прямо сейчас, чтобы получить некоторую справочную информацию о том, почему это плохо, и тогда вы будетелучше подготовлены к тому, чтобы вступить на путь разработки программного обеспечения, который позволяет избежать написания программного обеспечения, подверженного этой конкретной (и распространенной) форме взлома

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