【问题标题】:How to create Access User Form to both look up and add data如何创建访问用户表单以查找和添加数据
【发布时间】:2016-07-29 21:19:18
【问题描述】:

我有一个包含两个子表单的访问表单。主窗体具有三个下拉字段,允许用户选择在两个链接的子窗体中显示的数据。下拉字段都是未绑定的,因为它们在主表单的数据源中被引用。

主窗体数据源的SQL如下:

SELECT tbl_RptPeriod.RptPrdID, tbl_BusUnits.UnitID, tbl_Categories.CategoryID, tbl_Categories.CategoryTitle, tbl_Categories.CategoryGroup, tbl_Categories.Inactive, tbl_Categories.RptPrdID, tbl_Categories.UnitID
FROM tbl_RptPeriod INNER JOIN (tbl_BusUnits INNER JOIN tbl_Categories ON tbl_BusUnits.UnitID = tbl_Categories.UnitID) ON tbl_RptPeriod.RptPrdID = tbl_Categories.RptPrdID
WHERE (((tbl_RptPeriod.RptPrdID)=[Forms]![Compliance]![cmbReportPeriod]) AND ((tbl_BusUnits.UnitID)=[Forms]![Compliance]![cmbBusinessUnit]) AND ((tbl_Categories.CategoryID)=[Forms]![Compliance]![CategoryTitle]));

这非常适合查找记录。但是,我希望用户能够将新记录添加到他们正在查找的记录中。这不正常。

我可以添加记录,但是我用来查找数据的表单元素,特别是 RptPrdIDUnitIDCategoryID 没有填充到表中,因此新记录是不关联的如果您在关闭或移动到另一条记录后再次在主窗体中查找它们,请不要显示。

这是有道理的,因为我在 SQL 的“WHERE”条件中使用的表单元素是未绑定的,但当然,如果我添加一条新记录,我希望它能够正确匹配。如果用户再次查找相同的条件,他必须能够找到他添加的记录。

问题: 如何在子表单中输入新记录以填写 RptPrdIDUnitIDCategoryID

更新

SELECT tbl_Activity.CategoryID AS CategoryID_X, tbl_Activity.RptPrdID AS RptPrdID_X, tbl_Activity.UnitID AS UnitID_X, tbl_Categories.SortKey, tbl_Categories.CategoryTitle, tbl_Categories.CategoryGroup, tbl_Categories.Inactive, tbl_Categories.Inactive, tbl_BusUnits.Unit_Name, tbl_RptPeriod.Rep_Month_Nr, tbl_RptPeriod.Rep_Month_Name, tbl_RptPeriod.Rep_Year
FROM tbl_RptPeriod INNER JOIN (tbl_Categories INNER JOIN (tbl_BusUnits INNER JOIN tbl_Activity ON tbl_BusUnits.UnitID = tbl_Activity.UnitID) ON tbl_Categories.CategoryID = tbl_Activity.CategoryID) ON tbl_RptPeriod.RptPrdID = tbl_Activity.RptPrdID
WHERE (((tbl_Activity.CategoryID)=[Forms]![Compliance_EXPERIMENT]![cmbCategoryTitle]) AND ((tbl_Activity.RptPrdID)=[Forms]![Compliance_EXPERIMENT]![cmbReportPeriod]) AND ((tbl_Activity.UnitID)=[Forms]![Compliance_EXPERIMENT]![cmbBusinessUnit]))
ORDER BY tbl_Categories.SortKey;

我不得不稍微更改查询,但关键字段仍然是相同的,尽管它们现在位于不同的表上。

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.RptPrdID_X = Me.cmbReportPeriod
    Me.UnitID_X = Me.cmbBusinessUnit
    Me.CategoryID_X = Me.cmbCategoryTitle
End Sub

【问题讨论】:

    标签: sql ms-access ms-access-2010


    【解决方案1】:

    在主窗体的Before Insert 事件中添加填充这三个字段的代码

    Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.RptPrdID = Me.cmbReportPeriod
    Me.UnitID = Me.cmbBusinessUnit
    Me.CategoryID = Me.CategoryTitle
    End Sub
    

    【讨论】:

    • 非常感谢!我新它必须是一些简单的东西,但我没有得到它!
    • Sergey,我更改了部分表单,但该解决方案不再有效。我检查以确保控件具有适当的名称,并且记录源也被正确指定,但它仍然不起作用。是什么原因造成的?
    • 发生了什么变化,什么是错误信息或什么不起作用?确保表单正确显示数据,并且组合框也显示正确的数据。确保您可以手动更改表单中的数据(查询仍可更新)。确保代码编译没有错误。
    • 表格正确显示数据。我可以输入数据,但是当我输入时,上面描述的字段只是留空。我没有收到错误消息。我已经编译了数据库,但它没有效果。我将重新发布查询,因为它已经有所改变......也许你会看到我没有看到的东西
    • 您在查看代码时需要进行调试编译。如果存在错误,那么您必须修复此类错误。而且由于您在子表单中插入记录,那么该子表单当然不会也不允许您在主表单中使用字段名称。插入事件之前当然是在您的子表单中。因此,首先,进行调试编译并修复所有代码错误。接下来,您可以在该子表单中使用 me.Parent.NameOfControlInParentFormGoesHere 引用父值和控件
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 2013-02-05
    • 2013-10-22
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多