如何允许通过 Microsoft Access 中的组合框向表中添加值?

Posted

技术标签:

【中文标题】如何允许通过 Microsoft Access 中的组合框向表中添加值?【英文标题】:How do I allow the addition of a value to a table through a combo box in Microsoft Access? 【发布时间】:2019-10-31 18:11:43 【问题描述】:

我正在创建我的第一个 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 新手,找不到合适的 linter)。

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

我需要一个功能齐全的组合框,既可以让我从现有值中进行选择,也可以添加新值。

【问题讨论】:

更多信息会很有用。什么是语法错误,它发生在哪一行?您的组合框的记录源是什么?一个问题?一份清单? vbYesNo 前面的下划线(_)应该是逗号。由于那个错字,第一个版本也应该抛出相同的错误消息。我想知道第一个程序是否已经运行。如果您没有名为 cboMainCategory 的组合框以及与该控件相关的过程,则不会。 设置断点和单步调试代码。然后,您将看到哪一行触发了错误。还可以禁用错误处理程序,代码执行将在问题出现时停止并弹出调试器窗口,该行突出显示。 Access 中的组合框使用属性表上的可设置值本机执行此操作。为什么不按预期使用设计视图?尤其是如果这是您的第一个数据库……这样它们的错误往往会更少。 正在从数据表的列中提取列表。我还需要新条目才能将自己添加到该列中。感谢您指出下划线的问题,错误肯定是现在以后。看起来它是第 14 行第 50 列。如果有一种方法我可以在没有 VBA 的情况下做到这一点,那就太棒了。我将“列表限制”属性设置为“是”,“不在列表中”设置为 [事件过程]。我的理解是您必须使用 VBA 定义该事件过程。 【参考方案1】:

MsgBox 语法缺少逗号来分隔参数。

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

【讨论】:

对上面的错误评论表示歉意(现已删除)-我以为您指的是前面的下划线-doh!【参考方案2】:

Line continuation 由下划线前面的空格开始,位于行尾,而不是开头。

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

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

【讨论】:

【参考方案3】:

您的 SQL 插入命令看起来不正确。

试试这个:

您可以将限制设置为 yes = 到 yes。

对于no in list事件,可以使用如下代码:

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

插入格式如上——没有选择命令。

注意,我使用了 Student 的表名和 Sname 的字段名。所以就 将表名和字段更改为您使用的任何内容。

【讨论】:

谢谢!这很有帮助。我现在在对话框中收到了正确的消息,但随后又引发了其他错误。将发布 3 个链接,首先对话然​​后代码错误,而不是修改后的 VBA。 linklink 抱歉后续,最后一个链接消失了。 link

以上是关于如何允许通过 Microsoft Access 中的组合框向表中添加值?的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access 表单查询

如何使用 SQL 在 Microsoft Access 2013 中创建查找字段?

如何通过 JDBC 将值插入 Microsoft Access 数据库?

如何让 Microsoft Access 仅使用 shift 键在设计模式下打开

如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?

如何通过在 IIS 8 中使用“Access-Control-Allow-Origin”来允许多个域