使用基于查询的表单从不同的表插入字段。 MS Access 2007

时间:2018-07-19 22:59:00

标签: sql ms-access ms-access-2007

我正在form中创建一个MS Access 2007form从单个parent table中提取。它还包含从sub-form中提取的queryquery本身就是从与父级关联的child table和一个称为table的相关t_item中提取的。

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

我的问题是,我的queryt_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当前从表单“创建”记录后的外观的摘要。

You can see that the fields being pulled from <code>t_item</code> are remaining blank

因此,在发表评论后,我更改了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上的查询设计视图

enter image description here

1 个答案:

答案 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]));

updatejoin语句没什么太有趣的。请注意where / access 2007

中的命名约定的vba子句

main report中的“宏”按钮

Button Macro

saveRecord保存main report记录。在这里需要Requery才能在sub report记录上进行隐藏保存。如果未完成,则update querylookupupdated access之前运行。这导致update query实际上没有执行任何操作,直到再次按下它为止。 setWarnings = No对于防止在执行query时提示用户很重要。希望其他一切都是自我解释。在布什总统任职后的Close版本中,closeWindow被称为ms-accessmacro内的漂亮ms-access工具

解决方案后输出数据

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

Final Data

要点

    如果令人沮丧的可视界面程序,Access 2007仍然很强大。对于许多希望永远不需要学习2012年之前创建的东西的开发人员来说,这是令人失望的。
  • 面向事件/视觉的程序设计在在线环境中提出很好的问题时特别具有挑战性。
  • 我应该开始以后端开发人员的身份推销自己。

最后,我最有用的资源

  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 请特别注意“何时可以编辑查询?”部分。

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

  4. 如何构造update queryhttps://www.safaribooksonline.com/library/view/access-cookbook/0596000847/ch01s06.html

  5. 创建一个Macro来运行query http://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