【问题标题】:MS Access: Enter a specific text in a form using command button from another formMS Access:使用另一个表单中的命令按钮在表单中输入特定文本
【发布时间】:2016-08-13 17:53:40
【问题描述】:

我想就 MS Access 中的以下问题寻求您的帮助。

我创建了一个表单“CustomerListF”,其中填充了每个客户端的命令按钮。对于每个按钮,我创建了以下代码:

Private Sub cmd_outlets_ABC_Click()
DoCmd.OpenForm "OrderFormF"
Forms!OrderFormF!Outlets = "ABC"
End Sub 

然后该按钮将打开另一个表单“OrderFormF”并在名为“Outlets”的文本框中输入“ABC”。然而,我意识到第二行代码 (Forms!OrderFormF!Outlets = "ABC") 总是会在我的子表单中创建一个虚拟记录,它位于 "OrderFormF" 中,并且该记录会传递到其他客户的表单。此幻像记录通常在命令按钮被单击两次(双击或后续单击)时创建。当记录开始移动时,这是一个令人头疼的问题。

enter image description here

我想请教您对 vba 代码编辑第二行代码的建议。

谢谢。

【问题讨论】:

  • “幻影记录”是什么意思? “其他客户的表格”是什么意思(我希望您不要为客户使用单独的表格)?为什么在组合框就足够的情况下使用多个按钮?一些带有说明的屏幕转储可能会帮助您,因为这听起来您结构有待改进。
  • 幻影记录只是我创造的一个术语,因为记录不断传播到其他客户的子表单。我有一个“CustomerListF”表单,其中包含每个客户的按钮。由于我使用的是触摸屏桌面,因此对我的母亲(她是最终用户)来说,多个按钮会更容易,因为它模仿了 POS。
  • 如果您也回答我的其他问题,可能会有所帮助;)
  • 您可以尝试在单击按钮后立即禁用它,并在订单关闭后再次启用它。

标签: forms vba ms-access command record


【解决方案1】:

这种在打开的表单中填写字段的方法不好。 OrderFormF 初始化和为字段赋值的代码的第二行可能以不同的顺序执行,它们不同步。 为了避免这种情况,您应该通过另一种方式将参数传递给 OrderFormF。我建议使用OpenArgs 参数:

DoCmd.OpenForm "OrderFormF",,,,,,"ABC"

然后在 OrderFormF 的 Load 事件中赋值给文本框:

Me.Outlets = Me.OpenArgs

在这种情况下,“ABC”值将分配给表单中的第一行或新记录(如果表单为空)。如果您需要不为第一行分配值,则在分配之前可以选择该行。这种方式也可以保护您免于双击按钮,Load 事件在第一次打开表单时只执行一次

【讨论】:

  • 感谢您的友好解释。我试过了,但它对我不起作用。代码没有错误。我可以打开表格,并且表格在我的 Outlets 字段中确实包含“ABC”。但是,现在每当我打开表单时,它都会在我的子表单(位于 OrderFormF 内)中产生 2 条新记录。第一个记录仍然是一个幻影记录,它会传送到其他出口的子窗体。我能得到什么建议吗?非常感谢!
  • 确保您删除了问题中的所有行,如第二行,按所有项目搜索“Outlet”字符串
  • 我开始时总是使用新的应用程序,所以没有第二行。当我按照您的指示进行操作时,第二排开始出现在每个网点。即使我删除它们,一旦我为相同或不同的客户打开表单,它们也会再次弹出。如果我使用幻影行,它将继续出现在其他客户的表单中。请指教。
  • 看起来你有一些额外的代码,这会创建额外的行,没有它很难理解数据库中发生了什么。尝试逐步在调试器下运行应用程序,它可能会有所帮助。
  • 我认为问题可能出在使用子表单上。还有什么可以代替子窗体的吗?我设计了这种访问方式,用作我母亲的触摸屏 POS。在命令按钮方面,我有一个主要的客户形式,它将引导用户到另一种形式。该表单包含一个用于输入客户订单的子表单、一个包含我们销售产品的命令按钮的导航表单,以及一些用于数字的命令按钮。子表单将订单记录在一个表中,我创建了查询和报告以供打印。
猜你喜欢
  • 1970-01-01
  • 2017-03-30
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多