我一直在Access上工作,而且我工作的时间越长,我就越不屑。我一整天都在谷歌搜索和尝试解决方法,但我找不到我想要做的事情。
我有一个链接到表格的表单。我有一个按钮,将表单的记录设置为新记录。如果您开始在任何一个文本框中键入记录开始更新,那么此时它并不是真正进行插入。但是,如果我在记录中导航,则会调用更新。如果用户不想添加我能找到的新记录,那么我无法阻止更新发生。我正在使用
DoCmd.GoToRecord , , acNewRec
使表单让所有文本框转到新记录。此时,只要您开始输入任何文本框,就无法返回。自动编号将启动,我有sku构建器将autoNumber连接到一个前缀作为序列号。
我需要做的是找出一种方法,让用户点击关闭时取消更新。我试图禁用关闭,但您可以随时右键单击该栏并从那里选择关闭。这一点,以及提示表单关闭提交进程记录并随后触发“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
答案 0 :(得分:3)
您可以随时在FormClose上执行Me.Undo
或DoCmd.RunCommand acCmdUndo
或者,如果你仍然无法让它工作(我在Access中花了很多时间,我知道它可能很挑剔)你可以做DoCmd.RunSql ("Delete * from TableName where Id=NewID")
你也可以试试这个:
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.Close , , acSaveNo
您可能还想禁用关闭按钮并创建一个按钮来取消记录,以便您可以将所有代码放在那里。如果将表单模式设置为对话框,则无法右键单击将其关闭。