MS Access - 打开一个带有新记录的表单并从以前的表单中插入一个值

Posted

技术标签:

【中文标题】MS Access - 打开一个带有新记录的表单并从以前的表单中插入一个值【英文标题】:MS Access - opening a form with a new record and inserting a value from a previous form 【发布时间】:2011-01-07 08:27:54 【问题描述】:

我在 MS Access 数据库中有一个表格,其中列出了带有订单号的订单,每页一个订单。在表单的底部有一个按钮,可以打开另一个表单,为订单添加一个项目。

我正在尝试在 MS Access 中使用 vb 来获取订单号并自动将其放入新商品详细信息表单的字段中。我尝试了不同的方法,但似乎建议使用 OpenArgs。但是详细信息表单无法打开,并且出现运行时错误。 以下是问题的详细信息 - 非常感谢您的建议:

涉及的表格和字段有: 带有订单的表格是 frmPedidoAvifiFind 带有订单行的表格是 frmPedidoAvifi-dtlAdd(用于添加详细信息但不用于查看现有详细信息的单独表格)。 订单号的两个表格中的字段都是 PedidoAvifiNo。这是两个表中的数字字段,通过该字段通过一对多关系链接。

主窗体:按钮调出详细窗体,代码如下:

主表单按钮上的代码:

Sub AddDetails_Click()
  Dim strDocName As String

    strDocName = "frmPedidoAvifi-dtlAdd"

    ' Open frmPedidoAvifi-dtl form in data entry mode and store PedidoAvifiNo in  the form's OpenArgs property.

    DoCmd.OpenForm strDocName, , , , acFormAdd, , [frmPedidoAvifiFind]![PedidoAvifiNo]

End Sub

详细表格:打开属性

Private Sub Form_Open()
If Me.OpenArgs <> vbNullString Then
   Me.PedidoAvifiNo = Me.OpenArgs
End If

End Sub

测试1:在主窗体上选择一个订单号,以便记录显示。 按下按钮添加订单线。 - 运行时错误“2465”找不到字段“|”所指。 Debug 突出显示 DoCmd 行。

测试 2: 将 openform 行更改为: DoCmd.OpenForm strDocName, , , , acFormAdd, , Me.PedidoAvifiNo 结果:- 运行时错误 2501 openForm 操作被取消。

谢谢你, 迈克·冈纳 西班牙雷乌斯

【问题讨论】:

子表单是在 MS Access 中处理此用例的好方法。 子表单很棒,但在您需要大量控制时添加记录就不那么好了。 @Remou:我想先解释一下为什么子表单不能工作,然后再处理弹出表单。 @David-W-Fenton 我并没有说它不起作用,只是当您需要大量控制时,子表单并不总是添加数据的最佳方式。我完全支持子表单,但我并不总是使用它们来添加记录。 我只是说,在主/子数据关系的情况下,子表单应该是第一个浮现在脑海中的 UI 实现,而您只会采用不同的方法(无论是弹出窗口或一对链接列表/详细信息子表单),如果这不起作用。换句话说,从 Access 使事情变得简单的方式开始,只有在简单的方式不够充分(或变得过于复杂)时才使事情复杂化。 【参考方案1】:

您收到的错误意味着您拼错了控件名称PedidoAvifiNo

当您键入Me. 时,intellisense 将为您提供可用字段列表,查看您拥有的与PedidoAvifiNo 相似的内容,或检查属性。切换一个字母而不注意是很容易的。

至于第二部分,您应该使用 Load 事件,而不是 frmPedidoAvifi-dtlAdd 上的 Open 事件,因为 Open 事件中的控件尚不可用。

【讨论】:

以上是关于MS Access - 打开一个带有新记录的表单并从以前的表单中插入一个值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 中的特定记录处打开表单

ms-access 2003:表单打不开!帮助!

MS Access:如何根据子表单中的字段打开表单

从另一个表单打开具有匹配 AutoID 的 MS Access 表单

MS Access:带有复选框的表单过滤器以应用预定义的标准

子表单在 MS Access 中的主表单之前打开