我在ms access 2010数据库中有一个customers表,包括CustomerID,FullName,Address,City,StateProvince,PostalCode等。
我想设置一个包含两个子表单的主表单。 ListSubForm只有一个FullNames列表,用户可以通过键入文本框来过滤。然后,DetailSubForm为ListSubForm中的筛选列表中的用户选择的特定客户打印诸如Address,City,StateProvince,PostalCode等内容。
我可以在网上找到的所有示例都是Master / Detail子表单,其中master和detail是两个不同的表,具有一对多的关系。那不是我想要的。谁能指点我根据同一个表设置主/细节子表单的说明?有一个子表单只是提供了从第一个子表单中选择的特定记录的更多细节?
或者,如果您没有指向工作示例的链接,至少请告诉我如何设置它?我想避免深入VBA,因为我是新手。我更喜欢我可以使用简单的宏设置的东西。
以下是设计视图中MainForm上的两个子表单:
以下是表单视图中MainForm上的两个子表单:
以下是单击ClientListForm属性表中当前事件旁边的...按钮的结果:
我从哪里开始?
编辑:
我根据Yawar的建议创建了一个拆分表单。它允许用户选择其数据然后在左侧更详细地显示的客户,但它看起来像这样:
数据表很难看,数据表不可过滤,因此用户必须标记数千条记录。有没有办法让它看起来像是左边的数据表?也许首先不把它作为数据表?在我上面的原始示例中,带有文本框过滤器的连续表单看起来很好。此外,是否有一种方法可以使客户列表保持可过滤,以便用户可以键入客户的名称,然后能够将客户列表缩减为仅具有所需名称的客户列表?
第二次编辑:
在Yawar编辑之后,我再次按下组合框指令并再次收到错误消息。此外,这种方法存在问题,因为它是一个下拉列表,不会立即显示所有选项,也不会像我在上面的原始帖子中显示的那样过滤组合框。但是,我发布的结果如下。这是出现的错误消息,请注意右侧的详细信息与左侧的所选客户端不匹配:
如果单击上图中的调试按钮,则以下是您指向的代码行:
为了更好地衡量,下面是基础表数据表的一部分图像,以显示字段名称是否正确:
第三次编辑:
我更改了代码以匹配Yawar的新建议,并在尝试更改组合框的选择时收到以下错误消息:
当我点击调试按钮时,它给了我以下内容:
答案 0 :(得分:1)
您不需要子表单来处理一对一的关系。在主窗体上放置您的全名组合框(让我们称之为cmbCustomer
)。但是不要将它绑定到您的基础Clients
表。而是将其保持未绑定状态,并使用其Data > Row Source
属性将其填入客户全名。您可以在Row Source
中使用SQL语句,例如:
select distinct FullName, CustomerID
from Clients
order by FullName
确保Data > Bound Column
属性设置为2
。您希望在此字段中捕获客户ID。另外,请确保Format > Column Count
为2
,并根据需要调整Format
标签中的部分宽度。
现在用所有客户表字段填写主表单的其余部分,包括客户ID字段。这一次,将它们全部绑定到底层数据源。我使用的快捷方式是从Field List
面板中的列表中拖放字段(设计>添加现有字段)。但是,请隐藏CustomerID
字段(Format > Visible = No
)。
最后,设置一个VBA程序来处理cmbCustomer
的{{1}}事件,方法是将表单导航到组合框中刚刚选择的客户ID:
After Update
Voila,只要您从组合框中选择新客户,表单就会自动跳转到所选的客户ID。
答案 1 :(得分:0)
我对Access知之甚少,但认为以下方法是可行的:创建详细信息表单和数据表表单。不要通过某些键链接它们,但是当用户单击数据表中的一行时,将关键参数(RecordID)传递给详细信息表单并触发重新查询。