-1

我在 ms access 2010 数据库中有一个客户表,包括 CustomerID、FullName、Address、City、StateProvince、PostalCode 等。

我想设置一个包含两个子表单的主表单。ListSubForm 只有一个全名列表,用户可以通过在文本框中输入来过滤。DetailSubForm 然后为用户从 ListSubForm 的过滤列表中选择的特定客户打印出地址、城市、州省、邮政编码等内容。

我在网上可以找到的所有示例都是针对 Master/Detail 子表单的,其中 master 和 detail 是两个不同的表,具有一对多的关系。那不是我想要的。谁能指出我基于同一张表设置主/详细子表单的说明?一个子表单只是提供有关从第一个子表单中选择的特定记录的更多详细信息?

或者,如果您没有指向工作示例的链接,至少请告诉我如何设置它?我想避免对 VBA 太深入,因为我是新手。我更喜欢可以使用简单宏进行设置的东西。

以下是设计视图中 MainForm 上的两个子窗体:

以下是表单视图中 MainForm 上的两个子表单:

这是单击 ClientListForm 属性表中 On Current Event 旁边的 ... 按钮的结果:

我从这里去哪里?

编辑:

我按照 Yawar 的建议创建了一个拆分表格。它允许用户选择一个客户,然后在左侧更详细地显示其数据,但它看起来像这样:

数据表很丑陋,而且数据表不可过滤,因此用户必须浏览数千条记录。有没有办法让它看起来不是左边的数据表?也许一开始就不让它成为数据表?在我上面的原始示例中,带有文本框过滤器的连续表单看起来不错。此外,有没有办法使左侧的客户列表可过滤,以便用户可以输入客户的姓名,然后能够将客户列表缩小为仅具有所需名称的客户列表?

第二次编辑:

在 Yawar 的编辑之后,我再次按照组合框的说明再次收到错误消息。此外,这种方法也存在问题,因为它是一个下拉列表,不会一次显示所有选项,而且组合框也没有像我在上面的原始帖子中显示的那样被过滤。但是,我将结果发布如下。这是出现的错误消息,请注意右侧的详细信息与左侧选定的客户端不匹配:

如果单击上图中的调试按钮,您将被定向到以下代码行:

为了更好地衡量,这里是基础表的部分数据表的图像,以表明字段名称是正确的:

第三次编辑:

我更改了代码以匹配 Yawar 的新建议,并在尝试更改组合框的选择时收到以下错误消息:

当我单击调试按钮时,它给了我以下信息:

4

2 回答 2

1

您不需要子表单来处理一对一的关系。将您的全名组合框(我们称之为cmbCustomer)放在主窗体上。但不要将它绑定到您的基础Clients表。Data > Row Source相反,不要绑定它,并使用其属性填充客户全名。您可以在 中使用 SQL 语句Row Source,例如:

select distinct FullName, CustomerID
from Clients
order by FullName

确保Data > Bound Column属性设置为2. 您希望在此字段中捕获客户 ID。还要确保Format > Column Count2,并根据需要调整选项卡中的一些宽度Format

现在用所有客户表字段填写主表单的其余部分,包括客户 ID 字段。这一次,将它们全部绑定到底层数据源。Field List我使用的快捷方式是从面板中的列表中拖放字段(设计 > 添加现有字段)。但是,隐藏CustomerID字段 ( Format > Visible = No)。

最后,通过将表单导航到刚刚在组合框中选择的任何客户 ID ,设置一个 VBA 过程来处理cmbCustomer'事件:After Update

Private Sub cmbCustomer_AfterUpdate()
  set rst = Me.RecordsetClone

  rst.FindFirst "CustomerID = " & cmbCustomer
  Me.Bookmark = rst.Bookmark

  set rst = nothing
End Sub

瞧,只要您从组合框中选择新客户,表单就会自动跳转到所选客户 ID。

于 2013-09-17T03:27:31.983 回答
0

我对 Access 知之甚少,但认为以下方法是可行的:创建详细信息表单和数据表表单。不要通过某个键链接它们,但是当用户单击数据表中的一行时,将键参数 (RecordID) 传递给详细信息表单并触发重新查询。

于 2015-10-26T05:25:47.537 回答