【问题标题】:Access Buttons VBA Problems and Subform Issues访问按钮 VBA 问题和子表单问题
【发布时间】:2026-01-22 20:15:01
【问题描述】:

我正在研究一个关键库存数据库。管理谁签出房间钥匙以及何时将它们带回来的东西。我已经创建了我计划使用的表格并开始处理表格。但是,我无法让表单/子表单按需要工作。

我创建了按钮来添加/编辑/删除/等子表单中的记录,这些记录是表格的结果。我已经根据我在数据库类中所做的一个旧项目对按钮进行了编码(然后其他人做了表格,我做了查询)。我似乎无法让他们工作。到目前为止,我只编写了“mainKeys”表单的按钮。

我注意到主表单显示了 14 条记录中的 1 条,而我旧项目中的表单只显示了子表单中的所有记录。

这是访问文件:http://jumpshare.com/b/W7AKih

这是我的旧项目(这是我试图复制的):http://jumpshare.com/b/r7Y6O1

这是按钮的代码:

Option Compare Database

Private Sub cmdAdd_Click()
If Me.keyID.Tag & "" = "" Then
    CurrentDb.Execute "INSERT INTO KEYS(KEY_ID, ROOM, DRAWER)" & _
        " VALUES(" & Me.keyID & ",'" & Me.roomID & "'," & Me.drawerID & ")"
          subKey.Form.Requery
Else
    CurrentDb.Execute "UPDATE KEYS " & _
    " SET KEY_ID=" & Me.keyID & _
    ", ROOM='" & Me.roomID & "'" & _
    ", DRAWER='" & Me.drawerID & "'" & _
    " WHERE KEY_ID=" & Me.keyID.Tag
End If
cmdReset_Click
subKey.Form.Requery
End Sub

Private Sub cmdBack_Click()

End Sub

Private Sub cmdDelete_Click()
If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then
    If MsgBox("Confirm Deletion?", vbYesNo) = vbYes Then
        CurrentDb.Execute "DELETE FROM KEYS" & _
            " WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID")
                Me.subKey.Form.Requery
    End If
End If
End Sub

Private Sub cmdEdit_Click()
If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then
        With Me.subKey.Form.Recordset
            Me.keyID = .Fields("KEY_ID")
            Me.roomID = .Fields("ROOM")
            Me.drawerID = .Fields("DRAWER")
            Me.keyID.Tag = .Fields("KEY_ID")
            Me.cmdAdd.Caption = "Update Record"
            Me.cmdEdit.Enabled = False
        End With
End If
End Sub

Private Sub cmdExit_Click()
 DoCmd.Close
End Sub

Private Sub cmdReset_Click()
    Me.keyID = ""
    Me.roomID = ""
    Me.drawerID = ""

    Me.keyID.SetFocus
    Me.cmdEdit.Enabled = True
    Me.cmdAdd.Caption = "ADD KEY"
    Me.keyID.Tag = ""
End Sub

据我所见,重置和退出按钮可以正常工作,而添加/删除/更新记录则不行。 此外,这是我正在为我学校的一个办公室做的一个小项目。如果有人对他们在文件中看到的内容有任何建议,那就太好了。

【问题讨论】:

  • 改完数据库不应该更新一下吗?某事:Me.update()
  • 也许吧,但我认为这就是“Me.subKey.Form.Requery”所做的。我查看了我用作指南的文件,没有 me.update(),它似乎工作正常。
  • 但是Edit函数中没有requery或者其他什么,添加后尝试检查是否有效
  • 我添加了这个,但我得到了数据类型错误。我已经根据您建议的更改重新上传了文件。

标签: database ms-access database-design vba


【解决方案1】:

没有发生任何事情的原因是您数据库中的事件行设置为[Embedded Macro] 而不是[Event Procedure],因此您发布的代码永远不会运行。在遇到问题时设置断点以查看代码是否到达总是明智的。

在那之后,在我看来,你会在一种方式中遇到太多麻烦,而在另一种方式中却太少了。当 Access 可以很好地处理对子表单的添加时,与其编写所有插入代码,不如编写更多检查代码以确保数据处于良好状态。

【讨论】:

  • 这是我第一次接触 VBA。所以我不知道如何写检查好。然而,这些字段与表格相关联,因此我假设它将使用表格中的类型和相应的输入掩码来防止用户输入错误的信息。目前它们是无限的,但我计划改变它。
  • 我无法重现该错误。哪种形式?顺便说一句,你真的会更好地发挥 MS Access 的优势。
  • 您正在添加不必要的功能。要编辑一行,只需编辑它。要添加一行,只需添加它。您不需要按钮。使用代码检查数据,而不是添加和编辑。
  • 不要使用该表。使用连续表单、单一表单、子表单、大量表单,只要保持简单即可。
  • 是的。检查数据是否正确,让 Access 处理其他所有事情。