首页 文章

表格和子表单基于ms access 2010中的相同表格

提问于
浏览
-1

我在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的新建议,并在尝试更改组合框的选择时收到以下错误消息:

当我点击调试按钮时,它给了我以下内容:

2 回答

  • 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 Count2 ,并根据需要调整 Format 选项卡中的某些宽度 .

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

    最后,设置一个VBA过程来处理 cmbCustomerAfter Update 事件,方法是将表单导航到组合框中刚刚选择的客户ID:

    Private Sub cmbCustomer_AfterUpdate()
      set rst = Me.RecordsetClone
    
      rst.FindFirst "CustomerID = " & cmbCustomer
      Me.Bookmark = rst.Bookmark
    
      set rst = nothing
    End Sub
    

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

  • 0

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

相关问题