首页 > 解决方案 > 使用基于查询的表单从不同的表中插入字段。微软访问 2007

问题描述

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

为了自动lookup field填写. child table_ 这一切都非常有效。t_itemform

我的问题是,我query从中提取的值没有在. 我不确定我需要去哪里解决这个问题。我一直在寻找可以让我控制 的数据的东西,但似乎没有任何效果。t_itemlookup fieldchild tablewritingsub-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. 这是child当前从表单“创建”记录后的外观片段。

您可以看到从 <code>t_item</code> 中提取的字段保持空白

所以在一些评论之后,我改变了 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 上的查询设计视图

在此处输入图像描述

标签: sqlms-accessms-access-2007

解决方案


下面的解决方案。

概述:Access不允许编辑many-to-one关系。它不检查您的查询输出是否创建了one-to-one关系。基本解决方案是在用户输入数据后macro使用.buttonmain report

部分细分。

决赛querysubreport

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

updateorjoin语句没有什么太有趣的地方。注意/中的where命名约定条款access 2007vba

按钮的宏main report

按钮宏

saveRecord保存main report记录。Requery此处需要强制在sub report记录上进行隐藏保存。如果不这样做,则update query该字段之前的运行lookupupdated通过access。这导致在update query再次按下它之前实际上什么都不做。setWarnings=No对于防止用户在执行query. 希望其他一切都是不言自明的。在布什总统任期后制造的版本中Close被称为。里面很不错的工具closeWindowms-accessmacroms-access

求解后输出数据

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

最终数据

外卖

  • Access 2007 仍然是一个强大但令人沮丧的可视界面程序。这让许多希望永远不需要学习 2012 年之前创建的任何东西的开发人员感到失望。
  • 以事件/视觉为导向的编程对于在在线环境中提出好的问题具有独特的挑战性。
  • 我应该开始将自己推销为仅后端开发人员。

最后,我最有用的资源

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

  2. 如何使用querya 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 特别注意“我什么时候可以编辑查询?” 部分。

  3. 参数传入:https queries: //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


推荐阅读