使用基于查询的表单从不同的表中插入字段。微软访问 2007
Inserting fields from different tables using query based forms. MS Access 2007
我正在 MS Access 2007
中创建一个 form
。 form
是从单个 parent table
拉取的。它还包含从 query
拉取的 sub-form
。 query
本身是从关联到父级的 child table
和一个名为 t_item
.
的相关 table
拉取的
我在 child table
上创建了一个与 t_item
相关的 lookup field
,以便自动填写 form
上的字段。这一切都很棒。
我的问题是,我的 lookup field
从 t_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]));
update
或 join
语句没什么特别有趣的。请注意 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
版本中被称为 closeWindow
。 ms-access
里面的工具相当不错 macro
求解后输出数据
请注意,所有 output
数据都是我编造的假谎言。
外卖
- Access 2007 仍然是一个强大但令人沮丧的可视化界面程序。这让许多开发者感到失望,他们曾希望永远不需要学习 2012 年之前创建的任何东西。
- Event/visually 面向编程在在线环境中提出好的问题是独一无二的挑战。
- 我应该开始将自己推销为仅后端开发人员。
最后,我最有用的资源
留下有用评论或澄清问题的每个人
如何将 query
用于 form
:https://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?" 部分。
如何构建update
query
:https://www.safaribooksonline.com/library/view/access-cookbook/0596000847/ch01s06.html
创建一个Macro
到运行一个query
http://www.databasedev.co.uk/open-query-macro.html
关闭 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
我正在 MS Access 2007
中创建一个 form
。 form
是从单个 parent table
拉取的。它还包含从 query
拉取的 sub-form
。 query
本身是从关联到父级的 child table
和一个名为 t_item
.
table
拉取的
我在 child table
上创建了一个与 t_item
相关的 lookup field
,以便自动填写 form
上的字段。这一切都很棒。
我的问题是,我的 lookup field
从 t_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]));
update
或 join
语句没什么特别有趣的。请注意 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
版本中被称为 closeWindow
。 ms-access
macro
求解后输出数据
请注意,所有 output
数据都是我编造的假谎言。
外卖
- Access 2007 仍然是一个强大但令人沮丧的可视化界面程序。这让许多开发者感到失望,他们曾希望永远不需要学习 2012 年之前创建的任何东西。
- Event/visually 面向编程在在线环境中提出好的问题是独一无二的挑战。
- 我应该开始将自己推销为仅后端开发人员。
最后,我最有用的资源
留下有用评论或澄清问题的每个人
如何将
query
用于form
:https://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?" 部分。如何构建
update
query
:https://www.safaribooksonline.com/library/view/access-cookbook/0596000847/ch01s06.html创建一个
Macro
到运行一个query
http://www.databasedev.co.uk/open-query-macro.html关闭
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