如何创建Access用户表单以查找和添加数据

时间:2016-07-21 08:23:29

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

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

主窗体的数据源的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未在表格中填充,因此,如果您在关闭它或转移到另一个记录后再以主要形式再次查找新记录,则新记录将无法关联,并且不会显示。

就我在" WHERE"中使用的表单元素而言,这是有意义的。 SQL的标准是未绑定的,但当然,如果我添加一条新记录,我希望它能够正确匹配。如果用户再次查找相同的标准,他必须能够找到他添加的记录。

问题: 如何在子表单中输入新记录以填充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

1 个答案:

答案 0 :(得分:2)

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

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