MS Access中的子表单

时间:2014-11-06 21:33:10

标签: forms ms-access subform

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

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

我是非常新的访问,任何帮助将非常感激。

感谢, ž

1 个答案:

答案 0 :(得分: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 

以上完全是" air code",它可能需要一些调整,但概念是合理的。