Database 访问按钮VBA问题和子窗体问题

Database 访问按钮VBA问题和子窗体问题,database,ms-access,database-design,vba,Database,Ms Access,Database Design,Vba,我正在处理一个重要的库存数据库。负责管理谁签出房间钥匙以及他们何时把钥匙拿回来。我已经创建了我计划使用的表,并开始处理表单。但是,我很难让表单/子表单按预期工作 我已经创建了按钮来添加/编辑/删除/等子窗体中的记录,这些记录是表的结果。我已经根据我在DB类中做的一个老项目对按钮进行了编码(其他人做了表单,我做了查询)。我似乎无法让他们工作。到目前为止,我只对“主键”表单的按钮进行了编码 我注意到主窗体显示了14条记录中的1条,而我以前项目中的窗体只显示了子窗体中的所有记录 以下是访问文件: 这是

我正在处理一个重要的库存数据库。负责管理谁签出房间钥匙以及他们何时把钥匙拿回来。我已经创建了我计划使用的表,并开始处理表单。但是,我很难让表单/子表单按预期工作

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

我注意到主窗体显示了14条记录中的1条,而我以前项目中的窗体只显示了子窗体中的所有记录

以下是访问文件:

这是我的老项目(这是我试图复制的):

以下是按钮的代码:

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
从我所看到的重置和退出按钮工作正常,添加/删除/更新记录不工作。
此外,这是一个小项目,我在我的学校办公室工作。如果任何人从他们在文件中看到的内容中得到任何建议,那就太好了。

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


在我看来,在那之后,你会在一个方面遇到太多的麻烦,而在另一个方面会遇到太少的麻烦。当Access能够很好地处理子窗体中的添加内容时,与其编写所有的插入代码,不如编写更多的检查代码以确保数据处于良好状态。

更改数据库后是否应该更新它?关于:
Me.update()
也许吧,但我认为“Me.subKey.Form.Requery”就是这么做的。我查看了我用作指南的文件,没有me.update(),它似乎工作得很好。但编辑函数中没有重新查询或其他内容,请尝试在添加itI后检查是否有效。我添加了此文件,但我收到了数据类型错误。我用你建议的更改重新加载了文件。这是我第一次尝试VBA。所以我不知道如何写好支票。但是,字段与表关联,因此我假设它将使用表中的类型和相应的输入掩码来防止用户输入错误信息。目前它们是无限的,但我计划改变它。我无法重现错误。哪种形式?顺便说一句,你真的会更好地利用MS Access的优势。你正在添加不必要的功能。要编辑一行,只需编辑它。要添加一行,只需添加它。你不需要按钮。使用代码检查数据,而不是添加和编辑。不要使用表。使用连续表单、单一表单、子表单和大量表单,只要保持简单即可。检查数据是否正确,让Access处理所有其他问题。