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

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

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

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

谢谢, Z

【问题讨论】:

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

标签: forms ms-access subform


【解决方案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 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多