3

我一直在 Access 的一个项目上工作,我工作的时间越长,我就越不屑一顾。我整天都在谷歌搜索并尝试解决方法,但我找不到我想要做的事情。

我有一个链接到表格的表格。我有一个按钮可以将表单的记录设置为新记录。如果您开始在记录开始更新的任何一个文本框中输入内容,那么此时它并没有真正进行插入。但是,如果我离开记录,则会调用更新。如果用户不想添加我可以找到的新记录,我无法阻止更新发生。我正在使用

 DoCmd.GoToRecord , , acNewRec

让表单让所有文本框都转到新记录。此时,一旦您开始在任何文本框中输入内容,您就无法返回。自动编号会增加,我有 sku 构建器,它将自动编号连接到前缀以充当序列号。

我需要做的是想办法让更新在用户点击关闭时取消。我尝试禁用关闭,但您始终可以右键单击该栏并从那里选择关闭。这与提示表单关闭的任何内容一起提交正在进行的记录并随后触发“afterUpdate”事件。我阅读了一些 Microsoft 文档,并且在工作流程中首先调用了“form_unload”,但插入总是在此之前进行。我也尝试过使用“beforeUpdate”,但是一旦您尝试写入其中一个框而不是在“afterUpdate”之前,它就会触发

beforeUpdate 和 afterUpdate 之间的空间似乎有一个相当大的漏洞。我不认为这是我在这里尝试尝试的非常复杂的操作,但也许我已经研究了很长时间,我错过了一个更简单的解决方案。我只需要取消插入操作或提示用户他们正在关闭带有打开记录的表单。如果他们击中没有插入将触发,是的,它会。

另外,由于我的时间表,我没有兴趣为 ADO 重写。我只需要快速将一些表格放在一起并完成它。还有很多我不想为 ADO 插入设置的字段。它们都是构建的,但我有一个让我感到悲伤的问题,我需要将此解决方案应用于所有表单。

TLDR - 如果用户已输入文本并尝试退出表单,则停止插入数据绑定表单。

解决方案编辑:将表单更改为模式/弹出窗口并禁用关闭。添加一个按钮来处理关闭。添加布尔标志

 Private Sub Form_BeforeInsert(Cancel As Integer)
 NR = True
 End Sub

然后添加关闭按钮的代码。

 Private Sub cmdClose_Click()
 Dim msgRes As VbMsgBoxResult

If NR Then
     msgRes = MsgBox("Do you want to save the current new record?", vbYesNoCancel, "Closing form...")
     If msgRes = vbYes Then
         DoCmd.RunCommand acCmdSaveRecord
         DoCmd.Close
     ElseIf msgRes = vbNo Then
         Me.Undo
         DoCmd.Close
     End If
 End If
 DoCmd.Close



 End Sub
4

1 回答 1

3

您始终可以执行 aMe.UndoDoCmd.RunCommand acCmdUndoFormClose 或者如果您仍然无法使其正常工作(我在 Access 中花了很多时间,我知道它可能很挑剔)您可以执行DoCmd.RunSql ("Delete * from TableName where Id=NewID")

你也可以试试这个:

DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.Close , , acSaveNo

您可能还想禁用关闭按钮并创建一个按钮来取消记录,以便您可以将所有代码放在那里。如果您将表单模式设置为对话框,您将无法右键单击关闭它。

于 2012-11-05T00:31:09.337 回答