我正在form
中创建一个MS Access 2007
。 form
从单个parent table
中提取。它还包含从sub-form
中提取的query
。 query
本身就是从与父级关联的child table
和一个称为table
的相关t_item
中提取的。
我在lookup field
上创建了一个与child table
相关的t_item
,以便自动填写form
上的字段。这一切都很棒。
我的问题是,我的query
从t_item
中提取的lookup field
中的值没有被child table
中提取。我不确定我应该去哪里解决此问题。我一直在寻找可以控制writing
的{{1}}数据的东西,但是似乎没有任何作用。
这是查询
sub-form
这是当前结果的一个示例。期望的结果是将要从查询中的 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
当前从表单“创建”记录后的外观的摘要。
因此,在发表评论后,我更改了SQL语句。这就是现在的样子。
child
但这仍然没有写到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
这是Access 2007上的查询设计视图
答案 0 :(得分:1)
下面的解决方案。
概述:Access
不允许编辑many-to-one
关系。它不会检查您的查询输出是否创建了one-to-one
关系。基本解决方案是在用户使用macro
上的button
触发的main report
输入数据后进行更新。
按部分细分
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
记录上进行隐藏保存。如果未完成,则update query
在lookup
被updated
access
之前运行。这导致update query
实际上没有执行任何操作,直到再次按下它为止。 setWarnings
= No
对于防止在执行query
时提示用户很重要。希望其他一切都是自我解释。在布什总统任职后的Close
版本中,closeWindow
被称为ms-access
。 macro
内的漂亮ms-access
工具
解决方案后输出数据
请注意,我所有的output
数据都是伪造的谎言。
要点
最后,我最有用的资源
每个发表有帮助的评论或澄清问题的人
如何为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
请特别注意“何时可以编辑查询?”部分。
如何构造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