ms access 2010 中的主详细信息子表单

Posted

技术标签:

【中文标题】ms access 2010 中的主详细信息子表单【英文标题】:master detail subforms in ms access 2010 【发布时间】:2013-09-16 23:44:54 【问题描述】:

我在 MS Access 2010 数据库中有一个客户表。我想创建一个包含两个子表单的表单,它们一起允许用户选择客户并查看有关客户的更多详细信息。

customers 表如下所示:

CustomerID  
FullName  
Address  
City  
StateProvince  
Other fields  

我在设计视图中通过将 CustomerListForm 和 CustomerDetailForm 拖到 MainForm 上创建的 mainForm。

CustomerListForm is on left side and lets users filter customers from long list  
  Contains the following controls:  
    txtFilter textbox with embedded macro where = [LastName] Like [Forms]![CustomerListForm]![txtFilter] & "*"  
    FullName textbox and hidden CustomerID textbox which are bound to CustomersTable  
CustomerDeatilForm located on right, with contents changing based on selection from CustomerListForm  
    If no customer selected from CustomerListForm, show default message  
    Else:  
        Show FullName, address, city, and stateprovince of customer selected from CustomerListForm  
        txtFullName set =[CustomersTable]![FullName], and so on for other fields

当我单独运行我的 CustomerListForm 时,它确实允许用户通过输入名称来过滤客户记录。但是当我在 mainForm 中嵌入 CustomerListForm 时,这种过滤能力就消失了。此外,我在 CustomerListForm 中的过滤结果不包含任何类型的链接,这意味着 CustomerDetailForm 似乎无法识别它应该输出数据的客户。

谁能告诉我如何设置?我想如果我能跑这么多,我将能够填补我正在进行的其他研究的空白。

编辑:

我看到 CustomerListForm 上的 FullName 文本框有一个 OnClick 方法。 FullName 在 CustomerListForm 中不可编辑。 CustomerID 是 CustomerListForm 中每条记录旁边的隐藏字段。我还看到 FullName 文本框的属性表的格式选项卡中有多个超链接设置。是否可以使用 FullName 文本框的 OnClick 方法将 CustomerID 发送到 CustomerDetailForm?也许在超链接中?

【问题讨论】:

【参考方案1】:

子表单可能通过 CustomerID 链接到父表单?

从子窗体控件的 LinkMasterID、LinkChildID 属性中删除此值(在父窗体中 - 与子窗体本身的窗体属性相反)

去掉宏,为txtFilter创建一个AfterUpdate事件,它找到相关数据并显示在CustomerListForm中;除了这个过程中的任何其他代码,把

Dim CustID as Long: CustID = [get customerID from wherever it is]

... [your other code]

Me.Parent.LockCustomer CustID

在外部表单中,在vba中添加这个:

Public Sub LockCustomer(CustID as Long)
    CustomerDetailForm.Form.RecordSource = _
        "SELECT * FROM Customer WHERE CustomerID = " & CustID
End Sub

如果您在主表单上除了子表单之外还有任何类型的客户详细信息,并且您希望在主表单和详细信息子表单的列表表单中显示所选客户的详细信息,而不是设置 CustomerDetailForm .Form.RecordSource,设置 Me.RecordSource 并确保 Detail 子表单控件的 LinkMasterID、LinkChildID 属性设置为 CustomerID。

【讨论】:

+1 以获得如此周到和快速的响应。你能用更多的初学者,新手语言详细说明吗?是的,我希望 CustomerID 成为 CustomerListForm 和 CustomerDetailForm 之间的链接,但我没有在任何地方设置它,需要帮助。我在 mainForm 的属性表中找不到 LinkMasterID、LinkChildID。 CustomerID 应该存储在 CustomerListForm 的每个结果中,但我不知道如何将其放入链接然后与 CustomerDetailForm 共享。另外,我可以在嵌入式宏中执行此操作吗?我是 vba 新手,想保持简单。 我在上面的原始帖子中添加了一些关于这可能如何工作的想法。也许上面的编辑可以帮助您澄清我的问题,以便我们可以得到一个我可以以最低复杂性部署的答案。

以上是关于ms access 2010 中的主详细信息子表单的主要内容,如果未能解决你的问题,请参考以下文章

MS Access = 引用子表单中的控件

MS Access 子表单的多个分离条件

MS Access 2010:是不是可以链接数据表子表单

检查 Access 2010 导航子窗体是不是打开

MS Access:数据表属性(作为子表单)- 表单未打开,错误:2489?

如何遍历所有子窗体 MS Access VBA