MS Access 中的子表单

Posted

技术标签:

【中文标题】MS Access 中的子表单【英文标题】:Sub-Forms in MS Acess 【发布时间】:2014-11-06 21:33:09 【问题描述】:

背景:我有两张桌子。一个有一个客户端列表和一些基本客户端属性(tblClient)。第二个是产品清单。每个客户可以有多个产品,所以我在这里有一个一对多的关系,其中主键(客户名称)是产品表中的外键。

我想要做什么:我想要创建两个表单。主窗体将有客户的快照,并有一个小的嵌套表来提供所有产品的摘要。这个我已经成功完成了。我还制作了第二种表格,其中可以放入与产品相关的所有详细信息(匹配产品数据表)。我想要做的是在主客户端表单上有一个按钮,当单击该按钮时,该按钮仅打开客户端当前使用的产品的产品表单。如果没有产品,它会打开一个空白表格,其中包含一些预先填写的信息(即客户名称)。例如,如果我正在审查客户 John Doe,并且他当前拥有产品 A、B 和 C,我想单击一个按钮以拉出特定于 John Doe 的产品详细信息。如果他没有产品,我希望 Access 为我打开一个新的输入产品表单,其中已经填写了 John Doe 的姓名以避免混淆。

我是新手,非常感谢任何帮助。

谢谢, Z

【问题讨论】:

欢迎来到 ***!不幸的是,你的问题太宽泛了。请做一些研究(Access 有很多在线教程和教学视频)。如果您有特定的编码问题,我们都很乐意为您提供帮助。 您考虑过子表单 - 推荐吗?或者,查看 DoCmd 对象的 OpenForm 方法。 【参考方案1】:

我假设您的第二个表格链接到一个表格?如果是这样,只需在打开记录集时对其进行过滤。

例如,您的按钮的 OnClick 事件将查看当前的 ClientID 并根据该 ClientID 打开表单。

Dim stDocName As String
Dim stOpenArg As String

'Make stDocName the name of the form you're going to open
stDocName = "frmAssignProject"
'Make stOpenArg your variable to filter on
stOpenArg = Me.ClientID

DoCmd.OpenForm stDocName, , , , , , stOpenArg

然后,在第二个表单的 OnLoad 事件中,根据您的 OpenArg 进行过滤:

private sub form_load()
   Dim rs as DAO.Recordset

   Me.RecordSource = "Select * From tblProducts Where ClientID = " & OpenArgs & ""

   Set rs = Me.RecordsetClone

   'This is where it determines if it should pull in the data from the previous form
   If rs.RecordCount > 0 Then       
   else
      Me.ClientID = Forms!frmClients.ClientID
      Me.ClientName = Forms!frmClients.ClientName
      etc... 
   end if

 end sub 

以上完全是“空中代码”,可能需要一些调整,但概念是合理的。

【讨论】:

以上是关于MS Access 中的子表单的主要内容,如果未能解决你的问题,请参考以下文章

无法在MS-Access中的子中使用函数的变量

MS-Access - 从超链接数据单击打开表单

Ms Access:来自另一个子表单的子表单重新查询未更新

MS Access 365 - 创建包含链接文件的子表单

MS Access 在连接表中不存在的子表单中显示条目

MS Access 嵌套子表单链接到主(父)表单