MS Access 在表单关闭时停止插入命令

Posted

技术标签:

【中文标题】MS Access 在表单关闭时停止插入命令【英文标题】:MS Access stopping Insert command on form close 【发布时间】:2012-11-05 00:18:26 【问题描述】:

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

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

 DoCmd.GoToRecord , , acNewRec

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

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

【问题讨论】:

这是您的主要问题:“自动编号会增加,我有 sku 构建器,它将自动编号连接到前缀以充当序列号。”你有一个自动编号,这意味着什么。永远不建议这样做。自动编号只是为了唯一而没有别的。自动编号可以跳跃、倒退甚至是负数,因此它永远不适合作为有意义的数字,甚至不应该显示给用户。 我不知道设置为递增的自动数字可能会变为负数或倒数。也许序列号是一个不好的词选择。这不是很有意义,但我只需要一种方法来构建具有唯一编号的 sku。它被用作其他表的外键。前缀的附件仅用于识别它。 在大多数情况下它会增加,但你不能依赖自动编号来成为唯一的东西。运行改变其工作方式的代码并不难。 (allenbrowne.com/ser-40.html) 天哪。我有一个内置的索引器,我编写了它可以检索索引并在插入时 +1,但我采用了这种方法,因为它看起来更可靠。在宏伟的计划中,我认为这对这个项目并不重要,但我会记住这一点。谢谢。 【参考方案1】:

您始终可以在 FormClose 上执行 Me.UndoDoCmd.RunCommand acCmdUndo 或者,如果您仍然无法使用它(我在 Access 中花了很多时间,我知道它可能很挑剔),您可以发送 DoCmd.RunSql ("Delete * from TableName where Id=NewID")

你也可以试试这个:

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

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

【讨论】:

现在我想回到过去的几个小时。谢谢先生。 DoMenuItem 在 2000 年的版本(或者甚至可能是 97 年?)中就不再使用了。

以上是关于MS Access 在表单关闭时停止插入命令的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 停止触发 Form_Open 事件

MS Access - 关闭表单而不保存设计更改,acSaveNo 不起作用

MS Access 子表单数据条目在插入 SQL 时被锁定

经典 ASP 和 ms-access:插入数据的问题

什么可以阻止 MS Access 2000 表单关闭?

MS Access 数据库关闭,忽略表单关闭取消 true