使用基于查询的表单从不同的表中插入字段。微软访问 2007

Inserting fields from different tables using query based forms. MS Access 2007

我正在 MS Access 2007 中创建一个 formform 是从单个 parent table 拉取的。它还包含从 query 拉取的 sub-formquery 本身是从关联到父级的 child table 和一个名为 t_item.

的相关 table 拉取的

我在 child table 上创建了一个与 t_item 相关的 lookup field,以便自动填写 form 上的字段。这一切都很棒。

我的问题是,我的 lookup fieldt_item 中提取的 query 中的值没有被提取到 child table 中。我不太确定我需要去哪里解决这个问题。我一直在寻找可以让我控制 sub-form 数据的 writing 的东西,但似乎没有任何效果。

这是查询

 SELECT 
        [t_export_details].[Export ID]
    ,   [t_export_details].[ItemLookup]
    ,   [t_item].[Description]
    ,   [t_item].[HACCP]
    ,   [t_item].[Species]
    ,   [t_item].[Maturity]
    ,   [t_item].[Frozen / Shelf Storeable]
    ,   [t_item].[Package Type]
    ,   [t_export_details].[Package Count]
    ,   [t_export_details].[Net Weight]
    ,   [t_export_details].[Marks]
    ,   [t_export_details].[Establishment Number] 
FROM t_item INNER JOIN t_export_details ON t_item.[Item ID]

这是当前结果的示例。想要的结果是将查询中从 t_item 中提取的字段转移到 child table 上。这是 child 当前如何处理 "creating" 表单记录的片段。

因此,经过一些评论后,我更改了 SQL 声明。这就是现在的样子。

SELECT 
  t_export_details.[Export ID]
, t_export_details.ItemLookup
, t_item.Description
, t_item.HACCP
, t_item.Species
, t_item.Maturity
, t_item.[Frozen / Shelf Storeable]
, t_item.[Package Type]
, t_export_details.[Package Count]
, t_export_details.[Net Weight]
, t_export_details.Marks
, t_export_details.[Establishment Number]
FROM t_item INNER JOIN t_export_details 
ON (t_item.[Item ID] = t_export_details.ItemLookup) AND (t_item.[Item ID] = t_export_details.[Item ID]);

但是这仍然没有写到 child table t_export_details

这是 Access 2007 上的查询设计视图

下面的解决方案。

概述:Access 不允许编辑 many-to-one 关系。它不会检查您的查询输出是否创建了 one-to-one 关系。基本解决方案是在用户使用 main report 上的 button 触发的 macro 输入数据后进行更新。

部分细分。

最终 query subreport

SELECT t_export_details.[Export ID]
, t_export_details.ItemLookup
, t_item.Description
, t_item.HACCP
, t_item.Species
, t_item.Maturity
, t_item.[Frozen Shelf Storeable]
, t_item.[Package Type]
, t_export_details.[Package Count]
, t_export_details.[Net Weight]
, t_export_details.Marks
, t_export_details.[Establishment Number]
FROM (t_item INNER JOIN t_export_details ON t_item.[Item ID] = t_export_details.ItemLookup) 
INNER JOIN t_export ON t_export_details.[Export ID] = t_export.[Export ID];

这里没有太大变化。主要问题是使用 Lookup 字段作为 join 条件。将此经验与我在网上阅读的内容相结合后,我通常会建议不要 joining 查找值。但是,出于报告原因,有必要将其保留在我的案例中。

Update query 到 运行 在 main report

中按下按钮
UPDATE t_item INNER JOIN t_export_details ON t_item.[Item ID]=t_export_details.ItemLookup 
SET t_export_details.[Item ID] = [t_item].[Item ID]
, t_export_details.HACCP = [t_item].[HACCP]
, t_export_details.Species = [t_item].[Species]
, t_export_details.[Frozen Shelf Storeable] = [t_item].[Frozen Shelf Storeable]
, t_export_details.[Package Type] = [t_item].[Package Type]
WHERE (((t_export_details.[Export ID])=[Forms]![USDAExport]![Export ID]));

updatejoin 语句没什么特别有趣的。请注意 where 中用于命名约定的子句 access 2007/vba

main report

中按钮的宏

saveRecord 保存 main report 记录。此处需要 Requery 以强制对 sub report 记录进行隐藏保存。如果不这样做,则 lookup 字段之前的 update query 运行 已被 access updated。这导致 update query 在再次按下之前什么都不做。 setWarnings = No 对于防止用户在执行 query 时被提示很重要。希望其他一切都是不言自明的。 Close 在布什总统任期后的 ms-access 版本中被称为 closeWindowms-access

里面的工具相当不错 macro

求解后输出数据

请注意,所有 output 数据都是我编造的假谎言。

外卖

  • Access 2007 仍然是一个强大但令人沮丧的可视化界面程序。这让许多开发者感到失望,他们曾希望永远不需要学习 2012 年之前创建的任何东西。
  • Event/visually 面向编程在在线环境中提出好的问题是独一无二的挑战。
  • 我应该开始将自己推销为仅后端开发人员。

最后,我最有用的资源

  1. 留下有用评论或澄清问题的每个人

  2. 如何将 query 用于 formhttps://support.office.com/en-gb/article/use-a-query-as-the-record-source-for-a-form-or-report-e54251f3-57ca-4a7d-8e77-e498966cd41b 请特别注意 "When can I edit a query?" 部分。

  3. queries的参数传入:https://support.office.com/en-us/article/use-parameters-in-queries-forms-and-reports-8209eb5c-1589-42e2-9b20-4181f4c7a356

  4. 如何构建updatequeryhttps://www.safaribooksonline.com/library/view/access-cookbook/0596000847/ch01s06.html

  5. 创建一个Macro到运行一个queryhttp://www.databasedev.co.uk/open-query-macro.html

  6. 关闭 run query 宏的警告:https://support.office.com/en-us/article/Turn-action-query-confirmation-messages-on-or-off-e58e4bba-9d54-4b9d-b962-9eca048e5335#__use_a_macro