2014-11-06 173 views
0

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

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

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

感谢, ž

+0

欢迎来到StackOverflow!不幸的是,你的问题太广泛了。请做一些研究(有很多在线教程和Access的教​​学视频)。如果您有特定的编码问题,我们都会很乐意为您提供帮助。 – Barranka 2014-11-06 21:36:12

+0

你有没有考虑子表单 - 推荐?或者,查看DoCmd对象的OpenForm方法。 – Fionnuala 2014-11-07 00:37:53

回答

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 

以上完全是“空码”,它可能会需要一些调整,但是其概念声音。