Как заставить код VBA разрешить добавление значения в таблицу через поле со списком в Microsoft Access - PullRequest
0 голосов
/ 31 октября 2019

Я создаю свою первую базу данных Microsoft Access. Мне нужны поля со списком, которые позволяют выбирать из списка, а также добавлять значения в поле, из которого поле со списком вытягивает выборки. После долгих поисков я нашел этот пример кода VBA.

Private Sub cboMainCategory_NotInList(NewData As String, Response As Integer)

    On Error GoTo Error_Handler
    Dim intAnswer As Integer
    intAnswer = MsgBox("""" & NewData & """ is not an approved category. " & vbcrlf _
        & "Do you want to add it now?" _ vbYesNo + vbQuestion, "Invalid Category")

    Select Case intAnswer
        Case vbYes
            DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) "
                & _ "Select """ & NewData & """;"
            DoCmd.SetWarnings True
            Response = acDataErrAdded
        Case vbNo
            MsgBox "Please select an item from the list.", _
                vbExclamation + vbOKOnly, "Invalid Entry"
            Response = acDataErrContinue

    End Select

    Exit_Procedure:
        DoCmd.SetWarnings True
        Exit Sub

    Error_Handler:
        MsgBox Err.Number & ", " & Error Description
        Resume Exit_Procedure
        Resume

End Sub

Если я использую неизмененный пример, он не выдаст ошибку, но и не позволит мне ввести новое значение.

Я пытался изменить код, чтобы он соответствовал моей базе данных, но этот блок просто выдает синтаксическую ошибку (я пытался устранить неполадки, но я новичок в VBA и не могу найти подходящий линтер).

Option Compare Database

Private Sub Combo26_NotInList(NewData As String, Response As Integer)

    On Error GoTo Error_Handler
    Dim intAnswer As Integer
    intAnswer = MsgBox("""" & NewData & """ is not in the database yet " & vbcrlf _
        & "Do you want to add it now?" _ vbYesNo + vbQuestion, "new chemical")

    Select Case intAnswer
        Case vbYes
            DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO chemical_IDNotInList (chemical) "
                & _ "Select """ & NewData & """;"
            DoCmd.SetWarnings True
            Response = acDataErrAdded
        Case vbNo
            MsgBox "Please select an item from the list.", _
                vbExclamation + vbOKOnly, "Invalid Entry"
            Response = acDataErrContinue

    End Select

    Exit_Procedure:
        DoCmd.SetWarnings True
        Exit Sub

    Error_Handler:
        MsgBox Err.Number & ", " & Error Description
        Resume Exit_Procedure
        Resume

End Sub

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

Ответы [ 3 ]

1 голос
/ 01 ноября 2019

В синтаксисе MsgBox отсутствует запятая для разделения аргументов.

    intAnswer = MsgBox("""" & NewData & """ is not an approved category. " & vbcrlf _
        & "Do you want to add it now?", vbYesNo + vbQuestion, "Invalid Category")
0 голосов
/ 02 ноября 2019

Ваша команда вставки SQL выглядит неправильно.

Попробуйте это:

Вы можете установить ограничение от да = до да.

, для нет вВ списке событий можно использовать следующий код:

Private Sub Combo33_NotInList(NewData As String, Response As Integer)

   Dim strSql     As String
   If MsgBox(NewData & " not in list, add?", _
             vbYesNo + vbQuestion) = vbYes Then
      strSql = "insert into tblStudents (name) values(" & NewData & ")"
      CurrentDb.Execute strSql
      Response = acDataErrAdded
   End If

End Sub

Формат вставки такой же, как и выше - команды выбора нет.

Примечание. Я использовал имя таблицы «Студенты» и имя поляимени. Итак, просто измените имя таблицы и поле на то, что вы использовали.

0 голосов
/ 01 ноября 2019

Продолжение строки начинается с пробела перед подчеркиванием, в конце строки, а не в начале.

DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) " _
                  & "Select """ & NewData & """;"

или

DoCmd.RunSQL "INSERT INTO tlkpCategoryNotInList (Category) " & _
                  "Select """ & NewData & """;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...