提交表单时VBA访问新记录

Posted

技术标签:

【中文标题】提交表单时VBA访问新记录【英文标题】:VBA Access New Record When Submitting Form 【发布时间】:2013-01-14 14:11:41 【问题描述】:

我正在处理一个包含 6 个字段的表单,并且必须在提交表单并创建新记录之前填写所有字段。我没有加载每个字段硬编码以显示为空白的表单,而是使用:

Private Sub Form_Load()

DoCmd.GoToRecord , , acNewRec
Me.Username = CreateObject("WScript.Network").Username

End Sub

这会开始新的记录,但是当用户在没有完成表单的情况下关闭它会创建一个不完整的记录并抛出。

如果用户以不完整的表单关闭,我如何删除该行?或者我应该只在用户提交并且所有字段都符合条件时才创建新记录?这里的最佳做法是什么?

提前致谢。

【问题讨论】:

【参考方案1】:

最简单、最有效的选择是在基础表中正确设置字段属性: - 将 Required 属性设置为 True, - 和 Allow zero length 属性为 False。 无需编程,也将应用于您以后构建的其他接口。

【讨论】:

这有什么帮助?对于某些字段,Null 可能是完全可以接受的。问题是数据已经输入到表单中,并且用户遇到了一堆错误。这只会导致另一堆错误。 @Remou:问题的第一行说的很清楚:一个表单,包含6个字段,在提交表单和创建新记录之前必须全部填写完乙>。所以这里绝对不能接受 Null,而且我仍然认为我的建议是最简单和最有效的。 6 个字段中有多少个?您对记录开始但随后放弃时产生的错误有何建议? 使用 Form_error 事件并告诉用户:“填写 6 个必填字段或按 Escape 两次以取消当前输入”。或者如果目标用户是一个小群体,给出一个解释就足够了。【参考方案2】:

不要设置文本框的内容,而是在表单加载时将默认值设置为相关的用户名。

您可以首先打开要添加的表单:

DoCmd.OpenForm "MyForm",,,,acFormAdd

见:http://msdn.microsoft.com/en-us/library/office/ff820845.aspx

然后,您可以为任何您知道内容的控件设置默认值,如下所示:

Private Sub Form_Load()
    Me.Username.DefaultValue = _
        """" & CreateObject("WScript.Network").Username & """"
End Sub

不要忘记,在表格设计中可以将创建日期之类的内容设置为默认值,并且您可能为某些适用于所有用户的控件设置了默认值,因此可以在表单设计中进行设置。

【讨论】:

用户名是一个单独的字段,用于跟踪谁提交了表单。它被禁用,但仍然可见。我试图让 6 个字段,如开始日期、总分钟数等,如果关闭且未完全填写,则打开空白并清除。我正在研究“Form_Close()”,看看是否可行。 使用默认值属性呈现一个看似完整的表单,并要求用户填写一个绑定控件以提交默认值。记录不完整的原因是您已将数据填充到控件中,因此启动了表单,默认值看起来像数据,但在编辑某些控件之前实际上没有填充任何内容。 我是 vba 新手,所以很抱歉所有问题,但这是否意味着为每个字段创建一个默认值?因为我注释掉了“DoCmd”并修改了另一个,但它显示了我的第一条记录,我不想要那个。 您可以使用 DoCmd.Open 表单打开一个用于添加的表单以进行编辑。您最初的问题表明您正在完成一个名为 username 的控件,这给您带来了问题。我建议了一个不会给你带来问题的替代方案。您仍然可以转到新记录,但最好将表单设置为仅添加表单或使用 DoCmd.Openform 打开仅添加表单。

以上是关于提交表单时VBA访问新记录的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA 防止在关闭时输入表单记录

使用 vba 和 xmlhttp 自动提交网站上的帖子表单

php通过记录IP来防止表单重复提交方法分析

vb.net 网页提交表单

JS采坑记录 - form表单中只有一个input时,按回车键后表单自动提交

利用excel VBA进行自动化数据分析,数据汇总,网页表单自动提交等功能