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

Sql 如何创建Access用户表单来查找和添加数据,sql,ms-access,ms-access-2010,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

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

主窗体的数据源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]));
这非常适合查找记录。但是,我希望用户能够将新记录添加到他们正在查找的记录中。这并没有起到应有的作用

我可以添加记录,但是我用来查找数据的表单元素,特别是
RptPrdID
UnitID
CategoryID
,没有填充到表中,因此,如果在关闭新记录或移动到另一个记录后在主窗体中再次查找新记录,则新记录是不关联的,并且不会显示

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

问题: 如何在子窗体中输入新记录以填写
RptPrdID
UnitID
CategoryID

更新

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

在插入主窗体的事件之前,在
中添加用于填写这3个字段的代码

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

非常感谢你!我知道它必须是简单的,但我不明白!谢尔盖,我改变了我的部分表格,解决方案不再有效了。我检查以确保控件具有适当的名称,并且记录源也被正确指定,但它仍然不起作用。是什么原因造成的?什么发生了变化,什么是错误消息,什么不起作用?确保表单正确显示数据,并且组合框也显示正确的数据。确保可以手动更改表单中的数据(查询仍然是可更新的)。确保代码编译时没有错误。表单正确显示数据。我可以输入数据,但当我输入数据时,上面描述的字段就被留空了。我没有收到错误消息。我已经编译了数据库,但没有效果。我将重新发布查询,因为它有所更改。。。也许你会看到一些我不需要的东西,当你看代码进行调试编译时。如果存在错误,则必须修复此类错误。由于您在子窗体中插入了记录,因此该子窗体当然不会也不允许您在主窗体中使用字段名。插入前事件当然在您的子表单中。因此,首先,进行调试编译并修复所有代码错误。接下来,您可以在该子窗体中使用me.parent.nameofcontrolinparentformgoesher引用父值和控件